[英]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.