MENU

【discord.py bot 制作 】会話するBOT Part1 ~特定の文章に反応するBOTを作ってみる~

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

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

作り方はいたってシンプルでコピペでも動かせるようにしてあります。

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
    if message.content == "こんにちは":
        await message.channel.send("こんにちは!")

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

TERMINALに開発ぼっとくん♡#0000が起動しました。と表示されれば成功!

discordの画面では下記のように。

コード解説

import discord

プログラムの一番初めにライブラリを追加していきます。Discord.pyを使うよって教えてあげましょう。

discordの文字が緑色にならない場合はPCにdiscord.pyがインストールされているか確認してみてください。

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

discordを動かす上で必要なオブジェクトを定義していきます。

上から基本的なintentsオブジェクトを生成します。

真ん中でintentsにメッセージ情報が含まれることを教えます。ふわふわしてたintentsオブジェクトに役割を与えてあげましょう。

下段のclientでdiscordに接続。discordの動きを察知できるようになります。

@client.event
async def on_message(message):

discord上でのどういった動きを察知するか教えてあげましょう。

on_messageなのでメッセージを受信したときに動きを察知し処理を行うことが可能になります。

    if message.author.bot:
        return

メッセージの送信者がbotであるか否かの判断させましょう。

メッセージの送信者がbotであった場合はifの中にある下段の処理を行います。bot同士で会話されると微妙な気持ちになるので今回はreturnを使い、処理を終了です。

メッセージの送信者がbotでない場合には中に入らず次の条件に進んでくれます。ぼっとくんは優秀な子です。

    if message.content == "こんにちは":
        await message.channel.send("こんにちは!")

ここで“こんにちは”というメッセージが送られてきているか判断します。

こんにちはという言葉を検知した場合botはメッセージが送られてきたチャンネルに“こんにちは!”と返答してくれます。

@client.event
async def on_ready():
    print(f'{client.user} が起動しました。')

discord上での動きを察知、再び。

on_readyはbotがdiscordにログインしたときに動きを察知し処理を行います。

printを使うことでTERMINALにbotが起動したことを伝えてくれるようになります。

TOKEN = "botのTOKENを入力する"
client.run(TOKEN)

TOKENを入力し、どのbotを動かすか設定してあげましょう。

client.runでbotを稼働させます。

動作に問題のあったコード

× 同じイベントを2つ定義した場合

@client.event
async def on_message(message):
    if message.content == "おはよう":
        await message.channel.send("おはよう!")
@client.event
async def on_message(message):
    if message.content == "こんにちは":
        await message.channel.send("こんにちは!")

→ ”こんにちは”は反応があるが、”おはよう”に反応が返ってこない

@client.event
async def on_message(message):
 処理1
@client.event
async def on_message(message):
 処理2

@client.event
async def on_message(message):
 処理1
 処理2

同じイベントを2つ定義すると後に定義された処理2しか行われなくなるため1つにまとめよう!

 

× client.run(TOKEN)の後ろに文字がある

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

client.run(TOKEN)より後ろは処理が行われず、errorの原因にもなるためため何も書かないようにしよう!

 

× BOTも反応できるようにしてみる

@client.event
async def on_message(message):
    # if message.author.bot:
    #     return
    if message.content == "こんにちは":
        await message.channel.send("こんにちは!")

bot自身の発言に反応してしまい停止させるまで永遠と反応が続くことになるので注意しましょう!

 

× その他問題

ファイルの名前をdiscord.pyにすると拡張機能と同一の名前となり、ERRORとなるため注意しましょう!

補足

if 条件1

 動作1

if 条件1

 動作2

if 条件1

 動作1

 動作2

上記2つのコードは同じ動きをします。条件が一緒の場合はコードをまとめるとすっきりします。

サンプルコード

#取得
import discord

#定義
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 message.content == "こんにちは":
        await message.channel.send("こんにちは!")
    if message.content == "おやすみ":
        await message.channel.send("おやすみなさい!")
    if message.content == "あ":
        await message.channel.send("正常に動いてるよ!")

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

BOTを動かすにあたり必要最低限のコードをです。参考になれば幸いです。

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

ご意見やアドバイス等ありましたらコメントお待ちしております。

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

コメント

コメントする

目次