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

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

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

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

Python

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

Q&A

1回答

3310閲覧

DiscordのBot作成(Python):1人目の入室者だったらという条件文について

tedbaker

総合スコア6

Discord

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

Python

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

0グッド

0クリップ

投稿2020/01/30 13:44

前提・実現したいこと

DiscordのボットをPythonで作成し始めました。
【特定のチャンネルに入室した際、入室者が1人目だった場合にテキストチャットへ通知を出す】というボットを考えているのですが、1人目だったらという条件の部分で躓いています。
ご教示いただけると幸甚に存じます。

該当のソースコード

Python

1@client.event 2async def on_voice_state_update(member, before, after): 3 if member.guild.id == サーバーID and (before.channel != after.channel): 4 alert_channel = client.get_channel(通知したいチャンネルID) 5 voice_channel = client.get_channel(対象のボイスチャンネル) 6 channel_members = voice_channel.voice_members 7 channel_numbers = len(channel_members) 8 if after.channel is voice_channel and channel_numbers == 1: 9 msg = f'{member.name} さんが {after.channel.name} に入室しました!' 10 await alert_channel.send(msg + channel_members) 11 12client.run(token)

エラーコード

##[error]Process completed with exit code 1.

試したこと

channel_members = voice_channel.voice_members channel_numbers = len(channel_members)

を削除し、それに続く条件分を
if after.channel is voice_channel:
にすると無事に動いたので、一人目だったらという部分にエラーがあるのでは、と考えています。

補足情報(FW/ツールのバージョンなど)

discord.py[voice]>=1.2.5
python-3.7.5

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

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

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

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

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

guest

回答1

0

初心者の意見ですが、こんな感じでどうでしょう?

Python

1async def on_voice_state_update(member,before,after): 2 #したいこと 3 #特定のチャンネルに入室した際、入室者が一人目だった場合にテキストチャンネルへの通知を出す 4 5#テキストチャンネルのidが入った変数(仮):text_channel_id 6#入室を検知したいボイスチャンネルのidが入った変数(仮):voice_channel_id 7 if before.channel == after.channel:#同じチャンネル内での変化(マイクミュートなど)の場合 8 pass#無視 9 else:#それ以外の場合 10 if after.channel == client.get_channel(voice_channel_id):#新しく接続したチャンネルがこのチャンネルの場合 11 if len(after.channel.members) == 1:#入室者が一人目の場合 12 message_send_channel = client.get_channel(text_channel_id)#メッセージを送信するテキストチャンネルの情報を取得 13 send_message_content = "```" + member.display_name + "が接続しました。```"#ログのようなものを出す時は```で囲むのがオススメ 14 await message_send_channel.send(send_message_content)#チャンネルにメッセージを送信 15 else:#新しく接続したチャンネルが別のチャンネルの場合 16 pass#無視

動作確認等はしてません。(._.)

投稿2020/02/07 01:44

編集2020/02/07 01:49
Super--Beginner

総合スコア44

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

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

alfa.crasher_

2020/06/08 10:30

多分それであっていると思います 質問者は見てるのかな?多分ベストアンサーかと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問