LoginSignup
1
1

More than 1 year has passed since last update.

【21日目】Cogでコマンドを管理しよう【PythonでDiscordBOTを作ろう!】

Last updated at Posted at 2022-12-20

Cogでコマンドを管理しよう

きっと向上心の高いみなさんなら、めちゃくちゃたくさんコマンドを作っていると思います。
ってなわけで、コマンドを沢山作っていくと、main.pyの1ファイルだけではコマンドの管理とかが大変になると思います。
また、例えばコマンドをちょっと修正した際に毎度毎度BOTを再起動するのは手間ですよね。
それらを解決できるのがCogという機能です。

Cogとは?

大雑把にいうと、コマンドなどを一つのクラスにまとめることができるもので、コマンドを別のファイルにまとめることが出来るってわけです。
とりあえずdog.pyというファイルを作ってみましょう。

dog.py
from nextcord.ext import commands

class Dog(commands.Cog):
    def __init__(self, bot: commands.Bot):
        self.bot = bot

def setup(bot):
   bot.add_cog(Dog(bot))

これがCogの原型です。

次に、main.pybot.runまでにコードを追加します。

main.py
+ bot.load_extension("dog")

  bot.run("TOKEN")

これで準備はできました。

まず、bot.load_extension("dog")で、ファイルdog.pyを読み込みます。(Extensionの読み込み)
すると、dog.pysetup関数が実行されます。(Extensionのセットアップ)
そして、インスタンス化されたDogがBOTにCogとして追加されるという原理です。(Cogの追加)

準備はできましたが、このままでは特に何にもできないので、Cogにコマンドを追加しましょう。

dog.py
  from nextcord.ext import commands

  class Dog(commands.Cog):
      def __init__(self, bot: commands.Bot):
          self.bot = bot

+     @commands.command()
+     async def dog(self, ctx: commands.Context):
+         await ctx.reply("わおーん!")

  def setup(bot):
     bot.add_cog(Dog(bot))

こんな感じに追加します。

まず、今までbot.commandだったのがcommands.commandになりました。
Cog内ではこのように、一部のデコレーターなどに変化がある場合があります。

また、新しくselfという引数が付きましたが、これはPythonの仕様としてClass内の関数にはselfがくっつく(インスタンス化されたクラスからコマンドを呼び出すと第一引数にインスタンス化されたクラスが渡る)というものです。
詳しくはPython class selfとかで調べてみてください。

これで実行してみましょう。
AA067701-B559-4C5B-A637-8B6DEC86ECB8.jpeg

普通にコマンドが実行できましたね。

Extension

extension関連の関数にはload_extension以外にもreload_extensionunload_extensionがあります。
このreload_extensionを実行すると、BOTを再起動しなくてもコマンドの更新などが行えます。
詳細は省略しますが、自分でデバッグ用コマンドを作成したり、jishakuonamiといったデバッグツールを入れることで楽にコマンドの管理ができたりします。頭の片隅に置いてきましょう。

次回

多くのPy製DiscordBOTはCogを活用していると思います。
では、よりもっと本物に近づけましょう。さて、何が足りないか?

次回はスラッシュコマンドをご紹介します。
では、次回の記事をお楽しみに!

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