0
4

Discord Botの作り方 超初心者向け #01

Last updated at Posted at 2024-06-27

はじめに

※このシリーズは自分がものすごく暇なため記載していくQiitaです。
本記事は#00を読んだことを前提として進めますので
もし読んでない人は一度読んでから来てください
(わかる人はこのまま見てもらってもいいと思います)

使用環境 (特に気にしなくていいです)

エディター VisualStudio Code
ランタイム Python 3.12.4

今回の目標

メッセージを読み取ってこだまするBotを作る

#イメージ手順
Bot起動

メッセージ受信

内容取得

メッセージ送信

手順1 Try

前回VisualStudio CodeとPythonを実行する環境を導入し、
DiscordBotのトークンを取得しました
ここからは簡単にコードの意味を説明しながら書いていきます

VisualStudioを開いて左上のタブ"ファイル"を押して"新しいファイル"をクリック
image.png
このような空白のファイルができれば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であっても必ず含める必要があるということです

そのうち慣れるので深く考えず"こういうものなんだなっ"と思っててください

実行してみましょう
image.png
このように表示されたら成功です!
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(実行)

image.png
メッセージを送信するとこのようになります!

手順3 メッセージを送信

受信したチャンネルに対してメッセージを送ってみましょう

メッセージを送信する際に必要なのはchannelというものが必要になります
このchannelはチャンネルidなどから取得することもできますが、
メッセージを受信した際は受信内容からchannelを取得できます

メッセージからchannelの取得
メッセージを受信したとき "message"というものが渡されます
この中には送信者の名前,id,場所,その他いろいろが含まれています
channelを取得するのは簡単で
message.channel
だけでOK

取得したメッセージで送信します

await message.channel.send("受信しました!")

このコードをprint()があった部分に上書きします
これで実行してみると
image.png
このようにー、、

普通に忘れていました
これはbot自身が送信したメッセージを受信して再度送信したということですね

これを防ぐにはこのようなコードでbotかどうかを判断しないといけません

@client.event #Discordのイベント
async def on_message(message): #on_message(メッセージを受信したとき~)
    if message.author == client.user: # 送信者がbot自身かどうかを調べる
        return # キャンセル
    await message.channel.send("受信しました!")

image.png
完璧です!

手順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を表示

image.png
これを先ほど説明した送信するコードに入れてみましょう

@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に送信

image.png

まとめ

Discord botはいうほど難しくありません
すべて意味があったり、確実に入れないと聞けない決まった文があったり様々です!

今のところ同じ内容を返すこだまbotですが、どんどん面白くなっていくので
次を楽しみにしててください!(1日1記事頑張ってる最中です👍)

Developer Hub
プログラマー達があつまるコミュニティを作成中!
https://discord.gg/kp9rVqJsn9

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4