获取 VoiceChannel.members 和 Guild.members 到 return 完整列表的问题
Issues with getting VoiceChannel.members and Guild.members to return a full list
每当我尝试使用 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 也 无法正常工作。
任何有关如何使其正常工作的意见将不胜感激。
截至 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 时,它都不会给我适用成员的完整列表。我在这样的文本命令中从上下文中获取 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 也 无法正常工作。
任何有关如何使其正常工作的意见将不胜感激。
截至 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)