polling-fix

This commit is contained in:
Untone 2024-01-06 14:32:25 +03:00
parent 908529b5bb
commit 91e2d41cb6

52
main.py
View File

@ -1,23 +1,29 @@
import asyncio import asyncio
import logging import logging
import signal import signal
import sys from aiohttp import ClientSession
from aiohttp import web from handlers.command_my import send_message
from bot.api import send_message
from handlers.routing import handle_routing from handlers.routing import handle_routing
from handlers.callback_unlink import handle_unlink from handlers.callback_unlink import handle_unlink
from handlers.callback_vouch import handle_button from handlers.callback_vouch import handle_button
from handlers.handle_join_request import handle_join_request from handlers.handle_join_request import handle_join_request
from handlers.handle_startup import handle_startup from handlers.handle_startup import handle_startup
from handlers.handle_members_change import handle_join, handle_left 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.state import State
from bot.config import FEEDBACK_CHAT_ID from storage import Profile
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
state = State() 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): async def command_start_handler(message):
caption = "Напишите своё сообщение для нас" if message.from_user.llanguage_code == 'ru' else "Write your message for us" 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"]) old_member = vars(member_updated["old_chat_member"])
new_member = vars(member_updated["new_chat_member"]) new_member = vars(member_updated["new_chat_member"])
if old_member: if old_member:
if old_member.status == ChatMemberStatus.KICKED: if old_member.status == 'KICKED':
Profile.erase(member_updated["from"]["id"]) Profile.erase(member_updated["from"]["id"])
await handle_left(member_updated) await handle_left(member_updated)
elif new_member: elif new_member:
@ -98,29 +104,31 @@ async def chat_members_change(update):
await send_message(FEEDBACK_CHAT_ID, text) await send_message(FEEDBACK_CHAT_ID, text)
async def main(request): async def main():
# storage revalidation # storage revalidation
await handle_startup() await handle_startup()
# Получение обновлений async with ClientSession() as session:
updates = await request.json() 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"]: offset = update["update_id"] + 1 # обновление offset
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"])
return web.Response() await asyncio.sleep(1.0)
if __name__ == "__main__": if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, stream=sys.stdout) logging.basicConfig(level=logging.INFO, stream=sys.stdout)
app = web.Application() # Запуск асинхронного цикла
app.router.add_post('/your_bot_token', main) # Замените 'your_bot_token' на реальный токен вашего бота asyncio.run(main())
web.run_app(app, host='0.0.0.0', port=3000) # Выберите подходящий порт