让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

Posted

技术标签:

【中文标题】让 VoiceChannel.members 和 Guild.members 返回完整列表的问题【英文标题】:Issues with getting VoiceChannel.members and Guild.members to return a full list 【发布时间】:2021-01-24 22:03:58 【问题描述】:

每当我尝试使用 VoiceChannel.members 或 Guild.members 时,它都不会为我提供适用成员的完整列表。我在这样的文本命令中从上下文中获取 VoiceChannel 和 Guild:

@bot.command(name='followme')
async def follow_me(ctx):
    if ctx.author.voice != None:
        guild = ctx.guild
        tracking = ctx.author
        channel = tracking.voice.channel

后来我尝试使用这样的频道:

for member in channel.members:
            if member.voice.mute != True:
                await member.edit(mute=True)

但是,尽管频道中有其他用户,但它只能找到我的用户。

我发现在频道中获得准确代表的唯一方法是使用:

channel.voice_states.keys()

使用 voice_states,我可以获得准确的成员列表,但只有在我仍然需要操纵成员本身时才能通过他们的 ID。 所以我尝试了这个:

for key in channel.voice_states.keys():
            member = guild.get_member(key)
            if member.voice.mute != True:
                await member.edit(mute=True)

然而,公会并没有拉出正确的用户组,尽管验证了所有 ID 都是正确的,但 guild.members 无法正常工作。

任何关于如何使其正常工作的意见将不胜感激。

【问题讨论】:

【参考方案1】:

自 10 月 7 日起,Discord 已更改其 API,要求机器人声明 gateway intents。确保您的 discord.py 至少更新到 1.5 版并启用成员意图:

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.members = True 

bot = commands.Bot(command_prefix='!', intents=intents)

【讨论】:

以上是关于让 VoiceChannel.members 和 Guild.members 返回完整列表的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤让输入框 只输入字母和数字

android 如何让UI顶部和底部固定

怎样让XP系统记住上次打开窗口的大小和位置?

如何让DIV水平和垂直居中

如何让DIV里面的DIV水平垂直居中

WIN2003如何让IIS支持ASP 和ASP.NET