Der Code in diesem Artikel ist nur ein vereinfachter Code zur Erklärung, sodass nur Unsinncode angezeigt wird. Bitte beachten Sie.
Die Befehlserweiterung discord.py (https://discordpy.readthedocs.io/ja/latest/ext/commands/index.html) bietet die Möglichkeit, mehrere Befehle und Ereignisse zu gruppieren, die als cog bezeichnet werden. auf diese Weise
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
Wenn Sie schreiben, werden durch einfaches Laden von "CogHogeFuga" sowohl "hoge1" als auch "hoge2" geladen.
Mit fortschreitender Entwicklung wurde es jedoch wie folgt.
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
"""
Von hier unten hinzugefügte Befehle
"""
@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
Ich habe versucht, es irgendwie hinzuzufügen, aber die Befehle für "hoge" und die Befehle für "fuga" sind gemischt. Vielleicht wird es in Zukunft mehr Befehle geben, die sich auf "bar" beziehen, und ich möchte sie, wenn möglich, trennen.
Durch einfaches Erhöhen der Anzahl der Zahnräder wird jedoch der Zeit- und Arbeitsaufwand für das Laden der Zahnräder erhöht. Sowohl "hoge" als auch "fuga" sind ähnlich. Wenn möglich, möchte ich dies mit nur einem Versuch von "bot.add_cog (CogHogeFuga (bot))" tun.
Ich denke, es wäre schön, Zahnräder nisten zu können. Wenn Sie Folgendes schreiben, kann das Laden des Zahnrads selbst als "bot.add_cog (CogHogeFuga (bot))" belassen werden.
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)) #Punkt
self._bot.add_cog(CogFuga(self._bot)) #Punkt
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
Durch Übergeben des Bots selbst beim Hinzufügen von Cog wie oben beschrieben war es möglich, zum Zeitpunkt der Initialisierung weitere Cogs zum Bot hinzuzufügen.
Bitte lassen Sie mich wissen, ob es einen einfacheren Weg gibt.
Es ist die Rückseite des Kühlers. Wie oben erwähnt, muss jedes Zahnrad dem Bot add_cog sein. Es gibt auch eine Funktion zum Laden der gesamten Datei namens "Extension", die jedoch auch die "setup ()" - Methode in der Datei ausführt, sodass Sie hier "add_cog" schreiben müssen.
ich kann
――Ich möchte die Dinge zusammenschreiben, die sehr relevant sind, ich möchte verstehen ――Ich möchte vermeiden, mehrere Stellen mit einer Reparatur zu bearbeiten
So wird es durch Verschachteln von Cog realisiert. Wenn Sie mit dieser Schreibmethode beispielsweise ein bestimmtes Zahnrad teilen möchten, müssen Sie nur das Zahnrad neu schreiben, das Sie teilen möchten, und es ist nicht erforderlich, den Vorgang des Ladens eines neuen Zahnrads in einem anderen Teil zu beschreiben.