VoiceChannel.members在discord.py中返回一个空列表

时间:2020-10-20 16:17:34

标签: python discord discord.py

我想创建一个discord机器人,该机器人将在语音通道中获取用户列表,并将其分为两个随机小组。该频道的信息已成功下载,当我测试某些值(例如频道ID,名称或类型)时,它们已成功返回。频道名称是正确的,id是正确的,类型是语音,但是出于某种原因,试图获取成员列表总是返回一个空数组。

import random
from dotenv import load_dotenv
from discord.ext import commands
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = commands.Bot(command_prefix="!")


@client.command()
async def teams(ctx):
    if ctx.author == client.user:
        return
    if ctx.author.voice and ctx.author.voice.channel:
        channel = ctx.author.voice.channel
    else:
        await ctx.send("You are not connected to a voice channel")
        return
    print(channel.members)
    member_names = []
    for x in channel.members:
        member_names.append(x.name)
    msg = ""
    used = []
    team_size = (len(member_names) + len(member_names % 2))/2
    while not len(used) == team_size:
        a = random.randint(0, len(member_names)-1)
        if a not in used:
            msg += str(member_names[a]) + "\n"
            used.append(a)
    await ctx.send(msg)
client.run(TOKEN)

我的discord.py版本是1.5.1,而python版本是3.8

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。正如 Nurqm 所说,缺少一个意图。

使用 Intent voice_states,机器人将能够看到语音状态的变化。这可能比 discord.Intents().all() 更干净。

我会添加它作为对 Nurqm 答案的评论,但我没有任何声誉;)

答案 1 :(得分:0)

在新版本的discord.py(即1.5.1)中,有一个有关Intents的更新。也许这就是为什么您无法获得成员。您需要定义它:

import random
from dotenv import load_dotenv
from discord.ext import commands
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
intents = discord.Intents().all()
client = commands.Bot(command_prefix="!", intents=intents)