welcomecenterbot/bot/main.py

74 lines
2.2 KiB
Python
Raw Normal View History

2023-09-11 20:04:53 +00:00
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
2023-09-11 20:11:10 +00:00
from config import BOT_TOKEN, ADMIN_ID
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-11 20:11:10 +00:00
from state import State
2023-09-11 20:04:53 +00:00
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("Напишите своё сообщение для администрации чата")
2023-09-17 09:23:07 +00:00
@router.callback_query()
2023-09-11 20:04:53 +00:00
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"):
2023-09-18 07:50:48 +00:00
await handle_unlink(cbq, state)
2023-09-11 20:04:53 +00:00
2023-09-17 09:28:06 +00:00
@router.chat_join_request()
2023-09-11 20:04:53 +00:00
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)
2023-09-17 09:48:47 +00:00
await handle_routing(msg, state)
2023-09-11 20:04:53 +00:00
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())