@ROBO.evento numa engrenagem discord.py

estava a pensar se é possível usar o @bot.evento numa engrenagem para discord.py. eu tentei fazer

@self.bot.event
async def on_member_join(self, ctx, member):
    channel = discord.utils.get(member.guild.channels, name='general')
    await channel.send("hello")

Na minha classe cog, mas eu entendo o erro

NameError: name 'self' is not defined
Apesar de me definir a mim próprio.bot in my _ _ init_.

Há uma maneira diferente de fazer bot.evento em engrenagens, ou é simplesmente impossível?

Author: qspitzer, 2017-12-31

2 answers

Não recomendo a resposta do qspitzers, uma vez que esta não é uma maneira sensata de mover os seus eventos para uma engrenagem e a resposta pode lançar algumas excepções desconhecidas/inesperadas. Em vez disso, faz algo assim.
from discord.ext import commands

class Events:
    def __init__(self, bot):
        self.bot = bot

    async def on_ready(self):
        print('Ready!')
        print('Logged in as ---->', bot.user)
        print('ID:', bot.user.id)

    async def on_message(self, message):
        print(message)

def setup(bot):
    bot.add_cog(Events(bot))
Tenha em mente que para colocar um evento dentro de uma engrenagem você não precisa de um decorador para ele. Também os eventos dentro do cog não superam os eventos padrão e estes eventos serão armazenados em bot.extra_events.
 4
Author: mental, 2018-02-03 23:38:35
Então, descobri uma maneira de fazer isto funcionar. O que eu fiz foi criar uma nova função e passar a variável bot a partir da função de configuração. Eu então criei uma tarefa de fundo da nova função, e tive @bot.o evento está a decorrer. O código é
def xyz(bot):
    @bot.event
    async def on_member_join(member):
        print("ABC")

def setup(bot):
    bot.loop.create_task(xyz(bot))
    bot.add_cog(cogClass(bot))

No caso de alguém não entender a minha explicação

Editar: esta é uma má maneira de fazer as coisas. use a maneira mental em vez disso

 1
Author: qspitzer, 2018-01-16 21:35:56