Add shortcut commands for alerts, backup, docker, openwrt

This commit is contained in:
2026-02-08 23:01:33 +03:00
parent 77571da4d9
commit 2ee9756d12
4 changed files with 69 additions and 19 deletions

View File

@@ -20,20 +20,13 @@ HELP_TEXT = (
) )
@dp.message(F.text.startswith("/alerts")) def _dispatch(msg: Message, action: str, args: list[str]):
async def alerts_cmd(msg: Message): return {"action": action, "args": args}
if not is_admin_msg(msg):
return
parts = msg.text.split()
if len(parts) < 2:
await msg.answer(HELP_TEXT)
return
action = parts[1].lower()
async def _handle_alerts(msg: Message, action: str, args: list[str]):
if action == "test": if action == "test":
level = parts[2].lower() if len(parts) >= 3 else "info" level = args[0].lower() if args else "info"
if level not in ("critical", "warn", "info"): if level not in ("critical", "warn", "info"):
level = "info" level = "info"
key = f"test:{level}:{int(time.time())}" key = f"test:{level}:{int(time.time())}"
@@ -42,14 +35,14 @@ async def alerts_cmd(msg: Message):
return return
if action == "mute": if action == "mute":
if len(parts) < 3: if len(args) < 1:
await msg.answer("Usage: /alerts mute <category> <minutes>") await msg.answer("Usage: /alerts mute <category> <minutes>")
return return
category = parts[2].lower() category = args[0].lower()
minutes = 60 minutes = 60
if len(parts) >= 4: if len(args) >= 2:
try: try:
minutes = max(1, int(parts[3])) minutes = max(1, int(args[1]))
except ValueError: except ValueError:
minutes = 60 minutes = 60
until = set_mute(category, minutes * 60) until = set_mute(category, minutes * 60)
@@ -58,10 +51,10 @@ async def alerts_cmd(msg: Message):
return return
if action == "unmute": if action == "unmute":
if len(parts) < 3: if len(args) < 1:
await msg.answer("Usage: /alerts unmute <category>") await msg.answer("Usage: /alerts unmute <category>")
return return
category = parts[2].lower() category = args[0].lower()
clear_mute(category) clear_mute(category)
await msg.answer(f"🔔 Unmuted {category}") await msg.answer(f"🔔 Unmuted {category}")
return return
@@ -80,9 +73,9 @@ async def alerts_cmd(msg: Message):
if action == "recent": if action == "recent":
hours = 24 hours = 24
if len(parts) >= 3: if args:
try: try:
hours = max(1, int(parts[2])) hours = max(1, int(args[0]))
except ValueError: except ValueError:
hours = 24 hours = 24
rows = read_recent(cfg, hours, limit=50) rows = read_recent(cfg, hours, limit=50)
@@ -93,3 +86,41 @@ async def alerts_cmd(msg: Message):
return return
await msg.answer(HELP_TEXT) await msg.answer(HELP_TEXT)
@dp.message(F.text.startswith("/alerts"))
async def alerts_cmd(msg: Message):
if not is_admin_msg(msg):
return
parts = msg.text.split()
if len(parts) < 2:
await msg.answer(HELP_TEXT)
return
action = parts[1].lower()
args = parts[2:]
if action == "test":
await _handle_alerts(msg, action, args)
@dp.message(F.text == "/alerts_list")
async def alerts_list(msg: Message):
if not is_admin_msg(msg):
return
await _handle_alerts(msg, "list", [])
@dp.message(F.text == "/alerts_recent")
async def alerts_recent(msg: Message):
if not is_admin_msg(msg):
return
await _handle_alerts(msg, "recent", ["24"])
@dp.message(F.text == "/alerts_mute_load")
async def alerts_mute_load(msg: Message):
if not is_admin_msg(msg):
return
await _handle_alerts(msg, "mute", ["load", "60"])

View File

@@ -328,6 +328,12 @@ async def br(msg: Message):
await cmd_backup_now(msg) await cmd_backup_now(msg)
@dp.message(F.text == "/backup_run")
async def br_cmd(msg: Message):
if is_admin_msg(msg):
await cmd_backup_now(msg)
@dp.message(F.text == "🧪 Restic check") @dp.message(F.text == "🧪 Restic check")
async def rc(msg: Message): async def rc(msg: Message):
if not is_admin_msg(msg): if not is_admin_msg(msg):

View File

@@ -77,6 +77,12 @@ async def ds(msg: Message):
await cmd_docker_status(msg) await cmd_docker_status(msg)
@dp.message(F.text == "/docker_status")
async def ds_cmd(msg: Message):
if is_admin_msg(msg):
await cmd_docker_status(msg)
@dp.message(F.text == "📈 Stats") @dp.message(F.text == "📈 Stats")
async def dstats(msg: Message): async def dstats(msg: Message):
if not is_admin_msg(msg): if not is_admin_msg(msg):

View File

@@ -212,6 +212,13 @@ async def openwrt_status(msg: Message):
asyncio.create_task(worker()) asyncio.create_task(worker())
@dp.message(F.text == "/openwrt")
async def openwrt_cmd(msg: Message):
if not is_admin_msg(msg):
return
await openwrt_status(msg)
@dp.message(F.text == "🧾 Audit") @dp.message(F.text == "🧾 Audit")
async def audit_log(msg: Message): async def audit_log(msg: Message):
if not is_admin_msg(msg): if not is_admin_msg(msg):