add restart storage

This commit is contained in:
Yuriy Yuriev
2026-05-23 00:07:44 +07:00
parent 68275386bf
commit 406a58c585
6 changed files with 384 additions and 18 deletions
+16 -17
View File
@@ -113,25 +113,25 @@ class BotApplication:
async def _restore_tasks(self):
"""Восстанавливает задачи после перезапуска."""
saved_tasks = await self.storage.load_tasks()
if not saved_tasks:
logger.info("No tasks to restore")
return
restored = 0
notify_users: dict = {} # user_id -> chat_id
# user_id -> (chat_id, was_paused)
notify_users: dict = {}
for task_id, params in saved_tasks.items():
# Завершённые и остановленные — загружаем в память но не запускаем
# Завершённые и остановленные — только в память, не запускаем
if params.completed or params.stopped:
await self.interface.task_manager.add_task(task_id, params)
continue
# Активные задачи ставим на паузу и перезапускаем
# Если стрим был оффлайн — сохраняем этот статус
params.paused = True
was_paused = params.paused # сохраняем намерение пользователя
if params.stream_offline:
logger.info(f"Task {task_id}: stream was offline, keeping paused")
await self.interface.task_manager.add_task(task_id, params)
if params.task_type == "twitch_irc" and params.chat_id:
@@ -156,20 +156,19 @@ class BotApplication:
restored += 1
if params.user_id and params.chat_id:
notify_users[params.user_id] = params.chat_id
notify_users[params.user_id] = (params.chat_id, was_paused)
# Уведомляем пользователей о рестарте
for uid, chat_id in notify_users.items():
# Уведомляем пользователей разные сообщения для паузы и активных задач
for uid, (chat_id, was_paused) in notify_users.items():
try:
await self.bot.send_message(
chat_id,
"🔄 Бот был перезапущен\n\n"
"Ваши задачи приостановлены.\n"
"Нажмите ▶️ в списке задач для возобновления."
)
if was_paused:
msg = "🔄 Бот был перезапущен\n\n⏸ Ваша задача остаётся на паузе."
else:
msg = "🔄 Бот был перезапущен\n\n▶️ Ваши задачи продолжают работу автоматически."
await self.bot.send_message(chat_id, msg)
except Exception as e:
logger.warning(f"Failed to notify user {uid}: {e}")
logger.info(f"🔄 Restored {restored} tasks")
async def start(self):