前提・実現したいこと
Discordでチーム分けボットを作成しています。
問題の発生源として、ユーザーIDを取得する時にエラーが出ていて、ボット作成がすすみません。
ボイスチャットに参加している複数人のユーザーIDをリストで受け取りたいです。
発生している問題・エラーメッセージ
Ignoring exception in on_message Traceback (most recent call last): File "/Users/user/Library/Python/3.7/lib/python/site-packages/discord/client.py", line 312, in _run_event await coro(*args, **kwargs) File "teambot.py", line 33, in on_message user_ID = [member.name for member in message.author.voice.channel.members.id] #ボイスチャットに接続中のメンバーのIDを得る AttributeError: 'list' object has no attribute 'id'
該当のソースコード
Python
1import discord 2import random 3import asyncio 4 5client = discord.Client() 6 7TEXT_CHANNEL_ID = ID 8 9TEAM_1_VOICE_CHANNEL_ID = ID1 10TEAM_2_VOICE_CHANNEL_ID = ID2 11 12MY_ID = ID 13TEST_CHANNEL_ID = ID 14 15token = "token" 16 17@client.event 18async def on_ready(): 19 print('-----Logged in as------') 20 print(client.user.name) 21 print(client.user.id) 22 print('-----------------------') 23 24@client.event 25async def on_message(message): 26 27 team_cahnnel_text = client.get_channel(TEXT_CHANNEL_ID) 28 29 if message.content == '!team': 30 31 user_name = [member.name for member in message.author.voice.channel.members] #ボイスチャットに接続中のメンバーネームを得る 32 33#####問題発生箇所 34 user_ID = [member.name for member in message.author.voice.channel.members.id] #ボイスチャットに接続中のメンバーのIDを得る 35######問題発生箇所 36 37 38 index = [0] * len(user_name) 39 tmp_n = [""] * len(user_name) 40 tmp_i = [0] * len(user_name) 41 42 for i in range(len(user_name)): 43 index[i] = i 44 45 random.shuffle(index) #メンバーの配列をシャッフル 46 47 for i in range(len(index)): 48 tmp_n[i] = user_name[index[i]] 49 tmp_i[i] = user_ID[index[i]] 50 51 for i in range(len(index)): 52 user_name[i] = tmp_n[i] 53 user_ID = tmp_i[i] 54 55 i = 0 56 t1 = "" 57 t2 = "" 58 59 for name in user_name: 60 if i % 2 == 0: 61 t1 += name + "\n" 62 else: 63 t2 += name + "\n" 64 i+=1 65 66 team = "====team1====\n" 67 team += t1 68 team += "====team2====\n" 69 team += t2 70 71 72 73 rnd = random.randint(0,1) 74 75 team += "=============\n" 76 if rnd == 0: 77 team += "A:team1\nT:team2" 78 else: 79 team += "B:team1\nCT:team2" 80 81 await team_cahnnel_text.send(team) 82 83 move_member = discord.Guild.get_member(message.guild,MY_ID) 84 move_voice = client.get_channel(TEST_CHANNEL_ID) 85 await move_member.move_to(move_voice) 86 87 if message.content == '!delete': 88 await message.channel.purge() 89 90client.run(token)
試したこと
問題の箇所をコメントアウトさせ、移動させるところに自分のIDを直に貼ると実行できたので、問題のある場所はユーザーIDをリストで受け取る部分であると考えています。
補足情報(FW/ツールのバージョンなど)
MacOS Catalina ver 10.15.4
Python 3.7.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/10 15:52