welcomecenterbot/main.py

127 lines
4.3 KiB
Python
Raw Normal View History

2023-09-11 20:04:53 +00:00
import asyncio
import logging
2024-01-06 11:25:35 +00:00
import signal
2023-09-11 20:04:53 +00:00
import sys
2024-01-06 11:25:35 +00:00
from aiohttp import web
from bot.api import send_message
2023-09-11 20:11:10 +00:00
from handlers.routing import handle_routing
2023-09-18 07:50:48 +00:00
from handlers.callback_unlink import handle_unlink
from handlers.callback_vouch import handle_button
from handlers.handle_join_request import handle_join_request
2023-09-18 11:02:24 +00:00
from handlers.handle_startup import handle_startup
from handlers.handle_members_change import handle_join, handle_left
2024-01-06 11:25:35 +00:00
from storage.profile import Profile
from bot.state import State
from bot.config import FEEDBACK_CHAT_ID
2023-09-11 20:04:53 +00:00
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
state = State()
2024-01-06 11:25:35 +00:00
async def command_start_handler(message):
2023-10-21 09:54:27 +00:00
caption = "Напишите своё сообщение для нас" if message.from_user.llanguage_code == 'ru' else "Write your message for us"
await message.answer(caption)
2023-09-11 20:04:53 +00:00
2024-01-06 11:25:35 +00:00
async def process_callback(callback_query):
2023-09-11 20:04:53 +00:00
cbq = vars(callback_query)
2023-10-21 09:54:27 +00:00
try:
2023-10-21 10:58:50 +00:00
cbq["from"] = vars(callback_query.from_user)
cbq["message"] = vars(callback_query.message)
2023-10-21 09:54:27 +00:00
data = cbq["data"]
if data.startswith("vouch"):
await handle_button(cbq)
elif data.startswith("unlink"):
await handle_unlink(cbq, state)
except Exception as e:
logger.error(f"[main.process_callback] ERROR {e}")
logger.debug(cbq)
2023-10-21 11:19:18 +00:00
import traceback
text = traceback.format_exc()
2024-01-06 11:25:35 +00:00
await send_message(FEEDBACK_CHAT_ID, text)
2023-09-11 20:04:53 +00:00
2024-01-06 11:25:35 +00:00
async def join_request_handler(update):
2023-09-11 20:04:53 +00:00
print("chat join request")
join_request = vars(update)
2023-10-21 09:54:27 +00:00
try:
2023-10-21 10:58:50 +00:00
join_request["from"] = vars(update.from_user)
join_request["chat"] = vars(update.chat)
2023-10-21 09:54:27 +00:00
await handle_join_request(join_request)
except Exception as e:
logger.error(f"[main.join_request_handler] ERROR {e}")
logger.debug(join_request)
2023-10-21 11:19:18 +00:00
import traceback
text = traceback.format_exc()
2024-01-06 11:25:35 +00:00
await send_message(FEEDBACK_CHAT_ID, text)
2023-10-21 09:54:27 +00:00
2023-09-11 20:04:53 +00:00
2024-01-06 11:25:35 +00:00
async def all_handler(message):
2023-09-11 20:04:53 +00:00
msg = vars(message)
2023-10-21 09:54:27 +00:00
try:
2023-10-21 10:58:50 +00:00
msg["from"] = vars(message.from_user)
msg["chat"] = vars(message.chat)
if message.reply_to_message:
msg["reply_to_message"] = vars(message.reply_to_message)
2023-10-21 09:54:27 +00:00
await handle_routing(msg, state)
await asyncio.sleep(1.0)
except Exception as e:
logger.error(f"[main.all_handler] ERROR {e}")
logger.debug(msg)
2023-10-21 11:19:18 +00:00
import traceback
text = traceback.format_exc()
2024-01-06 11:25:35 +00:00
await send_message(FEEDBACK_CHAT_ID, text)
2023-09-11 20:04:53 +00:00
2024-01-06 11:25:35 +00:00
async def chat_members_change(update):
2023-10-26 09:18:15 +00:00
member_updated = vars(update)
2023-10-21 09:54:27 +00:00
try:
2023-10-26 09:18:15 +00:00
member_updated["chat"] = vars(update.chat)
member_updated["from"] = vars(update.from_user)
old_member = vars(member_updated["old_chat_member"])
new_member = vars(member_updated["new_chat_member"])
2023-10-21 09:54:27 +00:00
if old_member:
if old_member.status == ChatMemberStatus.KICKED:
2023-10-26 09:18:15 +00:00
Profile.erase(member_updated["from"]["id"])
await handle_left(member_updated)
2023-10-21 09:54:27 +00:00
elif new_member:
2023-10-26 09:18:15 +00:00
await handle_join(member_updated)
2023-10-21 09:54:27 +00:00
else:
logger.info("unhandled members update")
2024-01-06 11:25:35 +00:00
2023-10-21 09:54:27 +00:00
except Exception as e:
2023-10-21 10:58:50 +00:00
logger.error(f"[main.my_chat_member] ERROR {e}")
2023-10-26 09:18:15 +00:00
logger.debug(member_updated)
2023-10-21 11:19:18 +00:00
import traceback
text = traceback.format_exc()
2024-01-06 11:25:35 +00:00
await send_message(FEEDBACK_CHAT_ID, text)
2023-09-18 11:02:24 +00:00
2024-01-06 11:25:35 +00:00
async def main(request):
2023-09-18 11:02:24 +00:00
# storage revalidation
await handle_startup()
2023-09-11 20:04:53 +00:00
2024-01-06 11:25:35 +00:00
# Получение обновлений
updates = await request.json()
2023-09-11 20:04:53 +00:00
2024-01-06 11:25:35 +00:00
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"])
2023-09-11 20:04:53 +00:00
2024-01-06 11:25:35 +00:00
return web.Response()
2023-09-11 20:04:53 +00:00
2024-01-06 11:25:35 +00:00
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) # Выберите подходящий порт