MENU

【discord.py bot 制作 】会話するBOT Part5 ~特定のチャンネルだけで返答するBOTを作ってみる~

この記事はdiscord.pyを使用したdiscordのbotの備忘録です。

実際に使用しているコードもサンプルコードとして掲載しています。

BOT作りの参考の一つになればいいなと思います。

目次

動機

全てのチャンネルにぼっとくんが返答すると実装するときに若干邪魔になりそうという意見から指定したチャンネルでののみ返答するように改良していきます。

\ 前回の記事 /

動作環境

windows11

discord.py Version: 2.1.0

python 3.10

Visual Studio Code

動作コードの例

import discord

intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

@client.event
async def on_message(message):
    if message.author.bot:
        return
    channel_ID = チャンネルIDを記入する
    if message.channel.id == channel_ID:
        if message.content == "こんにちは":
            await message.channel.send("こんにちは!")

@client.event
async def on_ready():
    print(f'{client.user} が起動しました。')
TOKEN = "botのTOKENを入力する"
client.run(TOKEN)

入力したチャンネルIIDを持つチャンネルのみで返答があれば成功です!

コードの解説

    channel_ID = チャンネルIDを記入する
    if message.channel.id == channel_ID:

上段で返答させたいチャンネルのIDを指定します。

下段でメッセージが送られてきたチャンネルが上段で指定したチャンネルであるかの判断を行い条件を満たす場合のみ動作を行います。

 

なお、チャンネルIDはdiscord画面でチャンネルを右クリック(下記)からコピーすることが可能です。表示されない場合はユーザー設定画面の詳細設定から、開発者モードをオンにしてから再度確認してみてください。

問題のあったコード

×チャンネルを2つ定義する

@client.event
async def on_message(message):
    channel_ID = チャンネルIDを記入する
    channel_ID = チャンネルIDを記入する
    if message.channel.id == channel_ID:
        if message.content == "こんにちは":
            await message.channel.send("こんにちは!")

→二つ目に設定したチャンネルでのみ反応する

IDを使用し2つのチャンネルで指定したい場合はチャンネル毎に条件を設定しよう!

補足

@client.event
async def on_message(message):
 channel_ID = チャンネルIDを記入する
 if message.channel.id == channel_ID:
  条件1
   動作1
  条件2
   動作2

一度指定した中に条件を設定すれば、チャンネルIDを複数回記入する必要はありません!

サンプルコード

#取得
import discord
import random

#定義
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

#-----------------------
#on_message(message)
#-----------------------
@client.event
async def on_message(message):
    if message.author.bot:
        return
    channel_ID = チャンネルIDを記入する #コピペを行う際はここを変更する
    if message.channel.id == channel_ID:
#返答 完全一致
        if message.content == "あ":
            await message.channel.send("正常に動いてるよ!")
#返答 部分一致
        if "おはよ" in message.content.lower():
            await message.channel.send("おはよう!")
        if "こんにち" in message.content.lower():
            await message.channel.send("こんにちは!")
        if "emoji_1" in message.content.lower():
            await message.channel.send("じゃあああん!!")
#選択式 
        if message.content == "おやすみ":
            oyasumi = ["おやすみなさい!","ゆっくり休んでね!","おやすみ!"]
            choice = random.choice(oyasumi)
            await message.channel.send(choice)
#条件選択式 
        word_list = ["できた" , "やった" ]
        for choice_word in word_list:
            if choice_word in message.content.lower():
                await message.channel.send("おめでとう!\nよくがんばったね!")

#基本動作 
@client.event
async def on_ready():
    print(f'3. 2. 1. ぽかん !!{client.user} が 起動 した !!')
TOKEN = "botのTOKENを入力する" #コピペを行う際はここを変更する
client.run(TOKEN)

今回は指定したチャンネルだけに反応をするためのコードでした。参考になれば幸いです。

自分もまだまだ発展途上ですのでぼっとくんと共に成長していければなと思います。

間違っているところや、より良いコード等ありましたら教えていただけると嬉しいです。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次