import asyncio import logging from handlers.messages_routing import messages_routing from handlers.handle_join_request import handle_join_request, handle_reaction_on_request from bot.config import FEEDBACK_CHAT_ID from bot.api import telegram_api logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) state = dict() async def start(): logger.info("\n\npolling started\n\n") offset = 0 # init offset while True: response = await telegram_api( "getUpdates", offset=offset, allowed_updates=["message", "message_reaction", "chat_join_request"], ) # logger.debug(response) if isinstance(response, dict): result = response.get("result", []) for update in result: logger.debug(update) try: message = update.get("message", update.get("edited_message")) join_chat_request = update.get("join_chat_request") message_reaction = update.get("join_chat_request") if message: # logger.debug(f"chat: {message.get("chat", message.get("chat_id"))}") await messages_routing(message, state) elif join_chat_request: await handle_join_request(join_chat_request) elif message_reaction: await handle_reaction_on_request(message_reaction) except Exception as e: logger.error(e) import traceback text = traceback.format_exc() formatted_text = f"```log\n{text}```" await telegram_api( "sendMessage", chat_id=FEEDBACK_CHAT_ID, text=formatted_text, parse_mode="MarkdownV2", ) offset = update["update_id"] + 1 await asyncio.sleep(1.0) else: logger.error(" \n\n\n!!! getUpdates polling error\n\n\n") await asyncio.sleep(30.0) if __name__ == "__main__": asyncio.run(start())