(discord.py)获取特定语音通道中所有成员的列表

时间:2018-04-29 06:33:42

标签: python python-3.x discord discord.py

所以我正在尝试使用python中的discord.py库为我的raiding discord编写一个raiding bot。这个脚本应该在语音通道中形成一个成员列表以进行突袭。出于某种原因,此脚本无法正常工作。每当打印出memid时,它只会打印一个空列表。

如果有人熟悉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)

5 个答案:

答案 0 :(得分:1)

你的问题没有太多可以继续下去。我相信您的问题是您提供给id的{​​{1}}不是语音频道的正确ID。这可能就是为什么你总是得到一个空列表的原因。

  

voice_members

     

此语音中当前的utils.get(...)列表   渠道。如果Members不是type,那么这总是空的   阵列

如果您不完全确定语音频道的实际ChannelType.voice,我建议您按名称和类型(id)进行搜索:

discord.ChannelType.voice

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

答案 2 :(得分:1)

我遇到了同样的问题。 voice_channel.members有时会返回空列表或不完整列表。

文档说:

voice_states 返回在此通道中具有语音状态的成员ID的映射。 注意:当成员高速缓存不可用时,此函数是低级别的,用于替换membershttps://discordpy.readthedocs.io/en/latest/api.html#voicechannel

我猜想members不能可靠地一致地返回准确的连接成员列表。

我用以下代码解决了这个问题:

member_ids = voice_channel.voice_states.keys()

答案 3 :(得分:1)

您需要启用“ SERVER MEMBERS INTENT: 如果您的漫游器跟踪服务器成员或下载整个成员列表,则可能需要服务器成员意图接收成员事件和成员列表。”。

答案 4 :(得分:0)

我知道频道ID,建议使用

voice_channel = client.get_channel(channel_id)

代替(documentation here)。如果您使用的是discord.py-rewrite,则还可以使用:

voice_client = ctx.guild.get_channel(channel_id)

如果您要查找的频道在上下文公会(documentation here)中。