НИИГрам: media/voip/status delivery and layer workarounds

Gzip RPC so session AOT does not drop TUser; live status push; call/edit handlers; LocalMediaStore.
This commit is contained in:
НИИГрам
2026-08-21 08:03:22 +00:00
parent 7eba907952
commit aa105c0fb3
34 changed files with 2766 additions and 2444 deletions

View File

@@ -0,0 +1,41 @@
#!/usr/bin/env python3
"""Import a public Telegram sticker pack via Bot API into local Mongo+MinIO.
Usage: BOT_TOKEN=123:abc python3 import-telegram-sticker-pack.py in_DHAIDC_by_NaiDrawBot
"""
import os, sys, json, time, hashlib, io, urllib.request
from pathlib import Path
def api(token, method, **params):
q = "&".join(f"{k}={urllib.request.quote(str(v))}" for k,v in params.items())
url = f"https://api.telegram.org/bot{token}/{method}?{q}"
with urllib.request.urlopen(url, timeout=60) as r:
data = json.loads(r.read().decode())
if not data.get("ok"):
raise SystemExit(data)
return data["result"]
def main():
token = os.environ.get("BOT_TOKEN") or os.environ.get("TELEGRAM_BOT_TOKEN")
if not token:
sys.exit("Set BOT_TOKEN to a Telegram Bot API token")
name = sys.argv[1] if len(sys.argv)>1 else "in_DHAIDC_by_NaiDrawBot"
sset = api(token, "getStickerSet", name=name)
print("pack", sset.get("title"), "count", len(sset.get("stickers") or []))
out = Path("/tmp/sticker-import")/name
out.mkdir(parents=True, exist_ok=True)
meta=[]
for i,st in enumerate(sset.get("stickers") or []):
file_id = st["file_id"]
emoji = st.get("emoji") or "😀"
f = api(token, "getFile", file_id=file_id)
path = f.get("file_path")
url = f"https://api.telegram.org/file/bot{token}/{path}"
ext = Path(path).suffix or ".webp"
dest = out / f"{i:03d}_{emoji}{ext}"
urllib.request.urlretrieve(url, dest)
meta.append({"emoji": emoji, "file": str(dest), "is_animated": st.get("is_animated"), "is_video": st.get("is_video")})
print("saved", dest)
(out/"manifest.json").write_text(json.dumps({"title": sset.get("title"), "name": name, "stickers": meta}, ensure_ascii=False, indent=2))
print("done", out)
if __name__=="__main__":
main()