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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

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

Q&A

解決済

1回答

915閲覧

discordBOTでチャンネルを判別するプログラムを複数作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Discord

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Python

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

1グッド

1クリップ

投稿2020/03/30 08:05

現在、discordのBOTを作成しています。
「ああああ」と送信すると「ああああああ」と返ってきて、指定しているチャンネル以外に「ああああ」と送信しても無視するようになっています。
ですが、「ああああ」のチャンネルとは別のチャンネルを指定して、その別のチャンネルに「いいいい」と送信すると「いいいいいい」と返ってきて、その別のチャンネル以外に「いいいい」と送信しても無視するようにしたいのですが、うまくいきません。

初心者で申し訳ありませんが、どこになにを入れればいいのか、どこをどのように変えればいいのかお願いします。

Python

1コードimport discord 2 3client = discord.Client() 4 5CHANNEL_ID1 = xxxxxxxxxxxxxxx 6CHANNEL_ID2 = xxxxxxxxxxxxxxx 7BOT_TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxx" 8 9@client.event 10async def on_ready():#ログイン時処理 11 print('discordログイン完了') 12 print('BOT名| {}'.format(client.user.name)) 13 print('ユーザーID| {}'.format(client.user.id)) 14 print('------') 15 16 17 18@client.event 19async def on_message(message): 20 if message.author.bot: # メッセージ送信者がBotだった場合は無視する 21 return 22 23 if message.channel.id != CHANNEL_ID1: # チャンネルが違う場合は無視する 24 return 25 26 if message.content == 'ああああ': #「XX」と発言したら 27 await message.channel.send('ああああああ')#「XX」が返る処理 28 29 30 31@client.event 32async def on_message(message): 33 if message.author.bot: # メッセージ送信者がBotだった場合は無視する 34 return 35 36 if message.channel.id != CHANNEL_ID2: # チャンネルが違う場合は無視する 37 return 38 39 if message.content == '!いいいい': #「xx」と発言したら 40 await message.channel.send('いいいいいい')#「XX」が返る処理 41 42 43#BOTのToken(とーくん) 44client.run('xxxxxxxxxxxxxxxxxxxxxxxxxxx') 45
Libe👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず初めに、

うまくいきません。

とありますが、具体的にどのようにうまくいかないのか(やりたいことは〇〇と◇◇だが、◇◇しかできない)を記載いただくほうがよろしいかと思います。
おそらくこの場合は、これまでのコードでは「ああああ」に反応していたのに、「いいいい」に関する追記を行った結果「ああああ」に反応しなくなってしまったということだと思いますが、今回の事例を単純に見れば「うまくいかない」パターンとして、

  • 「いいいい」について追加したのに、これまで通り「ああああ」にしか反応しない
  • コードを追加した結果、「ああああ」「いいいい」の両方に反応しなくなった

可能性も考えられます。症状は具体的に記載ください。


今回の場合、直接の原因はon_messageメソッドが2回定義されていることが原因になっています。Pythonは上から順にコードを実行しますので、同名の関数を2回定義した場合は一番下の定義だけが有効になります(それより上で定義されたものが上書きされてしまう)。
そのため、2か所に分散して書かれているon_messageの内容を一つにまとめる必要があります。例えば以下のようにしてはいかがでしょうか。

py

1@client.event 2async def on_message(message): 3 # 冒頭は共通の処理なので書き換えは不要 4 if message.author.bot: # メッセージ送信者がBotだった場合は無視する 5 return 6 7 if message.channel.id == CHANNEL_ID1: # チャンネルIDがID1に一致した場合の処理 8 if message.content == 'ああああ': #「XX」と発言したら 9 await message.channel.send('ああああああ')#「XX」が返る処理 10 11 if message.channel.id == CHANNEL_ID2: # チャンネルIDがID2に一致した場合の処理 12 if message.content == 'いいいい': #「xx」と発言したら 13 await message.channel.send('いいいいいい')#「XX」が返る処理 14 15

if message.content == '!いいいい': この部分は'いいいい'の誤記と思われましたので、上記コードでは修正しています。

投稿2020/03/30 08:36

suomo

総合スコア82

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

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

退会済みユーザー

退会済みユーザー

2020/03/30 08:42

記載の指摘ありがとうございます。 今後良く考えて伝わるよう記載できるようにがんばります。 また、誤記も申し訳ありません on_messageを一つにまとめたところ、無事解決しました。 本当にありがとうございました。
suomo

2020/03/30 08:51

もし厳しい表現として受け取られてしまったなら、私の力不足です。申し訳ないです。 回答する側は、実際にそのコードを動かすことができる環境に常にあるわけではありません。ですので、少しでもそうした情報が多いと、実際に実行した場合のイメージができて回答がしやすくなります(特に今回のように実行してもエラーが出るわけではない場合は、特に情報が多いとありがたいものです)。 こうした注意を払うことで、natuanago様にとっても迅速かつ的確な回答が得られ、問題解決にもつながりやすくなると存じます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問