簡體   English   中英

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

[英]VoiceChannel.members returns an empty list in discord.py

我想創建一個不和諧機器人,它將獲取語音頻道中的用戶列表並將其分成 2 個隨機團隊。 頻道的信息已成功下載,當我測試某些值(如頻道 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

我遇到了同樣的問題。 正如 Nurqm 所說,缺少一個意圖。

使用Intent voice_states ,機器人將能夠看到語音狀態的變化。 這可能比discord.Intents().all()更干凈。

我會補充說,作為對 Nurqm 回答的評論,但我沒有任何聲譽;)

在 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM