質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1603閲覧

DIscordのチーム分けボット

PJwnOI

総合スコア39

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/06/10 13:40

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

該当箇所を下記のようにするとどうでしょう。

python

1user_ID = [member.id for member in message.author.voice.channel.members]

投稿2020/06/10 14:21

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PJwnOI

2020/06/10 15:52

そのようにして解決することができました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問