DiscordBot

Discord Botの開発入門

最近Discordを使用して大会運営などを行うことがあります。
基本的には既存のDiscord Botを使用することが多いですが、ちょっとした細かい機能が欲しい場合にDsicord Botを開発することがあります。
今回は簡単に入力したコマンドに対して返事をする簡単なBotを開発してみます。
なおDiscord Botの開発にはPythonを使用します

環境

  • OS: MacOS
  • Python: 3.9
  • ライブラリ: discord.py

開発環境の準備

Discord Botの開発にはPythonを使用します。
以前にMacOSでPythonの開発環境について纏めましたので、そちらをご参照ください。

また当たり前ですがDiscordのアカウントが必要です。
その際にGoogle Autheticatorで2段階認証している場合には各作業で二段階認証が必要になりますので、事前にアプリを準備しておいてください。

Discord Botの設定準備

実際にDiscord Botを開発する前に、Discordの開発者向けポータルでBotの設定を行います。
以下の手順でBotを作成し、必要な設定を行います。

  1. まずはDiscordの開発者向けポータルにアクセスし、ログインします。
  2. New Application」をクリックし、アプリケーション名を入力して「Create」をクリックします。
アプリケーションの新規作成
アプリケーションの新規作成(名称決定)
  1. 作成したアプリケーションのページに移動し、左側の「Bot」をクリックします。
Botの選択
  1. Privileged Gateway Intents」のチェックを入て「Save Chagnes」をクリックします。
    また各項目は以下のような意味があります。
    • Presence Intent: ユーザーのオンライン状態を取得するために必要です。
    • Server Members Intent: サーバーのメンバー情報を取得するために必要です。
    • Message Content Intent: メッセージの内容を取得するために必要です。
Botの設定
  1. Bot」ページ内にある「Reset Token」ボタンを押下して、トークンを生成してコピーしておきます。
    ※トークンはBotの認証に使用されるため、他人と共有しないように注意してください。
トークンの作成
  1. OAuth2」ページに移動し、以下の設定を行います。
    • Scopes: 「bot」を選択します。
    • Bot Permissions: Botに必要な権限を選択します。例えば、メッセージの送信や管理など。
      今回は自分専用のサーバーなので「Administrator」を選択します。
OAuth2の設定
  1. チェックを入れると「OAuth2」ページ内の下部に「Generated URL」が生成されるので、それをコピーしてブラウザで開きます。
アプリURLの発行
Discord登録

これで呼び出したサーバーにBotが追加され、Botの設定が完了しました。
次に実際に動作するBotのプログラムコードを作成します。

Discord Botの開発

Botの開発にはPythonの「discord.py」ライブラリを使用します。
以下の手順でBotのプログラムコードを作成します。

  1. ターミナルでPythonの仮想環境を作成し、「discord.py」ライブラリをインストールします。
python3 -m venv venv
source venv/bin/activate
pip install discord.py
  1. 以下のコードを「bot.py」というファイル名で保存します。
import discord

# 取得したトークンをここに貼り付けます
TOKEN = '取得したトークンをここに貼り付けてください'

# Botがどのサーバーの情報を取得するかなどの設定(インテント)
intents = discord.Intents.default()
intents.message_content = True  # メッセージの内容を取得する権限を有効にする

# Botのクライアントを作成
client = discord.Client(intents=intents)

# Botが起動したときに一度だけ実行される処理
@client.event
async def on_ready():
    print(f'{client.user} としてログインしました') # ターミナルにログインしたBot名を表示

# メッセージが投稿されたときに実行される処理
@client.event
async def on_message(message):
    # メッセージの送信者がBot自身の場合は何もしない
    if message.author == client.user:
        return

    # 「/neko」というメッセージが来たら「にゃーん」と返す
    if message.content == '/neko':
        await message.channel.send('にゃーん')
        return

    # 上記以外は、受け取ったメッセージをそのまま返す(オウム返し)
    await message.channel.send(message.content)

# Botを起動
client.run(TOKEN)
  1. 以下のコマンドで「bot.py」を実行します。
python3 bot.py
  1. Botが起動すると、ターミナルに「Bot名 としてログインしました」と表示されます。
    これでBotが正常に起動しています。
  2. この状態でDiscordのサーバー上で「/neko」とメッセージを送信すると、Botが「にゃーん」と返事をします。
  3. 終了する場合は、ターミナルで「Ctrl + C」を押します。

今回は簡単ではありますが、Discord Botの開発の基本的な流れを紹介しました。
またBotは常に動作させておく必要があるため、サーバーにデプロイすることも考慮する必要があります。
その場合の環境構築について後日まとめたいと思います。