コマンドのグループを作ってみよう
挨拶っていろんな種類がありますよね。
ってなわけで、前回作成したgreed
コマンドを成長させてみましょう!
bot.group()
機能自体は前から知っていたのですが、実際に使い始めたのはこの記事を書く前日からです。
それもちゃんとは理解しきれていません。
ガッ...説明します。がんばります。
まず、このデコレーターでは「コマンドグループ」を作成することができます。
これはどういう時に使うかというと、例えば設定を追加するコマンド、削除するコマンド、確認するコマンド...
c!setting [add/del/check]
とあった際に、setting
というグループを作って、その中のコマンドとしてadd
とdel
とcheck
をそれぞれ作ることができます。
管理が楽になったりします。
前回の挨拶コマンドを改造していきましょう。
- @bot.command()
+ @bot.group()
async def greed(ctx: commands.Context):
await ctx.reply("コンチワーッス")
とりあえずこれで実行してみましょう。
特に実感湧きませんよね。
そしたらグループに対してサブコマンドを作ってみましょう。
下記コードを追加してください。
@greed.command()
async def goodmorning(ctx: commands.Context):
await ctx.reply("オハヨウッ...")
これで実行してc!greed goodmorning
と実行してみましょう。
あれ、「コンチワーッス」と「オハヨウッ...」の両方が表示されてしまいます。
c!greed
に対してgoodmorning
があるときは「おはよう」だけで、それ以外の場合は「こんにちは」を表示させたいのです。難しいですね。
そんな時は、コマンドが処理されたかを調べれば良いのです。
@bot.group()
async def greed(ctx: commands.Context):
+ if not ctx.invoked_subcommand:
await ctx.reply("コンチワーッス")
これでやってみましょう。
こんな風に、サブコマンドが実行されなかった場合に、greed
内の返信が行われましたね。
これがコマンドグループの大まかな概要です。
D4DPy Groopy Mix!
さて、コマンドグループについてある程度理解していただけたでしょうか。
これで沢山コマンドを作ってください!
さて...たくさんコマンドを作ると、一つのファイルで管理するのは大変ですよね...?
次回はそこら辺です!
次回もよろしく!