MENU

【discord.py bot 制作 】会話するBOT Part4 ~同じ返答をするBOTを作ってみる~

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

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

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

ただいま修正中です。

目次

動機

個人製作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
    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'{client.user} が起動しました。')
TOKEN = "botのTOKENを入力する"
client.run(TOKEN)

実際に動かしてみると下記のように。

コードが簡潔でとってもよきですね!

コードの解説

    word_list = ["できた" , "やった" ]
    for choice_word in word_list:
        if choice_word in message.content.lower():
            await message.channel.send("おめでとう!\nよくがんばったね!")

1段目のWord_listの中に反応させたい言葉を投入します。

2段目でリストの中から文字を取り出し、3段目でメッセージに入っているかどうか確認します。この動作はリストに入っている言葉の分だけ行われます。

リストの中の文字が見つかった場合、4段目に進み、メッセージを送信します。

問題のあったコード

×返答させたい言葉ををorでつなげてみる

    if message.content == "できた" or "やった":
        await message.channel.send("おめでとう!\nよくがんばったね!")

→後ろの”やった”に対して反応しない

補足

    if message.content == "できた" or message.content == "やった":
        await message.channel.send("おめでとう!\nよくがんばったね!")

or でつなげることでも条件を増やすことが可能です!

サンプルコード

#取得
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
#返答 完全一致
    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)

今回は複数のWordに対して同じ反応をするためのコードでした。参考になれば幸いです。

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

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

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

コメント

コメントする

目次