Discord bot ことはじめ

2024-12-22

やること

  • Python を使って
  • Discord の受信応答 bot を作る

開発環境

  • Python 3.13.1
  • Poetry
  • WSL (Ubuntu)

仮想環境の組み立て

python -m venv .venv

下記のライブラリを poetry add しています。

[tool.poetry.dependencies]
python = "3.12.6"
discord-py = "^2.4.0"
python-dotenv = "^1.0.1"
coloredlogs = "^15.0.1"

Discord Developer Portal で必要情報の取得

登録・アプリの作成は割愛します。
Discord Developer Portal — My Applications

Bot をサーバーに入れる

こんな感じの権限設定を与えてください。

今回はサーバーにいれるので Guild Install を選択します。

設定を保存したら、URL をコピーして開きます

あとは画面の指示に従うと、サーバーに bot を join できると思います。
このとき、bot はオフラインの状態です。

トークンの取得

左側の bot を選択します。

選択すると、TOKEN と書かれている場所があるのでここからトークンを発行します。
発行したトークンは .env ファイルなどに格納しましょう。

DISCORD_TOKEN=~

Bot を動かす

bot にメンションすると bot が応答するように Python を組みます。

import discord
import os
import logging
from dotenv import load_dotenv
import coloredlogs

load_dotenv()

# ロガーの設定
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
coloredlogs.install(level="DEBUG", logger=logger)


class MyClient(discord.Client):
    def __init__(self, **options):
        super().__init__(intents=discord.Intents.default(), **options)

    async def on_ready(self):
        logger.info(f"Logged on as {self.user}!")

    async def on_message(self, message):
        if message.author.bot:
            # メッセージを送ったのがBot自身なら処理をスキップ
            return
        if message.mentions:
            logger.info(f"メンション受信: by {message.author}")
            await message.channel.send(
                f"こんにちは、{message.author.name}さん!メンションを受け取りました。"
            )


client = MyClient()
client.run(os.getenv("DISCORD_TOKEN"))

これを実行すると、bot がオンライン状態になると思います。
この状態で bot に直接メンションを送ると、bot が返答してくれると思います。

参考