前書き
Discord Botコトハジメ。趣味記事です。
メンションするとあらかじめ設定された数パターンの中からランダムに返信を返すDiscord Botを実装します。
下準備
Python実行環境の構築
Discord側の準備
Botアカウントの作成
DEVELOPER PORTALにアクセス、ログインします。
モーダルウィンドウが開くのでbot名を入力し、[Create]ボタンをクリックします。
[Bot]タブを開き、[Add Bot]をクリック。その後、[Yes, do it!]をクリックして続行します。
今回は個人用のデモBotのため、[PUBLIC BOT]はオフに設定します。
Privileged Gateway Intentsにもチェックを入れておきます。
tokenの取得
[Copy]ボタンをクリックするとクリップボードにtokenがコピーされます。tokenはこの画面から何度でもリセット可能です。
Discordサーバへの招待
この時点ではbotはどのサーバにも参加していない状態です。自分が管理権限を持っているサーバへの招待を行います。
[OAuth2]タブの[URLGenerator]に移動し、[SCOPES]の[bot]にチェックを入れます。
[BOT PERMISSIONS]が表示されるので、必要な権限にチェックを入れます。
設定した権限に対応した招待用URLが生成されるので、URLをコピーして別タブで開き、任意のサーバに招待します。
実装
環境変数の設定
python-dotenvを使います。
解説・導入方法は↓
DISCORD_TOKEN=コピーしたtoken
from dotenv import load_dotenv
load_dotenv()
import os
DISCORD_TOKEN = os.getenv('DISCORD_TOKEN')
discord.pyパッケージをインストール
$ pip install discord.py
実装
import discord
import config
import random
intents = discord.Intents.all()
client = discord.Client(intents=intents)
# Bot起動時に呼び出される関数
@client.event
async def on_ready():
print("Ready!")
# メッセージの検知
@client.event
async def on_message(message):
# 自身が送信したメッセージには反応しない
if message.author == client.user:
return
# ユーザーからのメンションを受け取った場合、あらかじめ用意された配列からランダムに返信を返す
if client.user in message.mentions:
ansewr_list = ["さすがですね!","知らなかったです!","すごいですね!","センスが違いますね!","そうなんですか?"]
answer = random.choice(ansewr_list)
print(answer)
await message.channel.send(answer)
# Bot起動
client.run(config.DISCORD_TOKEN)
Botをオンラインにする
実装したdiscordbot.pyを実行すると…
$ python discordbot.py
動作確認
動きました!!!!