Le code de cet article est juste un code simplifié pour l'explication, donc seul le code absurde apparaîtra. Notez s'il vous plaît.
L'extension de commande discord.py (https://discordpy.readthedocs.io/ja/latest/ext/commands/index.html) a la capacité de regrouper plusieurs commandes et événements appelés cog. de cette façon
hoge.py
from discord.ext import commands as c
class CogHogeFuga(c.Cog):
def __init__(self, bot, hoge):
self._bot = bot
self._hoge = hoge
@c.command()
async def hoge1(self, ctx):
await ctx.send("hoge")
@c.command()
async def hoge2(self, ctx):
foo = await hoge3()
return foo
async def hoge3(self):
return self._hoge
Si vous écrivez, le simple chargement de CogHogeFuga
chargera à la fois hoge1
et hoge2
.
Cependant, à mesure que le développement progressait, il est devenu comme suit.
hoge.py
from discord.ext import commands as c
class CogHogeFuga(c.Cog):
def __init__(self, bot, hoge):
self._bot = bot
self._hoge = hoge
self._fuga = None
@c.command()
async def hoge1(self, ctx):
await ctx.send("hoge")
@c.command()
async def hoge2(self, ctx):
foo = await hoge3()
await ctx.send(foo)
async def hoge3(self):
return self._hoge
"""
Commandes ajoutées ci-dessous à partir d'ici
"""
@c.command()
async def fuga1(self, ctx):
return ctx.send("fuga")
async def fuga2(self, ctx, new_):
self._fuga = new_
@c.command()
async def fuga3(self, ctx):
foo = await fuga4()
await ctx.send(foo)
async def fuga4(self):
return self._fuga
J'ai essayé de l'ajouter d'une manière ou d'une autre, mais les commandes liées à hoge
et les commandes liées à fuga
sont mélangées.
Il y aura peut-être plus de commandes liées à bar
dans le futur, et j'aimerais les séparer si possible.
Cependant, augmenter simplement le nombre de rouages augmentera le temps et l'effort requis pour charger les rouages. Les deux hoge
et fuga
sont similaires, donc si possible, j'aimerais le faire avec un seul effort debot.add_cog (CogHogeFuga (bot))
.
Donc, je pense que ce serait bien de pouvoir imbriquer des rouages.
En fait, en écrivant ce qui suit, le chargement du rouage lui-même peut être laissé sous la forme bot.add_cog (CogHogeFuga (bot))
.
hoge.py
from discord.ext import commands as c
class CogHogeFuga(c.Cog):
def __init__(self, bot, hoge):
self._bot = bot
self._bot.add_cog(CogHoge(self._bot, hoge)) #point
self._bot.add_cog(CogFuga(self._bot)) #point
class CogHoge(c.Cog):
def __init__(self, bot, hoge):
self._bot = bot
self._hoge = hoge
@c.command()
async def hoge1(self, ctx):
await ctx.send("hoge")
@c.command()
async def hoge2(self, ctx):
foo = await hoge3()
await ctx.send(foo)
async def hoge3(self):
return self._hoge
class CogFuga(c.Cog):
def __init__(self, bot):
self._bot = bot
self._fuga = None
@c.command()
async def fuga1(self, ctx):
return ctx.send("fuga")
async def fuga2(self, ctx, new_):
self._fuga = new_
@c.command()
async def fuga3(self, ctx):
foo = await fuga4()
await ctx.send(foo)
async def fuga4(self):
return self._fuga
En passant le bot lui-même lors de l'ajout de Cog comme décrit ci-dessus, il était possible d'ajouter d'autres Cogs au bot au moment de l'initialisation.
Veuillez me faire savoir s'il existe un moyen plus simple.
C'est l'arrière du refroidisseur.
Comme mentionné ci-dessus, chaque rouage doit être add_cog au bot. Il y a aussi une fonction pour charger le fichier entier appelé ʻExtension, mais cela exécute aussi finalement la méthode
setup () dans le fichier, donc vous devez écrire ʻadd_cog
ici.
je peux
――Je veux écrire ensemble les choses qui sont très pertinentes, je veux comprendre ――Je veux éviter de modifier plusieurs endroits avec une seule réparation
Ainsi, il est réalisé en imbriquant Cog. Avec cette méthode d'écriture, par exemple, si vous voulez diviser un certain Cog, vous n'avez qu'à réécrire le Cog que vous voulez diviser, et il n'est pas nécessaire de décrire le processus de chargement d'un nouveau Cog dans une autre partie.