CLI: tg-list — список входящих TG (фильтр --new, лимит -n)
This commit is contained in:
parent
62e9d756d7
commit
5faf78fd09
1 changed files with 28 additions and 0 deletions
28
cli.py
28
cli.py
|
|
@ -45,6 +45,12 @@ def main():
|
|||
p_tgt.add_argument("msg_id", help="id входящего (m-NNN)")
|
||||
p_tgt.add_argument("--force", action="store_true", help="перерасшифровать заново")
|
||||
|
||||
p_tgl = sub.add_parser("tg-list", help="список входящих TG-сообщений (inbox)")
|
||||
p_tgl.add_argument("--new", action="store_true", help="только без ответа")
|
||||
p_tgl.add_argument("-n", "--limit", type=int, default=25,
|
||||
help="сколько последних показать")
|
||||
p_tgl.add_argument("--all", action="store_true", help="без ограничения по количеству")
|
||||
|
||||
p_lad = sub.add_parser("ladder", help="срез лестницы: уровни, занятость, задачи, эскалации")
|
||||
p_not = sub.add_parser("tg-notify", help="отправить сообщение в чат харнеса (уведомление)")
|
||||
p_not.add_argument("text")
|
||||
|
|
@ -153,6 +159,28 @@ def main():
|
|||
print(f"ПУСТО (engine={engine})"
|
||||
+ (f", причина: {reason}" if reason else "")
|
||||
+ " — транскрипт записан в стор как пустой")
|
||||
elif args.cmd == "tg-list":
|
||||
es.init_db()
|
||||
model = es.run_projections()
|
||||
inbox = model.get("inbox") or {}
|
||||
rows = sorted(inbox.items(),
|
||||
key=lambda kv: int(kv[0].split("-")[1]) if kv[0].split("-")[1].isdigit() else 10**9)
|
||||
total = len(rows)
|
||||
fresh = [kv for kv in rows if not kv[1].get("replied") and not kv[1].get("ignored")]
|
||||
print(f"всего: {total} | без ответа: {len(fresh)} | "
|
||||
f"отвечено: {sum(1 for _, v in rows if v.get('replied'))} | "
|
||||
f"ignored: {sum(1 for _, v in rows if v.get('ignored'))}")
|
||||
shown = [kv for kv in rows if not args.new or (not kv[1].get("replied") and not kv[1].get("ignored"))]
|
||||
if not args.all:
|
||||
shown = shown[-args.limit:]
|
||||
if not shown:
|
||||
print("(нет сообщений по фильтру)")
|
||||
for mid, v in shown:
|
||||
who = v.get("username") or v.get("from_name") or v.get("chat_id") or "?"
|
||||
st = ("replied" if v.get("replied") else "ignored" if v.get("ignored")
|
||||
else "transcribed" if v.get("transcribed") else "new")
|
||||
body = v.get("transcript") or v.get("text") or ""
|
||||
print(f"{mid:12} {str(who)[:12]:12} {st:11} {str(v.get('kind') or 'text'):5} {str(body)[:100]}")
|
||||
elif args.cmd == "ladder":
|
||||
es.init_db()
|
||||
from harness import tg_inbox
|
||||
|
|
|
|||
Loading…
Reference in a new issue