72 lines
2.2 KiB
Python
Executable file
72 lines
2.2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
import urllib.parse
|
|
import urllib.request
|
|
from pathlib import Path
|
|
|
|
|
|
def load_env_file(path: Path) -> None:
|
|
if not path.exists():
|
|
return
|
|
for raw_line in path.read_text(encoding="utf-8").splitlines():
|
|
line = raw_line.strip()
|
|
if not line or line.startswith("#") or "=" not in line:
|
|
continue
|
|
key, value = line.split("=", 1)
|
|
key = key.strip()
|
|
if not key:
|
|
continue
|
|
# сохраняем первое значение и игнорируем shell-комментарий после пробела
|
|
value = value.split(" #", 1)[0].strip()
|
|
if key not in os.environ:
|
|
os.environ[key] = value
|
|
|
|
|
|
def api_call(token: str, method: str, payload: dict) -> dict:
|
|
url = f"https://api.telegram.org/bot{token}/{method}"
|
|
data = json.dumps(payload).encode("utf-8")
|
|
req = urllib.request.Request(url, data=data, headers={"Content-Type": "application/json"}, method="POST")
|
|
with urllib.request.urlopen(req, timeout=20) as resp:
|
|
return json.loads(resp.read().decode("utf-8"))
|
|
|
|
|
|
def main() -> int:
|
|
root = Path(__file__).resolve().parents[1]
|
|
load_env_file(root / ".env")
|
|
|
|
token = os.getenv("BOT_TOKEN", "").strip()
|
|
webapp_url = os.getenv("WEBAPP_URL", "").strip()
|
|
if not token:
|
|
print("BOT_TOKEN пустой в .env", file=sys.stderr)
|
|
return 1
|
|
if not webapp_url:
|
|
print("WEBAPP_URL пустой в .env", file=sys.stderr)
|
|
return 1
|
|
|
|
parsed = urllib.parse.urlparse(webapp_url)
|
|
if parsed.scheme != "https":
|
|
print("WEBAPP_URL должен быть https", file=sys.stderr)
|
|
return 1
|
|
|
|
payload = {
|
|
"menu_button": {
|
|
"type": "web_app",
|
|
"text": "Mini App",
|
|
"web_app": {"url": webapp_url},
|
|
}
|
|
}
|
|
result = api_call(token, "setChatMenuButton", payload)
|
|
if not result.get("ok"):
|
|
print(f"setChatMenuButton failed: {result}", file=sys.stderr)
|
|
return 1
|
|
|
|
print(f"Menu button updated: {webapp_url}")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|