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

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

ただいまの
回答率

87.60%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,530
退会済みユーザー

退会済みユーザー

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

参考文章

教えて下さい。

ソースコード import discord

client = discord.Client()

@client.event
async def on_ready():#ログイン時処理
    print('discordログイン完了')
    print('BOT名|'+client.user.name)
    print('ユーザーID|'+ client.user.id)
    print('------')



@client.event
async def on_message(message):
    if message.author.bot: # メッセージ送信者がBotだった場合は無視する
        return
    CHANNEL_ID = "xxxxxxxxxxxxxxxxxxx"
    channel = client.get_channel(CHANNEL_ID)
    if message.content == '!bot':#「XX」と発言したら
        await message.channel.send('```BOT discordバージョン起動中です。```')#「XX」が返る処理


#BOTのToken(とーくん)
client.run('xxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
"問題"タブに表示されるエラー(?)→Unused variable 'channel'pylint(unused-variable)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • teamikl

    2020/03/30 14:56

    先程とエラーの内容が変わってませんか?
    最初 unexpected indent だったのが unused variable になってます。
    インデントの問題は解消されたとみていいのでしょうか?

    pylintはコードのスタイル等をチェックしてくれるツールで、
    未使用も変数があったところで、プログラムの実行には影響はありません。
    一方で、インデントのスタイルはPythonでは、
    関数やif文のブロックを表すのでとても重要な情報だったりします。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2020/03/30 15:03 編集

    (編集済み)

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2020/03/30 15:06

    依頼ありがとうございます。
    回答していただいたとおりmessage.channel.send( ...からchannel.send( ...を試したした以外なにも触っておりません。
    ですが、discordに「!bot」と送信しても何も返ってきません。

    初心者で申し訳ありませんがご指導ご鞭撻の程よろしくおねがいします

    キャンセル

  • teamikl

    2020/03/30 15:14

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

    キャンセル

回答 2

+1

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

  • unexpected indent (<unknown>, line 18) は、該当行付近のインデントに不備がある事を指しています。
    但し、ソースコードが画像なので正確なことはわかりませんが、
    タブとスペースが混在していないか辺りを要確認。
    エラーメッセージで検索すると、インデント関連のエラーでよくある事例いくつか出ると思います。

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

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

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

- message.channel.send( ...
+ channel.send( ...

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

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


追記2

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/30 15: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」が返る処理

    キャンセル

  • 2020/03/30 15:51

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

    キャンセル

checkベストアンサー

0

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

コードの修正点は2か所

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

CHANNEL_ID = 1234567890  # <- 実際のチャンネルのIDを「数値」で記載します
BOT_TOKEN = "XXXXXXXXXX" # <- こちらは「文字列」(クォートで囲む)


@client.event
async def on_ready():#ログイン時処理
    print('discordログイン完了')
    print('BOT名| {}'.format(client.user.name))
    print('ユーザーID| {}'.format(client.user.id))
    print('------')


@client.event
async def on_message(message):
    if message.author.bot: # メッセージ送信者がBotだった場合は無視する
        return

    if message.channel.id != CHANNEL_ID: # チャンネルが違う場合は無視する
        return

    if message.content == '!bot':#「XX」と発言したら
        await message.channel.send('```BOT discordバージョン起動中です。```')#「XX」が返る処理

if __name__ == "__main__":
    client = discord.Client()
    client.run(BOT_TOKEN)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/30 16:09

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

    キャンセル

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

  • ただいまの回答率 87.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る