fix: setMyCommands без HTTP 400 (t-261004160532-690fcb) — имена команд обязаны быть [a-z0-9_] (тело ошибки: BOT_COMMAND_INVALID), регистрируем сразу единственно валидную комбинацию latin-имя + кириллическая подпись; кириллица доступна через алиасы-парсер; live: регистрация (cyrillic) без 400, журнал чист
This commit is contained in:
parent
ef87007472
commit
5ca2bbe96c
1 changed files with 18 additions and 11 deletions
|
|
@ -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,18 +231,13 @@ 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:
|
||||
return None
|
||||
print(f"[tg-cmd] setMyCommands error: {e}", flush=True)
|
||||
return None
|
||||
|
||||
|
||||
def get_my_commands() -> list:
|
||||
|
|
|
|||
Loading…
Reference in a new issue