(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 加入语音频道并在成员加入频道时播放音频文件

如何在频道列表中指定语音频道的位置?不和谐.py

获取一个类别Channel的权限并设置为语音通道discord.py

检查语音频道中的人是不是打开了视频(discord.py)[关闭]

检查用户是不是在语音频道 discord.py

如何使用 discord.py 机器人断开人们与语音频道的连接?