Интеграция Django Webhook с Aiogram

Обзор

Этот проект интегрирует Telegram-бота (использующего Aiogram) с Django-приложением через веб-хук. Однако при запуске python manage.py migrate возникает следующая ошибка:

RuntimeError: Event loop is closed
Unclosed client session

Выпуск

  • Ошибка указывает на проблемы с преждевременным закрытием цикла событий и незакрытой сессией клиента aiohttp.
  • Обработчик webhook обрабатывает обновления из Telegram асинхронно с помощью Aiogram, но цикл событий не управляется должным образом в синхронных представлениях Django.

Код

session = AiohttpSession()
bot = Bot(token=settings.BOT_TOKEN, session=session, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
dp = Dispatcher()

@csrf_exempt
def webhook(request):
    if request.method == "POST":
        try:
            update_data = json.loads(request.body)
            update = Update(**update_data)

            async def process_update():
                await dp.feed_update(bot=bot, update=update)

            loop = asyncio.get_event_loop()
            if loop.is_closed():
                loop = asyncio.new_event_loop()
                asyncio.set_event_loop(loop)
            loop.run_until_complete(process_update())

            return HttpResponse("OK")
        except Exception as e:
            logger.error(f"Error: {e}")
            return HttpResponse("Bad Request", status=400)
    return HttpResponse("Method not allowed", status=405)

попросите ChatGPT, но безуспешно.

Вернуться на верх