unicheckbot/apps/tgbot/bot.py

47 lines
1.5 KiB
Python
Raw Normal View History

2021-01-03 01:25:04 +03:00
from aiogram import Bot, Dispatcher, executor
from aiogram.contrib.fsm_storage.memory import MemoryStorage
2021-01-30 13:01:05 +03:00
from tgbot.middlewares import UserMiddleware, WriteCommandMetric, LoggingMiddleware, ThrottlingMiddleware
from tortoise import Tortoise
from tortoise.exceptions import DBConnectionError
2021-01-30 13:01:05 +03:00
from loguru import logger
from asyncio import sleep
import tgbot.config as config
import tgbot.handlers as handlers
2021-01-03 01:25:04 +03:00
storage = MemoryStorage()
telegram_bot = Bot(token=config.TELEGRAM_BOT_TOKEN)
dp = Dispatcher(telegram_bot, storage=storage)
2021-01-30 13:01:05 +03:00
async def database_init():
if config.MYSQL_HOST is not None:
db_url = f"mysql://{config.MYSQL_USER}:{config.MYSQL_PASSWORD}@" \
f"{config.MYSQL_HOST}:{config.MYSQL_PORT}/{config.MYSQL_DATABASE}"
else:
db_url = "sqlite://db.sqlite3"
try:
await Tortoise.init(
db_url=db_url,
modules={
'models': ['tgbot.models']
}
)
except DBConnectionError:
logger.error("Connection to database failed.")
await sleep(10)
await database_init()
2021-01-30 13:01:05 +03:00
await Tortoise.generate_schemas()
logger.info("Tortoise inited!")
2021-01-03 01:25:04 +03:00
2021-01-30 13:01:05 +03:00
async def on_startup(disp: Dispatcher):
await database_init()
handlers.default.setup(disp)
2021-01-30 13:34:08 +03:00
disp.middleware.setup(ThrottlingMiddleware())
2021-01-30 13:01:05 +03:00
disp.middleware.setup(WriteCommandMetric())
disp.middleware.setup(LoggingMiddleware())
disp.middleware.setup(UserMiddleware())
2021-01-03 01:25:04 +03:00
if __name__ == '__main__':
2021-01-30 13:01:05 +03:00
executor.start_polling(dp, skip_updates=True, on_startup=on_startup)