fix: setMyCommands без HTTP 400 (t-261004160532-690fcb) — имена команд обязаны быть [a-z0-9_] (тело ошибки: BOT_COMMAND_INVALID), регистрируем сразу единственно валидную комбинацию latin-имя + кириллическая подпись; кириллица доступна через алиасы-парсер; live: регистрация (cyrillic) без 400, журнал чист

This commit is contained in:
Simbiot Harness 2026-10-04 17:13:46 +00:00
parent ef87007472
commit 5ca2bbe96c

View file

@ -208,9 +208,21 @@ def commands_spec(latin: bool = False) -> list:
def register_bot_commands():
"""setMyCommands: сначала кириллица, при отказе — транслит.
"""setMyCommands: latin-имена + кириллические подписи (без 400-пробы).
Возвращает 'cyrillic' | 'latin' | None (нет токена/не удалось).
Telegram Bot API принимает в ИМЕНАХ команд только [a-z0-9_]:
кириллическое имя → 400 BOT_COMMAND_INVALID (подтверждено телом
ошибки API, t-261004160532-690fcb) — «сначала кириллица, потом
фолбэк» гарантированно падал первым вызовом при каждом старте.
В описаниях кириллица валидна, поэтому регистрируем сразу
единственно возможную комбинацию: latin-имя + кириллическая
подпись — именно её юзер и видит в меню «/».
Кириллицей команды остаются доступными и без меню: парсер
_ALIASES понимает слова «лестница», «статус», «задачи»,
«помощь» (без слэша) и /лестница-подобные токены.
Возвращает 'cyrillic' (подписи кириллицей — то, что видит юзер)
или None (нет токена / не удалось).
Повторный вызов идемпотентен — перезапишет список тем же содержимым.
"""
from . import tg_inbox
@ -219,17 +231,12 @@ def register_bot_commands():
return None
try:
r = tg_inbox._api("setMyCommands",
{"commands": json.dumps(commands_spec(), ensure_ascii=False)})
{"commands": json.dumps(commands_spec(latin=True), ensure_ascii=False)})
if r.get("ok"):
return "cyrillic"
raise RuntimeError(str(r)[:200])
print(f"[tg-cmd] setMyCommands отклонён: {str(r)[:200]}", flush=True)
except Exception as e:
print(f"[tg-cmd] setMyCommands: кириллица не принята ({e}) — пробую транслит", flush=True)
try:
r = tg_inbox._api("setMyCommands",
{"commands": json.dumps(commands_spec(latin=True), ensure_ascii=False)})
return "latin" if r.get("ok") else None
except Exception:
print(f"[tg-cmd] setMyCommands error: {e}", flush=True)
return None