(discord.py) 获取特定语音频道中所有成员的列表
Posted
技术标签:
【中文标题】(discord.py) 获取特定语音频道中所有成员的列表【英文标题】:(discord.py) Getting a list of all of the members in a specific voice channel 【发布时间】:2018-10-09 13:46:58 【问题描述】:所以我正在尝试使用 python 中的 discord.py 库为我的突袭不和谐编写一个突袭机器人。该脚本应该在语音频道中形成一个成员列表以进行袭击。由于某种原因,此脚本无法正常工作。每当打印 memids 时,它只会打印一个空列表。
如果有人熟悉 discord.py 并且可以告诉我为什么这不起作用,请这样做。这真的让我很困扰,我已经尽我所能来解决它。
#find raiding
voice_channel = discord.utils.get(ctx.message.server.channels, id = '440014722587426816')
#finds the members
members = voice_channel.voice_members
memids = []
for member in members:
memids.append(member.id)
print(memids)
【问题讨论】:
【参考方案1】:如果您知道频道的 ID,您可以这样做。为我工作:D
channel = client.get_channel(1234567890) #gets the channel you want to get the list from
members = channel.members #finds members connected to the channel
memids = [] #(list)
for member in members:
memids.append(member.id)
print(memids) #print info
【讨论】:
抱歉,我应该在哪里尝试此代码?我在@client.event \n async def on_ready() 中编写了它。但不会在语音频道中显示任何人 我很确定它应该在on_ready()
下工作,但如果你把它放在on_ready()
下,用户必须在启动机器人之前进入语音通道。你可以把它做成一个循环,把它转换成命令,或者使用另一个事件引用来适应你的代码。
真正迟到的评论,但如果其他人看不到任何用户,这可能是由于您的Discord app 和代码中禁用了 intents 造成的。在这种情况下,如果我没记错的话,您必须启用 members intent。【参考方案2】:
我遇到了同样的问题。 voice_channel.members
有时会返回空列表或不完整列表。
文档说:
voice_states
返回此频道中具有语音状态的成员 ID 的映射。 注意:当成员缓存不可用时,此函数有意替换members
的低级别。 https://discordpy.readthedocs.io/en/latest/api.html#voicechannel
我猜想members
无法始终如一地返回准确的关联成员列表。
我用下面的代码解决了这个问题:
member_ids = voice_channel.voice_states.keys()
【讨论】:
Intents 现在在 Discord API 中实现,因此如果您有时看不到成员,则必须注意这一点。来源:discordpy.readthedocs.io/en/latest/whats_new.html#v1-5-0【参考方案3】:您的问题没有什么好说的。我相信您的问题是您提供给utils.get(...)
的id
不是语音频道的正确ID。这可能就是为什么您总是得到一个空列表的原因。
voice_members
当前在此语音中的
Members
列表 渠道。如果type
不是ChannelType.voice
那么这总是一个空 数组。
如果您不确定语音频道的实际id
,建议您按名称和类型搜索(discord.ChannelType.voice
):
voice_channel = discord.utils.get(ctx.message.server.channels, name="channelname", type=discord.ChannelType.voice)
【讨论】:
我会尝试以这种方式搜索频道并回复您。这很奇怪,因为我在上面发布的代码运行了几次命令,但过了一会儿就坏了,从那以后就不能正常工作了。如果您认为有帮助,我可以使用其余代码编辑原始帖子。【参考方案4】:您需要启用“服务器成员意图: 如果您的机器人跟踪服务器成员或下载整个成员列表,您可能需要服务器成员意图接收成员事件和成员列表。”在机器人选项卡的不和谐开发者页面上。
【讨论】:
【参考方案5】:你知道频道ID,我建议使用
voice_channel = client.get_channel(channel_id)
改为 (documentation here)。如果你使用discord.py-rewrite,你也可以使用:
voice_client = ctx.guild.get_channel(channel_id)
如果您要查找的频道在上下文公会 (documentation here) 中。
【讨论】:
以上是关于(discord.py) 获取特定语音频道中所有成员的列表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Discord.py Cogs 使 Discord Bot 加入语音频道并在成员加入频道时播放音频文件
获取一个类别Channel的权限并设置为语音通道discord.py