feat(bot): /tag и /типы — счётчики типов и топ по типу, доступны в read-only режиме; тест (20 passed)
Some checks failed
ci / test (3.10) (push) Has been cancelled
ci / test (3.11) (push) Has been cancelled
ci / test (3.12) (push) Has been cancelled

This commit is contained in:
Vlad Gothbreach
2026-10-26 21:13:18 +03:00
parent eaedd37bcd
commit 74d968ab2d
2 changed files with 36 additions and 3 deletions

View File

@@ -1,7 +1,7 @@
"""Telegram-бот поверх парсера: лента, абузы, источники, прогон, автодобавление.
Запуск: OMNI_BOT_TOKEN=... python -m omni.bot
Доступ: OMNI_BOT_OWNERS=<id>,<id> (пусто = read-only: /new /abuse /find /src /stats)
Доступ: OMNI_BOT_OWNERS=<id>,<id> (пусто = read-only: /new /abuse /find /src /stats /tag)
Бот не постит никуда сам: только отвечает в личный чат тем, кто в списке.
Команды:
@@ -490,13 +490,34 @@ def pusher(every=300):
print("pusher fail", e, flush=True)
READONLY_CMDS = {"/start", "/help", "/new", "/abuse", "/find", "/src", "/stats"}
READONLY_CMDS = {"/start", "/help", "/new", "/abuse", "/find", "/src", "/stats",
"/tag", "/типы", "/sum", "/tr"}
def cmd_tag(chat_id, arg):
"""Типы записей: /tag — счётчики, /tag leak — топ записей этого типа."""
from . import taxonomy
t = arg.strip().lower()
if not t:
counts = store.type_counts()
rows = sorted(counts.items(), key=lambda x: -x[1])[:14]
body = "\n".join("%-12s %d" % (taxonomy.LABELS.get(k, k), v) for k, v in rows)
return _send(chat_id, "<b>типы записей</b>\n<pre>%s</pre>\n/tag &lt;тип&gt; — топ"
% _esc(body), reply_markup=KB_MAIN)
if t not in taxonomy.LABELS:
return _send(chat_id, "нет такого типа: %s" % _esc(t), reply_markup=KB_MAIN)
items, total = store.browse2(limit=8, sort="score", typ=t)
if not items:
return _send(chat_id, "по типу %s пусто" % _esc(t), reply_markup=KB_MAIN)
head = "<b>%s</b> · всего %d\n\n" % (_esc(taxonomy.LABELS.get(t, t)), total)
_send(chat_id, head + "\n\n".join(fmt_item(i) for i in items), reply_markup=KB_MAIN)
CMDS = {"/start": cmd_start, "/help": cmd_start, "/new": cmd_new, "/abuse": cmd_abuse,
"/find": cmd_find, "/src": cmd_src, "/add": cmd_add, "/run": cmd_run,
"/auto": cmd_auto, "/stats": cmd_stats,
"/sub": cmd_sub, "/unsub": cmd_unsub, "/subs": cmd_subs,
"/post": cmd_test, "/sum": cmd_sum, "/tr": cmd_tr}
"/post": cmd_test, "/sum": cmd_sum, "/tr": cmd_tr, "/tag": cmd_tag, "/типы": cmd_tag}
def handle(update):