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():
|
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
|
from . import tg_inbox
|
||||||
|
|
@ -219,17 +231,12 @@ def register_bot_commands():
|
||||||
return None
|
return None
|
||||||
try:
|
try:
|
||||||
r = tg_inbox._api("setMyCommands",
|
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"):
|
if r.get("ok"):
|
||||||
return "cyrillic"
|
return "cyrillic"
|
||||||
raise RuntimeError(str(r)[:200])
|
print(f"[tg-cmd] setMyCommands отклонён: {str(r)[:200]}", flush=True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[tg-cmd] setMyCommands: кириллица не принята ({e}) — пробую транслит", flush=True)
|
print(f"[tg-cmd] setMyCommands error: {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
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue