Files
2025-03-07 19:32:09 +03:00

70 lines
1.8 KiB
Python

import asyncio
import logging
from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from aiogram.fsm.storage.redis import DefaultKeyBuilder, RedisStorage
from aiogram_dialog import setup_dialogs
import config
from commands.campaigns import campaigns_router
from commands.help import help_router
from commands.logout import logout_router
from commands.start import start_router
from commands.stats import statistics_router
from dialogs.campaigns import campaigns_dialog
from dialogs.start import start_dialog
from middlewares.auth import AuthMiddleware
from middlewares.throttling import ThrottlingMiddleware
logger = logging.getLogger(__name__)
async def main() -> None:
logging.basicConfig(
level=logging.INFO,
format=(
"%(levelname)-8s %(filename)s:%(lineno)d"
" [%(asctime)s] - %(name)s - %(message)s"
),
)
logger.info("Starting bot...")
bot: Bot = Bot(
config.BOT_TOKEN, default=DefaultBotProperties(parse_mode="HTML")
)
dp: Dispatcher = Dispatcher(
storage=RedisStorage.from_url(
config.REDIS_URI,
key_builder=DefaultKeyBuilder(with_destiny=True),
),
)
dp.message.middleware(ThrottlingMiddleware(0.5))
dp.message.outer_middleware(AuthMiddleware())
dp.include_routers(
help_router,
start_router,
campaigns_router,
statistics_router,
logout_router,
)
dp.include_routers(start_dialog, campaigns_dialog)
setup_dialogs(dp)
await bot.delete_webhook(drop_pending_updates=True)
try:
await dp.start_polling(bot)
finally:
await dp.storage.close()
await bot.session.close()
if __name__ == "__main__":
try:
asyncio.run(main())
except (KeyboardInterrupt, SystemExit):
logger.info("Stopping bot...")