From 20cd56a8c0ff22b58f5d11487f68864bd275a449 Mon Sep 17 00:00:00 2001 From: benya Date: Sun, 8 Feb 2026 23:07:39 +0300 Subject: [PATCH] Add inline alerts menu with callbacks --- handlers/alerts_admin.py | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/handlers/alerts_admin.py b/handlers/alerts_admin.py index ab89b1b..e59daa3 100644 --- a/handlers/alerts_admin.py +++ b/handlers/alerts_admin.py @@ -1,7 +1,7 @@ import time from datetime import datetime, timedelta, timezone from aiogram import F -from aiogram.types import Message +from aiogram.types import Message, CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton from app import dp, bot, cfg, ADMIN_ID from auth import is_admin_msg from services.alert_mute import set_mute, clear_mute, list_mutes @@ -88,6 +88,25 @@ async def _handle_alerts(msg: Message, action: str, args: list[str]): await msg.answer(HELP_TEXT) +ALERTS_KB = InlineKeyboardMarkup( + inline_keyboard=[ + [ + InlineKeyboardButton(text="List", callback_data="alerts:list"), + InlineKeyboardButton(text="Recent 24h", callback_data="alerts:recent:24"), + ], + [ + InlineKeyboardButton(text="Mute load 60m", callback_data="alerts:mute:load:60"), + InlineKeyboardButton(text="Unmute load", callback_data="alerts:unmute:load"), + ], + [ + InlineKeyboardButton(text="Test CRIT", callback_data="alerts:test:critical"), + InlineKeyboardButton(text="Test WARN", callback_data="alerts:test:warn"), + InlineKeyboardButton(text="Test INFO", callback_data="alerts:test:info"), + ], + ] +) + + @dp.message(F.text.startswith("/alerts")) async def alerts_cmd(msg: Message): if not is_admin_msg(msg): @@ -95,7 +114,7 @@ async def alerts_cmd(msg: Message): parts = msg.text.split() if len(parts) < 2: - await msg.answer(HELP_TEXT) + await msg.answer(HELP_TEXT, reply_markup=ALERTS_KB) return action = parts[1].lower() @@ -122,3 +141,19 @@ async def alerts_mute_load(msg: Message): if not is_admin_msg(msg): return await _handle_alerts(msg, "mute", ["load", "60"]) + + +@dp.callback_query(F.data.startswith("alerts:")) +async def alerts_cb(cb: CallbackQuery): + if cb.from_user.id != ADMIN_ID: + await cb.answer() + return + parts = cb.data.split(":") + # formats: alerts:action or alerts:action:arg1:arg2 + if len(parts) < 2: + await cb.answer() + return + action = parts[1] + args = parts[2:] if len(parts) > 2 else [] + await _handle_alerts(cb.message, action, args) + await cb.answer()