1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

クリスマスまでにPythonを使ってDiscordのBOTを作るAdvent Calendar 2022

Day 20

【20日目】コマンドのグループを作ってみよう【PythonでDiscordBOTを作ろう!】

Last updated at Posted at 2022-12-19

コマンドのグループを作ってみよう

挨拶っていろんな種類がありますよね。
ってなわけで、前回作成したgreedコマンドを成長させてみましょう!

bot.group()

機能自体は前から知っていたのですが、実際に使い始めたのはこの記事を書く前日からです。
それもちゃんとは理解しきれていません。
ガッ...説明します。がんばります。

まず、このデコレーターでは「コマンドグループ」を作成することができます。
これはどういう時に使うかというと、例えば設定を追加するコマンド、削除するコマンド、確認するコマンド...
c!setting [add/del/check]とあった際に、settingというグループを作って、その中のコマンドとしてadddelcheckをそれぞれ作ることができます。
管理が楽になったりします。

前回の挨拶コマンドを改造していきましょう。

main.py
- @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と実行してみましょう。

09257ADC-1456-40AB-A59F-BD66E9A2B42B.jpeg

あれ、「コンチワーッス」と「オハヨウッ...」の両方が表示されてしまいます。

c!greedに対してgoodmorningがあるときは「おはよう」だけで、それ以外の場合は「こんにちは」を表示させたいのです。難しいですね。
そんな時は、コマンドが処理されたかを調べれば良いのです。

main.py
  @bot.group()
  async def greed(ctx: commands.Context):
+     if not ctx.invoked_subcommand:
          await ctx.reply("コンチワーッス")

これでやってみましょう。

1A348CAD-41A3-4A81-BC84-23BED53B0C13.jpeg

こんな風に、サブコマンドが実行されなかった場合に、greed内の返信が行われましたね。

これがコマンドグループの大まかな概要です。

D4DPy Groopy Mix!

さて、コマンドグループについてある程度理解していただけたでしょうか。
これで沢山コマンドを作ってください!

さて...たくさんコマンドを作ると、一つのファイルで管理するのは大変ですよね...?

次回はそこら辺です!
次回もよろしく!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?