#python #loops #command #discord.py
#python #циклы #команда #discord.py
Вопрос:
@client.command()
async def activate(ctx, quote, delay: int):
await ctx.send("Successfully activated SpamMode")
global a
a = 1
while a == 1:
await ctx.send(quote)
time.sleep(delay)
Итак, у меня есть эта команда в моем боте discord (созданная с discord.py ), что он делает, так это в основном отправляет сообщение quote
с задержкой между каждым сообщением delay
(в секундах). Я сделал это с помощью цикла while, есть ли способ прервать этот цикл при выполнении другой команды, не дожидаясь time.sleep(delay)
завершения?
т.е.
@client.command()
async def deactivate(ctx):
global a
a = 2
await ctx.send("Successfully deactivated SpamMode")
Итак, в основном, что в настоящее время происходит, так это то, что если я попытаюсь использовать эту команду, которая остановит работу предыдущей команды, мне придется ждать time.sleep()
завершения, чего я не хочу. Любая помощь вообще будет оценена.
Ответ №1:
Используйте tasks.loop . Вы можете немедленно остановить их, используя cancel()
метод
Пример:
from discord.ext import tasks
@client.command()
async def activate(ctx, quote, delay: int):
global spam_loop
@tasks.loop(seconds=delay)
async def spam_loop(q):
await ctx.send(q)
spam_loop.start(quote)
await ctx.send("Successfully activated SpamMode")
@client.command()
async def deactivate(ctx):
spam_loop.cancel()
await ctx.send("Successfully deactivated SpamMode")