From c270d6648796030dff358514e887a8b0192a51ed Mon Sep 17 00:00:00 2001 From: Verum Date: Tue, 31 Mar 2026 15:59:35 +0700 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BD=D0=BE=D0=BF=D0=BE=D1=87=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B8=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/glitchup_bot/bot/handlers/commands.py | 31 +++++++++++++++++++++-- src/glitchup_bot/bot/keyboards.py | 3 +-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/glitchup_bot/bot/handlers/commands.py b/src/glitchup_bot/bot/handlers/commands.py index c44edfa..3556ed1 100644 --- a/src/glitchup_bot/bot/handlers/commands.py +++ b/src/glitchup_bot/bot/handlers/commands.py @@ -782,7 +782,7 @@ async def cb_admin_actions(callback: CallbackQuery) -> None: if action == "menu:sync": await _show_callback_screen( callback, - _admin_sync_text(), + await _admin_sync_text(), reply_markup=admin_sync_keyboard(), ) return @@ -909,7 +909,7 @@ async def cb_admin_actions(callback: CallbackQuery) -> None: await reload_scheduler() await _show_callback_screen( callback, - _admin_sync_text(), + await _admin_sync_text(), reply_markup=admin_sync_keyboard(), ) return @@ -1733,3 +1733,30 @@ async def cmd_mute_del(message: Message) -> None: return await message.answer("Mute rule удалено.") +async def _admin_sync_text() -> str: + runtime = await get_runtime_settings() + state = await get_last_sync_state("api_sync") + last_sync = ( + state.last_successful_at.astimezone().strftime("%Y-%m-%d %H:%M") + if state and state.last_successful_at + else "ещё не было" + ) + status = "данные загружены" if state and state.last_successful_at else "данных пока нет" + auto_sync = "ВКЛ" if runtime.sync_enabled else "ВЫКЛ" + digest_time = ( + f"{runtime.digest_cron_day} " + f"{runtime.digest_cron_hour:02d}:{runtime.digest_cron_minute:02d}" + ) + return "\n".join( + [ + "Синхронизация", + f"Авто-синхронизация: {auto_sync}", + f"Статус: {status}", + f"Последняя синхронизация: {escape(last_sync)}", + f"Интервал sync: {runtime.sync_interval_minutes} мин", + f"Отчёт: {escape(digest_time)}", + "", + "Синхронизация подтягивает актуальные issues из GlitchTip в локальный кэш бота.", + "Здесь запускается ручной sync и настраивается расписание обновления и отчёта.", + ] + ) diff --git a/src/glitchup_bot/bot/keyboards.py b/src/glitchup_bot/bot/keyboards.py index c0e8f8b..cd34f63 100644 --- a/src/glitchup_bot/bot/keyboards.py +++ b/src/glitchup_bot/bot/keyboards.py @@ -75,13 +75,12 @@ def admin_home_keyboard() -> InlineKeyboardMarkup: def admin_sync_keyboard() -> InlineKeyboardMarkup: builder = InlineKeyboardBuilder() builder.button(text="Запустить sync", callback_data="admin:sync") - builder.button(text="Статус sync", callback_data="admin:sync_status") builder.button(text="Автосинк: вкл/выкл", callback_data="admin:settings:sync_enabled") builder.button(text="Интервал sync", callback_data="admin:settings:sync_interval") builder.button(text="День отчёта", callback_data="admin:settings:digest_day") builder.button(text="Время отчёта", callback_data="admin:settings:digest_time") builder.button(text="Назад", callback_data="admin:open") - builder.adjust(2, 2, 2, 1) + builder.adjust(2, 2, 1, 1) return builder.as_markup()