import asyncio import logging import sys import signal # Import the signal module from aiogram import Bot, Dispatcher, Router from aiogram.enums import ParseMode from aiogram.filters import CommandStart, Command from aiogram.types import Message, ChatJoinRequest, CallbackQuery from config import BOT_TOKEN, ADMIN_ID from handlers.routing import handle_routing from state import State logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) router = Router() state = State() @router.message(CommandStart()) async def command_start_handler(message: Message) -> None: await message.answer("Напишите своё сообщение для администрации чата") @router.callback_query() async def process_callback(callback_query: CallbackQuery): cbq = vars(callback_query) data = cbq["data"] if data.startswith("vouch"): await handle_button(cbq) elif data.startswith("unlink"): await handle_unlink(cbq) @router.chat_join_request() async def join_request_handler(update: ChatJoinRequest) -> None: print("chat join request") join_request = vars(update) await handle_join_request(join_request) @router.message() async def all_handler(message: Message) -> None: msg = vars(message) msg["from"] = vars(message.from_user) msg["chat"] = vars(message.chat) await handle_routing(msg, state) await asyncio.sleep(1.0) async def main() -> None: bot = Bot(BOT_TOKEN, parse_mode=ParseMode.HTML) dp = Dispatcher() dp.include_router(router) # Start event dispatching await dp.start_polling(bot) if __name__ == "__main__": logging.basicConfig(level=logging.INFO, stream=sys.stdout) # Define a function to handle SIGTERM def handle_sigterm(signum, frame): logger.info("Received SIGTERM. Shutting down gracefully...") asyncio.get_event_loop().stop() # Register the SIGTERM signal handler signal.signal(signal.SIGTERM, handle_sigterm) asyncio.get_event_loop().run_until_complete(main())