Discord.py как сделать ТОЧНЕЙШИЙ таймер (с выводом оставшегося времени на экран)
Есть discord бот, который должен редактировать сообщение каждую секунду, меняя число до "мин" и "сек" (в сообщении). Я сделал 2 варианта таймера: через time.sleep() и через asyncio.sleep(). И тестируя оба таймера, если им задать параметр "спать" - 1 сек, то 10 мин. в дс таймере = 18 мин реал. времени. Меняю параметр на 0.5 сек и ниже 10 мин в дс таймере = 10 мин 36 сек реал времени. При этом, если протестировать не через message.send() или message.edit(), а через print(), то погрешность отсутствует. Что я делаю не так и как это исправить (т.е. сделать погрешность во времени минимальной с message.send() или с message.edit())?
Код:
@client.event
async def on_message(message):
if message.content.startswith("/timer"):
message.id=766947123312721930
min=0
sec=60
while(sec != 0):
sec-=1
emb = discord.Embed(type="rich", colour=discord.Color.blurple(), description= f'До конца урока осталось: {min} мин. {sec} сек.')
await message.edit(embed = emb)
await asyncio.sleep(0.25)
Ответы (1 шт):
Через инкременты/декременты никогда не сделаешь точного таймера. Если у тебя убывающий таймер, то надо запоминать время, когда он должен превратиться в 0 и каждую секунду пересчитывать сколько минут и секунд осталось до этого времени и модифицировать сообщение. Для возрастающего таймера, надо запоминать во сколько начал и пересчитывать минуты/секунды прошедшие с этого времени.