ボイスチャンネルにいるメンバーを取得する方法について色々とたらい回しにされたので参考までに書いておきます。
vch = client.get_channel(チャンネルid)
としているとき
vch.voice_states.keys()
でメンバーの一覧を取得できます。
もちろん、
for member in vch.voice_states.keys():
とすることで、メンバー各々に対しての処理を行えます。
作成したdiscordbotから抜粋です。
例
vch = client.get_channel(vid)
memlist = []
if vch is not None:
if len(vch.voice_states.keys()) == 0:
return
for member in vch.voice_states.keys():
memlist.append(member)
ram = random.randrange(len(memlist))
user = await client.fetch_user(int(memlist[ram]))
if user.bot:
await channel.send('夜が明けました。昨晩の犠牲者は、いませんでした')
else:
person = '<@!'+str(memlist[ram])+'>'
await channel.send(f'本日処刑される人は{person}さんになりました。{person}さんは幽霊となって、以後は発言をせずにゲームを傍観してください.')
ここでは取得したユーザーがbotかどうかを判定しています。
MusicBotなどがボイスチャンネルにいる場合があるからです。
user = await client.fetch_user(int(memlist[ram]))
if user.bot:
誰かの何かのお役に立てれば...