Harden bot against runtime stalls
This commit is contained in:
27
main.py
27
main.py
@@ -10,11 +10,12 @@ from aiogram import Bot, Dispatcher, Router, F
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
from aiogram.filters import Command
|
||||
from aiogram.fsm.storage.memory import MemoryStorage
|
||||
from aiogram.fsm.storage.redis import RedisStorage
|
||||
from aiogram.fsm.context import FSMContext
|
||||
|
||||
from src.filters.case_insensitive import CaseInsensitiveCommand
|
||||
|
||||
from src.core.config import BOT_TOKEN, LOG_LEVEL
|
||||
from src.core.config import BOT_TOKEN, LOG_LEVEL, REDIS_URL, USE_REDIS_STORAGE
|
||||
from src.core.database import async_session_maker
|
||||
from src.core.scheduler import bot_scheduler
|
||||
from src.container import container
|
||||
@@ -31,6 +32,7 @@ from src.handlers.message_management import message_admin_router
|
||||
from src.handlers.p2p_chat import router as p2p_chat_router
|
||||
from src.handlers.help_handlers import router as help_router
|
||||
from src.handlers.admin_emoji_handlers import router as admin_emoji_router
|
||||
from src.utils.task_manager import task_manager
|
||||
|
||||
# Настройка логирования
|
||||
logging.basicConfig(
|
||||
@@ -41,7 +43,22 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
# Создание бота и диспетчера
|
||||
bot = Bot(token=BOT_TOKEN)
|
||||
storage = MemoryStorage()
|
||||
|
||||
|
||||
def create_fsm_storage():
|
||||
if not USE_REDIS_STORAGE:
|
||||
logger.warning("FSM storage: используется MemoryStorage")
|
||||
return MemoryStorage()
|
||||
|
||||
try:
|
||||
logger.info("FSM storage: используется RedisStorage")
|
||||
return RedisStorage.from_url(REDIS_URL)
|
||||
except Exception as e:
|
||||
logger.error(f"Не удалось создать RedisStorage, используется MemoryStorage: {e}")
|
||||
return MemoryStorage()
|
||||
|
||||
|
||||
storage = create_fsm_storage()
|
||||
dp = Dispatcher(storage=storage)
|
||||
router = Router()
|
||||
|
||||
@@ -308,6 +325,9 @@ async def main():
|
||||
# Запускаем планировщик задач
|
||||
bot_scheduler.start()
|
||||
logger.info("Планировщик задач запущен")
|
||||
|
||||
await task_manager.start()
|
||||
logger.info("Менеджер фоновых задач запущен")
|
||||
|
||||
# Запускаем polling
|
||||
try:
|
||||
@@ -318,6 +338,9 @@ async def main():
|
||||
finally:
|
||||
# Останавливаем планировщик
|
||||
bot_scheduler.shutdown()
|
||||
await task_manager.stop()
|
||||
if hasattr(storage, "close"):
|
||||
await storage.close()
|
||||
await bot.session.close()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user