остановка задачи discord.py

#python #discord.py

#python #discord.py

Вопрос:

Я создал бота Discord, который выполняет цикл выполнения задачи каждые 15 минут. У меня все работает так, как задумано, но теперь я хочу добавить команду, которая останавливает и запускает задачу. Вот часть моего кода:

 class a(commands.Cog):
def __init__(self, client):
    self.client = client

    @tasks.loop(minutes=15.0)
    async def b(self):
        #do something
        
    b.start(self)
    
    @commands.command(pass_context=True)
    async def stopb(self, ctx):
        b.cancel(self)

def setup(client):
    client.add_cog(a(client))
  

Когда я использую команду stopb, возвращается ошибка, в которой говорится, что этот stopb не определен. Я попытался изменить отступ, но тогда ошибка заключается в том, что b не определен. Приведенный выше код является частью шестеренки. В моем основном файле у меня есть команда, которая может загружать и выгружать винтики, но это не останавливает задачу.

Ответ №1:

Вместо того, чтобы использовать декоратор цикла, вы можете создать свою собственную функцию задачи и добавить ее в цикл бота. Таким образом, вы можете сохранить объект задачи, который имеет функцию отмены.

 class a(commands.Cog):
    def __init__(self, client):
        self.client = client
        self.task = self.client.loop.create_task(self.b())


    async def b(self):
        while True:
            #do something

            await asyncio.sleep(900)
            
    @commands.command(pass_context=True)
    async def stopb(self, ctx):
        self.task.cancel()


def setup(client):
    client.add_cog(a(client))
  

Комментарии:

1. bot.cogs["a"].b.cancel() должно сработать, не так ли?