我想创建一个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
答案 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)