REPOSITORY / ScuroNeko/Laniakea

Wiki

KNOWLEDGE REPOSITORY
5
Inline Keyboards and Payloads RU
ScuroNeko edited this page 2026-05-20 13:28:29 +03:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Inline Keyboards and Payloads RU

English version: Inline-Keyboards-and-Payloads

Это краткая русскоязычная версия страницы про inline-клавиатуры и данные callback. Полная и наиболее актуальная страница: Inline-Keyboards-and-Payloads.

Главное сначала

  • InlineKeyboard строит inline-клавиатуру ряд за рядом;
  • callback-кнопка хранит CallbackData с именем команды и аргументами;
  • данные callback могут кодироваться как JSON или Base64;
  • у бота есть тип данных callback по умолчанию;
  • конкретная клавиатура может переопределить его локально.

Как строить клавиатуру

Основные конструкторы:

  • NewInlineKeyboardJSON(maxRow)
  • NewInlineKeyboardBase64(maxRow)
  • NewInlineKeyboard(payloadType, maxRow)

Пример:

kb := laniakea.NewInlineKeyboardJSON(2).
	AddCallbackButton("Open", "open", 42).
	AddCallbackButton("Delete", "delete", 42).
	AddURLButton("Docs", "https://example.com/docs")

maxRow определяет, сколько кнопок автоматически помещается в один ряд.

Что такое данные callback

Данные callback логически содержат:

  • имя команды;
  • список строковых аргументов.

Ты обычно не собираешь JSON вручную. Вместо этого используешь:

  • AddCallbackButton(...)
  • AddCallbackButtonStyle(...)
  • NewCallbackData(...)

Все аргументы через fmt.Sprint превращаются в строки, поэтому в обработчике ты читаешь их через ctx.Args.

ctx.Args, а не ctx.Payload

В текущем API нет отдельного ctx.Payload.

В обработчике данных callback разобранные аргументы доступны через:

  • ctx.Args

А выбор обработчика происходит по имени callback-команды.

JSON vs Base64

BotPayloadJSON:

  • удобнее читать в логах и тестах;
  • проще отлаживать.

BotPayloadBase64:

  • более компактная транспортная форма;
  • выглядит более “непрозрачно” в callback data.

Логическая структура данных callback при этом одна и та же.

Строгое и терпимое декодирование

По умолчанию бот работает в терпимом режиме:

  • если основной декодер не сработал, может попробовать второй формат.

Строгий режим отключает этот запасной вариант:

bot.SetStrictPayloadType(true)

или через BotOpts.

Это полезно, если расхождение формата данных callback нужно считать настоящей ошибкой.

Локальное переопределение для клавиатуры

Даже если у бота есть тип данных callback по умолчанию, клавиатуру можно переопределить локально:

kb := ctx.NewInlineKeyboard(2).
	SetPayloadType(laniakea.BotPayloadJSON)

Это удобно для сценариев миграции или отладки.

KeyboardLong(...)

Если текст длинный, используй KeyboardLong(...).

Клавиатура прикрепляется только к последней части, чтобы не дублировать кнопки на каждом фрагменте.

Что читать дальше