diff --git a/cli.py b/cli.py index a7f67aa..916bb4e 100644 --- a/cli.py +++ b/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