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

时间:2020-10-09 20:02:10

标签: python discord discord.py discord.py-rewrite

每次尝试使用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正确,公会的成员 也无法正常工作。

任何有关如何使其正常工作的信息,将不胜感激。

1 个答案:

答案 0 :(得分: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)