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

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

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

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Python

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

Q&A

解決済

2回答

4027閲覧

Discordで特定のチャンネルのみに送信する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Discord

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Python

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

0グッド

1クリップ

投稿2020/03/30 04:02

編集2020/03/30 05:28

イメージ説明
↑のように、DiscordのBOTをPythonで作成しており、「!bot」と送信したら、特定のチャンネルで「!bot」と送信された場合でのみ、特定のチャンネルでメッセージがBOTから送信されるプログラムをつくっているのですが、うまくできません。

参考文章

教えて下さい。

Python

1ソースコード import discord 2 3client = discord.Client() 4 5@client.event 6async def on_ready():#ログイン時処理 7 print('discordログイン完了') 8 print('BOT名|'+client.user.name) 9 print('ユーザーID|'+ client.user.id) 10 print('------') 11 12 13 14@client.event 15async def on_message(message): 16 if message.author.bot: # メッセージ送信者がBotだった場合は無視する 17 return 18 CHANNEL_ID = "xxxxxxxxxxxxxxxxxxx" 19 channel = client.get_channel(CHANNEL_ID) 20 if message.content == '!bot':#「XX」と発言したら 21 await message.channel.send('```BOT discordバージョン起動中です。```')#「XX」が返る処理 22 23 24#BOTのToken(とーくん) 25client.run('xxxxxxxxxxxxxxxxxxxxxxxxxxxxx') 26

Python

1"問題"タブに表示されるエラー(?)→Unused variable 'channel'pylint(unused-variable)

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

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

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

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

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

teamikl

2020/03/30 05:56

先程とエラーの内容が変わってませんか? 最初 unexpected indent だったのが unused variable になってます。 インデントの問題は解消されたとみていいのでしょうか? pylintはコードのスタイル等をチェックしてくれるツールで、 未使用も変数があったところで、プログラムの実行には影響はありません。 一方で、インデントのスタイルはPythonでは、 関数やif文のブロックを表すのでとても重要な情報だったりします。
退会済みユーザー

退会済みユーザー

2020/03/30 06:07 編集

(編集済み)
退会済みユーザー

退会済みユーザー

2020/03/30 06:06

依頼ありがとうございます。 回答していただいたとおりmessage.channel.send( ...からchannel.send( ...を試したした以外なにも触っておりません。 ですが、discordに「!bot」と送信しても何も返ってきません。 初心者で申し訳ありませんがご指導ご鞭撻の程よろしくおねがいします
teamikl

2020/03/30 06:14

TypeError はまた別の問題ですね。 0 + "文字" がエラーとなるので、可能性あるとしたらユーザIDの所 client.user.id -> str(client.user.id) と文字列に変換してから + で連結します。 もしくは、 print('ユーザーID|', client.user.id) print("ユーザ名|{user:}\nユーザID|{id:}".format(**client.user))
guest

回答2

0

上の情報から読み取れるのは2点

  • unexpected indent (<unknown>, line 18) は、該当行付近のインデントに不備がある事を指しています。

但し、ソースコードが画像なので正確なことはわかりませんが、
タブとスペースが混在していないか辺りを要確認。
エラーメッセージで検索すると、インデント関連のエラーでよくある事例いくつか出ると思います。

より詳細な情報が必要な場合は、
エラーコードは正確に、ソースコードはテキストとして(Markdownで整形して)張り付けてください。

  • チャンネルへの送信部分

見た感じおかしそうな部分は、

diff

1- message.channel.send( ... 2+ channel.send( ...

追記: on_message()の中での返信なら、ここは問題なさそうです。

この辺りはバージョンによって違うことも有るし、discordモジュールも複数あるので、
参考にしたソースコードの情報(書籍、サイト等)等も合わせて記載した方が正確な回答を得られやすくなります。


追記2

特定のチャンネルへということなので、
チャンネルの判別は if message.channel.id == CHANNEL_ID: となるのかな。
動作確認済。CHANNEL_ID は実際のIDを数値で入れます。(''で囲まない)

投稿2020/03/30 05:18

編集2020/03/30 06:51
teamikl

総合スコア8664

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

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

退会済みユーザー

退会済みユーザー

2020/03/30 06:33

if channel == message.channel:の入れ方はこのような感じなのでしょうかね..... 本当に申し訳ないです @client.event async def on_message(message): if message.author.bot: # メッセージ送信者がBotだった場合は無視する return CHANNEL_ID = "nnnnnnnnnnnnnnnnnnnnnnnnnn" channel = client.get_channel(CHANNEL_ID) if channel == message.channel: if message.channel == '!bot':#「XX」と発言したら await message.channel('```BOT discordバージョン起動中です。```')#「XX」が返る処理
teamikl

2020/03/30 06:51

動作確認出来ました。コード載せる為別の回答としてポストします
guest

0

ベストアンサー

動作確認済みです。discordサーバ側のボットの設定は済んでいるものとします。
CLIENT_ID, BOT_TOKEN は実際の値に変更してください。

コードの修正点は2か所

  • TypeError の修正
  • チャンネルの判別方法

python

1import discord 2 3CHANNEL_ID = 1234567890 # <- 実際のチャンネルのIDを「数値」で記載します 4BOT_TOKEN = "XXXXXXXXXX" # <- こちらは「文字列」(クォートで囲む) 5 6 7@client.event 8async def on_ready():#ログイン時処理 9 print('discordログイン完了') 10 print('BOT名| {}'.format(client.user.name)) 11 print('ユーザーID| {}'.format(client.user.id)) 12 print('------') 13 14 15@client.event 16async def on_message(message): 17 if message.author.bot: # メッセージ送信者がBotだった場合は無視する 18 return 19 20 if message.channel.id != CHANNEL_ID: # チャンネルが違う場合は無視する 21 return 22 23 if message.content == '!bot':#「XX」と発言したら 24 await message.channel.send('```BOT discordバージョン起動中です。```')#「XX」が返る処理 25 26if __name__ == "__main__": 27 client = discord.Client() 28 client.run(BOT_TOKEN)

投稿2020/03/30 06:59

編集2020/03/30 07:04
teamikl

総合スコア8664

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

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

退会済みユーザー

退会済みユーザー

2020/03/30 07:09

すべて修正をし、起動してみました。 本当にチャンネル判別ができていて、初心者からしたら感動です???? 本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問