generated from mezgoodle/bot_template
-
Notifications
You must be signed in to change notification settings - Fork 1
/
bot.py
80 lines (61 loc) · 2.14 KB
/
bot.py
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
74
75
76
77
78
79
80
import asyncio
from aiogram import Bot, Dispatcher
from aiogram.types.webhook_info import WebhookInfo
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from loguru import logger
from loader import bot, dp
from tgbot.config import Settings, config
from tgbot.misc.password_crypter import Crypter
from tgbot.models.supabase import SUPABASE_CLIENT
from tgbot.services.admins_notify import on_startup_notify
from tgbot.services.setting_commands import set_default_commands
def register_all_middlewares(dp: Dispatcher, config: Settings):
logger.info("Registering middlewares")
def register_all_handlers(dispatcher: Dispatcher) -> None:
from tgbot import handlers
logger.info("Registering handlers")
async def on_startup(
dispatcher: Dispatcher, bot: Bot, config: Settings, webhook_url: str = None
) -> None:
register_all_middlewares(dispatcher, config)
register_all_handlers(dispatcher)
await on_startup_notify(bot)
await set_default_commands(bot)
# Get current webhook status
webhook: WebhookInfo = await bot.get_webhook_info()
if webhook_url:
await bot.set_webhook(webhook_url)
logger.info("Webhook was set")
elif webhook.url:
await bot.delete_webhook()
logger.info("Webhook was deleted")
logger.info("Bot started")
async def main():
logger.add(
"tgbot.log",
format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {file} | {function}, {line} | {message}",
rotation="10 KB",
compression="zip",
)
logger.info("Starting bot")
client = SUPABASE_CLIENT()
logger.info("Getting supabase client")
scheduler = AsyncIOScheduler()
scheduler.start()
logger.info("Starting the scheduler")
crypter = Crypter()
logger.info("Initialize crypter")
await on_startup(dp, bot, config)
await dp.start_polling(
bot,
allowed_updates=dp.resolve_used_update_types(),
config=config,
client=client,
scheduler=scheduler,
crypter=crypter,
)
if __name__ == "__main__":
try:
asyncio.run(main())
except (KeyboardInterrupt, SystemExit):
logger.info("Bot shutdown!")