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 が返答してくれると思います。