はじめに
※このシリーズは自分がものすごく暇なため記載していくQiitaです。
本記事は#00を読んだことを前提として進めますので
もし読んでない人は一度読んでから来てください
(わかる人はこのまま見てもらってもいいと思います)
使用環境 (特に気にしなくていいです)
エディター VisualStudio Code
ランタイム Python 3.12.4
今回の目標
メッセージを読み取ってこだまするBotを作る
#イメージ手順
Bot起動
↓
メッセージ受信
↓
内容取得
↓
メッセージ送信
手順1 Try
前回VisualStudio CodeとPythonを実行する環境を導入し、
DiscordBotのトークンを取得しました
ここからは簡単にコードの意味を説明しながら書いていきます
VisualStudioを開いて左上のタブ"ファイル"を押して"新しいファイル"をクリック
このような空白のファイルができればOKです
細かく説明しても多分分かりにくいのでコードに説明を含めようと思います
import discord #discord.pyを読み込む
token = "ここにdiscordで取得したトークンを入れる" #変数tokenに =" "の内容を入れる
intents = discord.Intents.all() #変数intentsに discord.Intents.all()をいれる
client = discord.Client(intents=intents) #変数client に discor((((省略))))
#通常なら
#この辺りに
#処理するコードを
#入れます
client.run(token) #botを実行するときのコード intentsをdiscord.Clientに入れたものにtokenを入れてrun(実行)
このコードはとりあえずdiscord botを起動するコードです
何かを処理するコードなどは入れておらず最小限での場合です
=>つまりれらのコードはどんなBotであっても必ず含める必要があるということです
そのうち慣れるので深く考えず"こういうものなんだなっ"と思っててください
実行してみましょう
このように表示されたら成功です!
Next Step!
手順2 メッセージを受信
discordのeventについて簡単に説明します
discord上で行われたアクション(メッセージ受信,メンバーの参加,その他すべて)を検知して、
それをスタートとしてプログラムを実行するためにeventというものが存在します
Scratchなどでいう"🚩が押されたとき"というやつです(知らなかったらスイマセン)
それの"メッセージが送信されたとき"がdiscord.pyにありますので
メッセージが送信されたときに表示するコードを書いてみます!
import discord #discord.pyを読み込む
token = "ここにdiscordで取得したトークンを入れる" #変数tokenに =" "の内容を入れる
intents = discord.Intents.all() #変数intentsに discord.Intents.all()をいれる
client = discord.Client(intents=intents) #変数client に discor((((省略))))
@client.event #Discordのイベント
async def on_message(message): #on_message(メッセージを受信したとき~)
print("メッセージを受信しました") #表示
client.run(token) #botを実行するときのコード intentsをdiscord.Clientに入れたものにtokenを入れてrun(実行)
手順3 メッセージを送信
受信したチャンネルに対してメッセージを送ってみましょう
メッセージを送信する際に必要なのはchannelというものが必要になります
このchannelはチャンネルidなどから取得することもできますが、
メッセージを受信した際は受信内容からchannelを取得できます
メッセージからchannelの取得
メッセージを受信したとき "message"というものが渡されます
この中には送信者の名前,id,場所,その他いろいろが含まれています
channelを取得するのは簡単で
message.channel
だけでOK
取得したメッセージで送信します
await message.channel.send("受信しました!")
このコードをprint()があった部分に上書きします
これで実行してみると
このようにー、、
普通に忘れていました
これはbot自身が送信したメッセージを受信して再度送信したということですね
これを防ぐにはこのようなコードでbotかどうかを判断しないといけません
@client.event #Discordのイベント
async def on_message(message): #on_message(メッセージを受信したとき~)
if message.author == client.user: # 送信者がbot自身かどうかを調べる
return # キャンセル
await message.channel.send("受信しました!")
手順4 受信したメッセージを取得して送信
先ほども言いましたがon_messageで渡される"message"には様々な情報が含まれています
messageからメッセージ内容を取得
"message.content"
だけでOK!
@client.event #Discordのイベント
async def on_message(message): #on_message(メッセージを受信したとき~)
if message.author == client.user: # 送信者がbot自身かどうかを調べる
return # キャンセル
print(message.content) #message.contentを表示
@client.event #Discordのイベント
async def on_message(message): #on_message(メッセージを受信したとき~)
if message.author == client.user: # 送信者がbot自身かどうかを調べる
return # キャンセル
await message.channel.send(message.content) # message.contentをmessage.channelに送信
まとめ
Discord botはいうほど難しくありません
すべて意味があったり、確実に入れないと聞けない決まった文があったり様々です!
今のところ同じ内容を返すこだまbotですが、どんどん面白くなっていくので
次を楽しみにしててください!(1日1記事頑張ってる最中です👍)
Developer Hub
プログラマー達があつまるコミュニティを作成中!
https://discord.gg/kp9rVqJsn9