🐷
discord.py入門 その2
おさらい
前回はbotの準備とイベントについて解説しました。今回はいよいよbotのコマンドを実装していきます。
前回のコード(再掲)
from discord.ext import commands
import discord
intents = discord.Intents.default()
intents.members = True # メンバー管理の権限
intents.message_content = True # メッセージの内容を取得する権限
bot = commands.Bot(
command_prefix="$", # $コマンド名 でコマンドを実行できるようになる
case_insensitive=True, # 大文字小文字を区別しない ($hello も $Hello も同じ!)
intents=intents # 権限を設定
)
@bot.event
async def on_ready():
print("Bot is ready!")
@bot.event
async def on_message(message: discord.Message):
"""メッセージをおうむ返しにする処理"""
if message.author.bot: # ボットのメッセージは無視
return
await message.reply(message.content)
bot.run("TOKEN")
Step3. コマンドを実装してみよう
Section1. 挨拶するコマンドを作ってみよう
始めに、on_message
を削除して、以下のコードを書きます。on_message
を削除する理由は後で述べます。
@bot.command()
async def hello(ctx: commands.Context) -> None:
"""helloと返すコマンド"""
await ctx.send(f"Hello {ctx.author.name}")
commands.Context
クラスのオブジェクトであるctx
は、コマンドを実行した人やメッセージ、チャンネルなどの情報を持っています。ctx.send
でメッセージを送信できます。author
属性がコマンドを実行した人の情報が入っています。name
属性で名前を取得できます。(ちなみに、str(author)
とするとname#1234
のような文字列になります。)
実行結果
コマンドを実行するにあたってコマンドを呼び出すためのキーワードを複数追加することができます。@bot.command()
の引数のaliases
に渡してあげましょう。
@bot.command(
name="hello", # コマンドの名前。設定しない場合は関数名
aliases=["hi", "hey"] # $hiでも $heyでも反応するようになる
)
async def hello(ctx: commands.Context):
...
Section2. ユーザーから引数を受け取ってみよう
今まではあらかじめ返答する内容が決まっていましたが、次はユーザーから引数を受け取ってみましょう。
以下のコードをhello
コマンドの下に追加してください。on_message
イベントはしばらく不要なので削除してください。
@bot.command()
async def add(ctx: commands.Context, a: int, b: int) -> None:
"""足し算をするコマンド"""
await ctx.send(a+b)
以下のようになれば成功です。
まとめ
今回はコマンドの基本的な実装方法について学びました。discord.pyはコマンドに関するサポートが豊富で、様々な複雑な処理を簡単に実装できるようになっています。本botの制作を通じ、その一部を知ってもらえれば幸いです。次回はいよいよコマンドで特定のチャンネルのメッセージをファイルにまとめて送信する機能を実装していきます。お疲れ様でした。
Discussion