From 91e2d41cb6916549f099e28e6eabbb31d81b7f5b Mon Sep 17 00:00:00 2001 From: Untone Date: Sat, 6 Jan 2024 14:32:25 +0300 Subject: [PATCH] polling-fix --- main.py | 52 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/main.py b/main.py index 73733eb..c60c00c 100644 --- a/main.py +++ b/main.py @@ -1,23 +1,29 @@ import asyncio import logging import signal -import sys -from aiohttp import web -from bot.api import send_message +from aiohttp import ClientSession +from handlers.command_my import send_message from handlers.routing import handle_routing from handlers.callback_unlink import handle_unlink from handlers.callback_vouch import handle_button from handlers.handle_join_request import handle_join_request from handlers.handle_startup import handle_startup from handlers.handle_members_change import handle_join, handle_left -from storage.profile import Profile +from bot.config import BOT_TOKEN, FEEDBACK_CHAT_ID from bot.state import State -from bot.config import FEEDBACK_CHAT_ID +from storage import Profile logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) state = State() +api_url = f'https://api.telegram.org/bot{BOT_TOKEN}/' + + +async def fetch(session, url): + async with session.get(url) as response: + return await response.json() + async def command_start_handler(message): caption = "Напишите своё сообщение для нас" if message.from_user.llanguage_code == 'ru' else "Write your message for us" @@ -82,7 +88,7 @@ async def chat_members_change(update): old_member = vars(member_updated["old_chat_member"]) new_member = vars(member_updated["new_chat_member"]) if old_member: - if old_member.status == ChatMemberStatus.KICKED: + if old_member.status == 'KICKED': Profile.erase(member_updated["from"]["id"]) await handle_left(member_updated) elif new_member: @@ -98,29 +104,31 @@ async def chat_members_change(update): await send_message(FEEDBACK_CHAT_ID, text) -async def main(request): +async def main(): # storage revalidation await handle_startup() - # Получение обновлений - updates = await request.json() + async with ClientSession() as session: + offset = 0 # начальное значение offset + while True: + updates = await fetch(session, f"{api_url}getUpdates?offset={offset}") + for update in updates["result"]: + if "message" in update: + await all_handler(update["message"]) + elif "callback_query" in update: + await process_callback(update["callback_query"]) + elif "join_chat_request" in update: + await join_request_handler(update["join_chat_request"]) + elif "my_chat_member" in update: + await chat_members_change(update["my_chat_member"]) - for update in updates["result"]: - if "message" in update: - await all_handler(update["message"]) - elif "callback_query" in update: - await process_callback(update["callback_query"]) - elif "join_chat_request" in update: - await join_request_handler(update["join_chat_request"]) - elif "my_chat_member" in update: - await chat_members_change(update["my_chat_member"]) + offset = update["update_id"] + 1 # обновление offset - return web.Response() + await asyncio.sleep(1.0) if __name__ == "__main__": logging.basicConfig(level=logging.INFO, stream=sys.stdout) - app = web.Application() - app.router.add_post('/your_bot_token', main) # Замените 'your_bot_token' на реальный токен вашего бота - web.run_app(app, host='0.0.0.0', port=3000) # Выберите подходящий порт + # Запуск асинхронного цикла + asyncio.run(main())