generated from FOSS/Bot-Template
feat(admin): add admin panel and reminder system
This commit is contained in:
@@ -7,7 +7,13 @@ from aiogram import Bot, Dispatcher
|
||||
from aiogram.client.default import DefaultBotProperties
|
||||
from aiogram.enums import ParseMode
|
||||
|
||||
from tgbot.data.config import BOT_DATABASE_EXPORT, BOT_TOKEN, BOT_SCHEDULER, get_admins, validate_bot_config
|
||||
from tgbot.data.config import (
|
||||
BOT_DATABASE_EXPORT,
|
||||
BOT_TOKEN,
|
||||
BOT_SCHEDULER,
|
||||
get_admins,
|
||||
validate_bot_config,
|
||||
)
|
||||
from tgbot.database.core import close_database
|
||||
from tgbot.database.repository import prepare_database
|
||||
from tgbot.middlewares import register_all_middlewares
|
||||
@@ -17,7 +23,7 @@ from tgbot.utils.misc.bot_commands import set_commands
|
||||
from tgbot.utils.misc.bot_logging import bot_logger
|
||||
from tgbot.utils.misc_functions import autobackup_admin, startup_notify
|
||||
|
||||
# Включаем мгновенный вывод print() без flush=True в каждом вызове
|
||||
|
||||
def configure_console_output() -> None:
|
||||
for stream in (sys.stdout, sys.stderr):
|
||||
if hasattr(stream, "reconfigure"):
|
||||
@@ -29,7 +35,7 @@ colorama.init()
|
||||
|
||||
|
||||
# Запуск задач по расписанию
|
||||
async def scheduler_start(bot):
|
||||
async def scheduler_start(bot: Bot) -> None:
|
||||
if BOT_DATABASE_EXPORT:
|
||||
BOT_SCHEDULER.add_job(
|
||||
autobackup_admin,
|
||||
@@ -42,6 +48,20 @@ async def scheduler_start(bot):
|
||||
misfire_grace_time=60,
|
||||
)
|
||||
|
||||
# Проверяем очередь напоминаний каждые 30 минут
|
||||
from tgbot.routers.channel_requests import send_reminders
|
||||
|
||||
BOT_SCHEDULER.add_job(
|
||||
send_reminders,
|
||||
trigger="interval",
|
||||
minutes=30,
|
||||
args=(bot,),
|
||||
id="send_reminders",
|
||||
replace_existing=True,
|
||||
coalesce=True,
|
||||
misfire_grace_time=120,
|
||||
)
|
||||
|
||||
if not BOT_SCHEDULER.running:
|
||||
BOT_SCHEDULER.start()
|
||||
|
||||
@@ -49,39 +69,41 @@ async def scheduler_start(bot):
|
||||
# Запуск бота и базовой обвязки
|
||||
async def main():
|
||||
validate_bot_config()
|
||||
await prepare_database() # Проверка готовности БД
|
||||
await prepare_database()
|
||||
|
||||
dp = Dispatcher() # Диспетчер событий
|
||||
arSession = AsyncRequestSession() # Общая сессия aiohttp
|
||||
dp = Dispatcher()
|
||||
arSession = AsyncRequestSession()
|
||||
|
||||
bot = Bot( # Образ Бота
|
||||
bot = Bot(
|
||||
token=BOT_TOKEN,
|
||||
default=DefaultBotProperties(
|
||||
parse_mode=ParseMode.HTML
|
||||
parse_mode=ParseMode.HTML, link_preview_is_disabled=True
|
||||
),
|
||||
)
|
||||
|
||||
register_all_middlewares(dp) # Подключение мидлварей
|
||||
register_all_routers(dp) # Подключение роутера
|
||||
register_all_middlewares(dp)
|
||||
register_all_routers(dp)
|
||||
|
||||
try:
|
||||
await set_commands(bot) # Обновление команды в Telegram
|
||||
await startup_notify(bot) # Сообщаем админам о старте
|
||||
await scheduler_start(bot) # Подключение задач по расписанию
|
||||
await set_commands(bot)
|
||||
await startup_notify(bot)
|
||||
await scheduler_start(bot)
|
||||
|
||||
bot_info = await bot.get_me()
|
||||
bot_logger.info("Бот запущен: @%s", bot_info.username)
|
||||
print(colorama.Fore.LIGHTYELLOW_EX + f"~~~~~ Бот запущен - @{bot_info.username} ~~~~~")
|
||||
print(
|
||||
colorama.Fore.LIGHTYELLOW_EX
|
||||
+ f"~~~~~ Бот запущен - @{bot_info.username} ~~~~~"
|
||||
)
|
||||
print(colorama.Fore.LIGHTBLUE_EX + "~~~~~ TG developer - @djimbox ~~~~~")
|
||||
print(colorama.Fore.RESET)
|
||||
|
||||
if len(get_admins()) == 0:
|
||||
print("***** УКАЖИТЕ BOT_ADMIN_IDS В .env *****")
|
||||
|
||||
await bot.delete_webhook() # Сбрасывание вебхука, если он был
|
||||
await bot.get_updates(offset=-1) # Чистка старых апдейтов
|
||||
await bot.delete_webhook()
|
||||
await bot.get_updates(offset=-1)
|
||||
|
||||
# Запуск бота (polling режим)
|
||||
await dp.start_polling(
|
||||
bot,
|
||||
arSession=arSession,
|
||||
@@ -91,9 +113,9 @@ async def main():
|
||||
if BOT_SCHEDULER.running:
|
||||
BOT_SCHEDULER.shutdown(wait=False)
|
||||
|
||||
await arSession.close() # Закрытие сессии aiohttp
|
||||
await bot.session.close() # Закрытие сессии API Telegram
|
||||
await close_database() # Закрытие соединений с БД
|
||||
await arSession.close()
|
||||
await bot.session.close()
|
||||
await close_database()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user