[PYTHON] Comprendre les rouages et les extensions dans discord.py

Merci ~.

Je suis Sumidora qui a récemment commencé un examen du serveur de discorde sur note. Veuillez regarder par tous les moyens. S'il vous plaît.

https://note.com/sizumita

introduction

Quand j'ai commencé à utiliser le framework ext.commands dans discord.py, de nombreuses personnes ont essayé d'utiliser Cog mais cela n'a pas fonctionné. Je voudrais expliquer pour une telle personne.

Qu'est-ce que Cog?

Comme décrit dans Explication of Cog, les commandes, les écouteurs et certains états sont décrits dans une classe de développement de Bot. Il a été fait pour résumer en. Par exemple, c'est comme classer les commandes par catégorie ou séparer les écouteurs par fonction. C'est orienté objet. Cog peut être créé en créant une classe qui hérite des commandes. Comme ça:

from discord.ext import commands


class MyCog(commands.Cog):
    pass

Faire une commande dans Cog

Pour créer une commande dans Cog, nous utilisons une méthode légèrement différente. Normalement, lors de la création d'une commande avec un bot, utilisez @ bot.command (), mais lors de la création d'une commande dans Cog, utilisez @ commands.command (). Comme ça:

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('Hou la la!')

Utiliser des écouteurs d'événements dans Cog

Si vous voulez obtenir un événement comme @ bot.event dans Cog, utilisez @ commands.Cog.listener (). Cet écouteur a un argument de nom qui peut être utilisé pour faire d'une fonction de n'importe quel nom un écouteur! De plus, comme tous les auditeurs sont indépendants, vous pouvez en créer autant que vous le souhaitez. Comme ça:

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 'Comme c'est gentil' in message.content:
            await message.add_reaction('\U0001f44d')

J'ajoute souvent un argument de bot à \ _ \ _ init \ _ \ _, mais quoi?

Par exemple, si vous souhaitez utiliser une fonction dans un bot, telle que bot.reload_extension, vous devez faire référence à une instance du bot. Donc, en le passant lorsque __init__, vous pourrez vous y référer plus tard.

Qu'est-ce que l'extension?

Il existe également une Description de l'extension, mais c'est une fonction qui facilite le rechargement à chaud. Avec cela, vous pouvez modifier la commande sans laisser tomber le Bot. L'extension peut être charger / recharger / décharger. ** Les fichiers d'extension nécessitent la fonction de configuration. ** Cette fonction de configuration est appelée chaque fois que l'extension est chargée. Inversement, la fonction de démontage est appelée lorsqu'elle est déchargée.

Par exemple:

def setup(bot):
    print('Chargé')

Vous pouvez utiliser l'extension simplement en lisant le fichier qui dit.

Un exemple d'extension est ici

Technique de combinaison Cog et Extension

Cog dans le monde est, par exemple:

from cogfile import MyCog
from discord.ext import commands

bot = commands.Bot()

bot.add_cog(MyCog(bot))

Vous pouvez le charger en faisant, mais lorsque vous modifiez le contenu de Cog, vous voudrez peut-être recharger sans laisser tomber le Bot. Dans un tel cas, l'utilisation de la technique combinée de Cog et Extension rend l'application très facile! ::

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 'Comme c'est gentil' in message.content:
            await message.add_reaction('\U0001f44d')


#C'est important
def setup(bot):
    return bot.add_cog(MyCog(bot))

Donc

# from cogfile import MyCog
from discord.ext import commands

bot = commands.Bot()

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

Ce faisant, vous pouvez le charger sous une forme qui permet le rechargement à chaud!

Mise en garde

Environ 80% des Cogs dans le monde utilisent à la fois Cog et Extension, mais beaucoup de gens oublient la fonction de configuration et obtiennent une erreur lors de la copie. ** La fonction de configuration est requise **.

De plus, Cog et Extension sont différents! Certaines personnes l'ont confondu avec la même chose, alors faites-le moi savoir.

à la fin

Je veux ce genre d'explication / commentaire sur Cog et Extension! Si vous le souhaitez, veuillez écrire dans les commentaires.

Recommended Posts

Comprendre les rouages et les extensions dans discord.py
nest cog dans discord.py
nest cog dans discord.py
Comprendre les rouages et les extensions dans discord.py
Comprendre VQ-VAE
Comprendre Concaténer
Implémenter et comprendre l'arborescence de recherche d'union dans Go
Comprenez attentivement la distribution exponentielle et dessinez en Python
Tracer et comprendre la distribution normale multivariée en Python
Comprendre attentivement la distribution de Poisson et dessiner en Python
Comprendre en 10 minutes le sélénium
Messages mis à jour dans discord.py
Réseau de neurones pour comprendre et mettre en œuvre en mathématiques au secondaire
Comprendre t-SNE et améliorer la visualisation
Comprendre le DataSet et le DataLoader de PyTorch (2)
Clipping et normalisation dans TensorFlow
Comprendre le DataSet et le DataLoader de PyTorch (1)
Pile et file d'attente en Python
Implémenter l'extension en Python
Unittest et CI en Python
Je comprends Python en japonais!
Recherchez le nom du fichier, y compris le mot et l'extension spécifiés dans le répertoire