Как сделать так, чтобы телеграмм-бот не спамил после перезапуска, aiogram 3
Я новичок. У меня есть бот для телеграмма, написан он на aiogram 3, python. Проблема состоит в том, что если бот вырубается, а пользователь продолжает отправлять ему сообщения, то при повторном запуске бота он начинает спамить, отвечая на заданные во время неактивности команды. Это можно как-то исправить? Ну, чтобы как только я снова запускаю бота, он "забывал" все те сообщения?
Ответы (2 шт):
Автор решения: Amgarak
→ Ссылка
Перед запуском цикла бота:
import requests
api_key = 'TOKEN'
def clear_queue(update):
url = f'https://api.telegram.org/bot{api_key}/getUpdates'
params = {'offset': update.get('update_id')+1}
response = requests.get(url, params=params)
# Очистка очереди перед стартом бота
url = f'https://api.telegram.org/bot{api_key}/getUpdates'
response = requests.get(url)
updates = response.json().get('result', [])
if updates:
clear_queue(updates[-1])
Автор решения: CausonQ
→ Ссылка
В Aiogram есть метод deleteWebhook
Вызываете его и всё, накопленные апдейты будут пропущены
import asyncio
from aiogram import Bot, Dispatcher
async def main():
bot = Bot(token="TOKEN")
dp = Dispatcher()
await bot.delete_webhook(drop_pending_updates=True) # этот
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())