Repository navigation
Expand file tree
/
Copy pathapp.py
More file actions
73 lines (50 loc) · 2.15 KB
/
Copy pathapp.py
File metadata and controls
73 lines (50 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import asyncio
from aiogram import Bot, Dispatcher
from aiogram.client.session.middlewares.request_logging import logger
from loader import db
def setup_handlers(dispatcher: Dispatcher) -> None:
"""HANDLERS"""
from handlers import setup_routers
dispatcher.include_router(setup_routers())
def setup_middlewares(dispatcher: Dispatcher, bot: Bot) -> None:
"""MIDDLEWARE"""
from middlewares.throttling import ThrottlingMiddleware
dispatcher.message.middleware(ThrottlingMiddleware(slow_mode_delay=0.5))
async def setup_aiogram(dispatcher: Dispatcher, bot: Bot) -> None:
logger.info("Configuring aiogram")
setup_handlers(dispatcher=dispatcher)
setup_middlewares(dispatcher=dispatcher, bot=bot)
logger.info("Configured aiogram")
async def database_connected():
db.create_all_tables()
async def aiogram_on_startup_polling(dispatcher: Dispatcher, bot: Bot) -> None:
from utils.set_bot_commands import set_default_commands
from utils.notify_admins import on_startup_notify
logger.info("Database connected")
await database_connected()
logger.info("Starting polling")
await bot.delete_webhook(drop_pending_updates=True)
await setup_aiogram(bot=bot, dispatcher=dispatcher)
await on_startup_notify(bot=bot)
await set_default_commands(bot=bot)
async def aiogram_on_shutdown_polling(dispatcher: Dispatcher, bot: Bot):
logger.info("Stopping polling")
await bot.session.close()
await dispatcher.storage.close()
def main():
"""CONFIG"""
from data.config import BOT_TOKEN
from aiogram.enums import ParseMode
from aiogram.client.default import DefaultBotProperties
from aiogram.fsm.storage.memory import MemoryStorage
bot = Bot(token=BOT_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
storage = MemoryStorage()
dispatcher = Dispatcher(storage=storage)
dispatcher.startup.register(aiogram_on_startup_polling)
dispatcher.shutdown.register(aiogram_on_shutdown_polling)
asyncio.run(dispatcher.start_polling(bot, close_bot_session=True))
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
logger.info("Bot stopped!")