Нужна помощь в настройке asyncio l oop, которая редактирует мое сообщение в течение заданного интервала времени, для создания команды обратного отсчета таймера для моего бота discord.py - PullRequest
0 голосов
/ 07 февраля 2020

Я хочу, чтобы мой бот редактировал значение int(time), отправленное пользователем, и продолжал редактировать его в течение al oop, пока не достигнет 0. Вот мой текущий код:

@bot.command()
async def settimer(ctx, time: int):

        await ctx.send('Timer set for ' + str(time) + ' seconds')

        if int(time) > 10:
            await asyncio.sleep(time)

            message = await ctx.send(str(time))
            while int(time) > 0:

                while int(newtime) > 0:
                        await asyncio.sleep(4)
                        newtime = int(time) - 4
                        await message.edit(content = str(newtime))
                        newtime = newtime - 4
                        await asyncio.sleep(4)


        else:
            await asyncio.sleep(time)
            await ctx.send('Timer Over! ' + ctx.message.author.mention)
            print ('time was less than 10')

1 Ответ

0 голосов
/ 08 февраля 2020

Внешний l oop будет бесконечно l oop, поскольку time никогда не меняется. Внутренний l oop также будет бесконечно l oop, когда время> 8, поскольку newtime устанавливается на time на каждой итерации l oop.

Кроме того, вы спать по 4 секунды дважды между каждым редактированием сообщения после первого.

Кроме того, весь метод имеет неправильный отступ дважды, и код внутри внутреннего l oop также имеет неправильный отступ дважды.

Я не уверен, предназначено ли это, но вы также спите time секунд до того, как сообщение таймера будет даже отправлено.

time уже должно быть int, так что нет причина снова привести его к int.

Вы можете просто использовать один l oop и уменьшить одну переменную за один сон, например:

            while time > 0:
                await asyncio.sleep(4)
                time -= 4
                await message.edit(content = str(time))

Для -= см. Python документацию по расширенным операторам присваивания .

Возможно, вы также захотите изучить форматирование строки .

Также, это обычные циклы while, а не "asyncio l oop", которые обычно ссылаются на событие loo пс .

...