[PYTHON] Verstehen Sie Zahnräder und Erweiterungen in discord.py

Danke ~.

Ich bin Sumidora, die kürzlich eine Serverüberprüfung der Zwietracht gestartet hat. Bitte schauen Sie auf jeden Fall. Bitte.

https://note.com/sizumita

Einführung

Als ich anfing, das ext.commands-Framework in discord.py zu verwenden, versuchten viele Leute, Cog zu verwenden, aber es funktionierte nicht. Ich möchte für eine solche Person erklären.

Was ist Zahnrad?

Wie in Erklärung von Cog beschrieben, werden Befehle, Listener und einige Status in einer Klasse in der Bot-Entwicklung beschrieben. Es wurde gemacht, um in zusammenzufassen. Zum Beispiel ist es so, als würde man Befehle nach Kategorien klassifizieren oder Listener nach Funktionen trennen. Es ist objektorientiert. Cog kann erstellt werden, indem eine Klasse erstellt wird, die Befehle erbt. So was:

from discord.ext import commands


class MyCog(commands.Cog):
    pass

Machen Sie einen Befehl in Cog

Um einen Befehl in Cog zu erstellen, verwenden wir eine etwas andere Methode. Normalerweise verwenden Sie beim Erstellen eines Befehls mit einem Bot "@ bot.command ()", aber wenn Sie einen Befehl in Cog erstellen, verwenden Sie "@ command.command ()". So was:

from discord.ext import commands


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

    @commands.command()
    async def cat(self, ctx):
        await ctx.send('Nyan?')

    @commands.command()
    async def dog(self, ctx):
        await ctx.send('Beeindruckend!')

Verwenden Sie Ereignis-Listener in Cog

Wenn Sie ein Ereignis wie "@ bot.event" in Cog erhalten möchten, verwenden Sie "@ command.Cog.listener ()". Dieser Listener hat ein Namensargument, mit dem eine Funktion eines beliebigen Namens zu einem Listener gemacht werden kann! Da alle Listener unabhängig sind, können Sie auch so viele erstellen, wie Sie möchten. So was:

from discord.ext import commands


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

    @commands.Cog.listener(name='on_message')
    async def good_reaction(self, message):
        if message.author.bot:
            return
        if 'Wie schön' in message.content:
            await message.add_reaction('\U0001f44d')

Ich füge \ _ \ _ init \ _ \ _ oft ein Bot-Argument hinzu, aber was?

Wenn Sie beispielsweise eine Funktion in bot verwenden möchten, z. B. "bot.reload_extension", müssen Sie auf die Bot-Instanz verweisen. Wenn Sie es also bei "init" übergeben, können Sie später darauf verweisen.

Was ist eine Erweiterung?

Es wird auch in Erweiterungsbeschreibung erwähnt, ist jedoch eine Funktion, die das Nachladen im laufenden Betrieb erleichtert. Mit dieser Option können Sie den Befehl ändern, ohne den Bot fallen zu lassen. Die Erweiterung kann laden / neu laden / entladen sein. ** Erweiterungsdateien erfordern die Setup-Funktion. ** Diese Setup-Funktion wird immer dann aufgerufen, wenn die Erweiterung geladen wird. Umgekehrt wird die Teardown-Funktion beim Entladen aufgerufen.

Zum Beispiel:

def setup(bot):
    print('Geladen')

Sie können die Erweiterung verwenden, indem Sie einfach die Datei lesen, in der steht.

Ein Beispiel für eine Erweiterung ist hier.

Zahnrad- und Verlängerungskombinationstechnik

Zahnrad in der Welt ist zum Beispiel:

from cogfile import MyCog
from discord.ext import commands

bot = commands.Bot()

bot.add_cog(MyCog(bot))

Sie können es auf diese Weise laden, aber wenn Sie den Inhalt von Cog ändern, möchten Sie möglicherweise neu laden, ohne den Bot fallen zu lassen. In einem solchen Fall ist die Anwendung mit der Kombinationstechnik von Zahnrad und Verlängerung sehr einfach! :: ::

cogfile.py


from discord.ext import commands


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

    @commands.Cog.listener(name='on_message')
    async def good_reaction(self, message):
        if message.author.bot:
            return
        if 'Wie schön' in message.content:
            await message.add_reaction('\U0001f44d')


#Das ist wichtig
def setup(bot):
    return bot.add_cog(MyCog(bot))

so

# from cogfile import MyCog
from discord.ext import commands

bot = commands.Bot()

# bot.add_cog(MyCog(bot))
bot.load_extension('cogfile')

Auf diese Weise können Sie es in einer Form laden, die das Nachladen im laufenden Betrieb ermöglicht!

Hinweis

Ungefähr 80% der Zahnräder auf der Welt verwenden sowohl Zahnrad als auch Erweiterung, aber viele Menschen vergessen die Setup-Funktion und erhalten beim Kopieren eine Fehlermeldung. ** Die Setup-Funktion ist erforderlich **.

Auch Zahnrad und Verlängerung sind unterschiedlich! Einige Leute haben es für dasselbe gehalten, also lassen Sie es mich bitte wissen.

schließlich

Ich möchte diese Art von Erklärung / Kommentar zu Cog and Extension! Wenn Sie möchten, schreiben Sie bitte in die Kommentare.

Recommended Posts

Verstehen Sie Zahnräder und Erweiterungen in discord.py
Nest Zahnrad in discord.py
Nest Zahnrad in discord.py
Verstehen Sie Zahnräder und Erweiterungen in discord.py
VQ-VAE verstehen
Verketten verstehen
Implementieren und verstehen Sie den Union-Find-Baum in Go
Verstehen Sie die Exponentialverteilung sorgfältig und zeichnen Sie in Python
Zeichnen und verstehen Sie die multivariate Normalverteilung in Python
Verstehe die Poisson-Distribution sorgfältig und zeichne in Python
Verstehe in 10 Minuten Selen
Aktualisierte Nachrichten in discord.py
Neuronales Netzwerk zum Verstehen und Implementieren in der Mathematik der High School
Verstehen Sie t-SNE und verbessern Sie die Visualisierung
Grundlegendes zu PyTorchs DataSet und DataLoader (2)
Clipping und Normalisierung in TensorFlow
Grundlegendes zu PyTorchs DataSet und DataLoader (1)
Stapel und Warteschlange in Python
Implementieren Sie die Erweiterung in Python
Unittest und CI in Python
Ich verstehe Python auf Japanisch!
Suchen Sie den Dateinamen einschließlich des angegebenen Wortes und der angegebenen Erweiterung im Verzeichnis