【问题标题】:(discord.py) Getting a list of all of the members in a specific voice channel(discord.py) 获取特定语音频道中所有成员的列表
【发布时间】: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)

【问题讨论】:

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


    【解决方案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()
    

    【讨论】:

    【解决方案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) 中。

      【讨论】:

        猜你喜欢
        • 2021-07-21
        • 1970-01-01
        • 2020-12-21
        • 2021-01-07
        • 2021-10-04
        • 2021-06-06
        • 1970-01-01
        • 1970-01-01
        • 2021-04-24
        相关资源
        最近更新 更多