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("msg_id", help="id входящего (m-NNN)")
|
||||||
p_tgt.add_argument("--force", action="store_true", help="перерасшифровать заново")
|
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_lad = sub.add_parser("ladder", help="срез лестницы: уровни, занятость, задачи, эскалации")
|
||||||
p_not = sub.add_parser("tg-notify", help="отправить сообщение в чат харнеса (уведомление)")
|
p_not = sub.add_parser("tg-notify", help="отправить сообщение в чат харнеса (уведомление)")
|
||||||
p_not.add_argument("text")
|
p_not.add_argument("text")
|
||||||
|
|
@ -153,6 +159,28 @@ def main():
|
||||||
print(f"ПУСТО (engine={engine})"
|
print(f"ПУСТО (engine={engine})"
|
||||||
+ (f", причина: {reason}" if reason else "")
|
+ (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":
|
elif args.cmd == "ladder":
|
||||||
es.init_db()
|
es.init_db()
|
||||||
from harness import tg_inbox
|
from harness import tg_inbox
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue