diff --git a/harness/tg_commands.py b/harness/tg_commands.py index 4378393..9aaeb56 100644 --- a/harness/tg_commands.py +++ b/harness/tg_commands.py @@ -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: