REPOSITORY / ScuroNeko/Laniakea

Wiki

KNOWLEDGE REPOSITORY
3
MessageContext RU
ScuroNeko edited this page 2026-08-19 14:59:10 +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.

MessageContext RU

English version: MessageContext

Это краткая русскоязычная версия страницы про MessageContext. Полная и наиболее актуальная страница: MessageContext.

Что такое MessageContext

MessageContext — это объект времени выполнения, который приходит в:

  • обработчики команд;
  • обработчики данных callback;
  • middleware;
  • обработчики обновлений.

Через него ты получаешь:

  • входящее обновление;
  • текущее сообщение и отправителя;
  • разобранные аргументы команд и callback;
  • вспомогательные методы для reply, edit, delete, callback, drafts и localization.

Полную матрицу маршрутизации и гарантий по полям MessageContext для разных update types смотри в Update-Routing-Model-RU.

Поля, которые используются чаще всего

Text

ctx.Text — это текст после имени команды.

Пример:

  • вход: /echo hello world
  • команда: echo
  • ctx.Text == "hello world"

Args

ctx.Args — разбитая на токены версия ctx.Text.

Пример:

  • ctx.Text == "hello world"
  • ctx.Args == []string{"hello", "world"}

Msg

ctx.Msg указывает на текущее Telegram message, если у текущего update оно есть.

Полезно для:

  • chat ID;
  • thread ID;
  • доступа к metadata исходного сообщения.

From и FromID

ctx.From — текущий user, если он есть.

ctx.FromID — тот же ID, но уже вынесенный для удобства.

Основные вспомогательные методы

Answer(...)

Базовый вспомогательный метод для обычного текстового ответа.

AnswerLong(...)

Используется, когда текст может превысить Telegram message limit.

Это отдельный API специально для явной семантики многочастного ответа.

Keyboard(...)

Отправляет текст вместе с inline keyboard.

KeyboardLong(...)

Подходит для длинного текста, где клавиатура должна остаться на последней части.

Markdown-вспомогательные методы

Есть ...Markdown варианты:

  • AnswerMarkdown(...)
  • KeyboardMarkdown(...)
  • EditCallbackMarkdown(...)

Важно:

  • пользовательский ввод нужно экранировать через EscapeMarkdownV2(...).

Вспомогательные методы для edit и delete

Если у тебя уже есть AnswerMessage, его можно:

  • редактировать;
  • удалять;
  • менять caption.

Это удобно для пошагового UX вроде “Working... -> Done”.

Callback-специфичные вспомогательные методы

В потоке callback особенно полезны:

  • EditCallback(...)
  • AnswerCallback()
  • AnswerCallbackText(...)
  • AnswerCallbackAlert(...)
  • AnswerCallbackURL(...)
  • CallbackDelete()

Они покрывают самые частые callback-сценарии без ручного хождения в tgapi.

Rich-сообщения

RichAnswer(...) и RichAnswerKeyboard(...) валидируют и отправляют input rich-блоки Bot API 10.2, собранные через tgrich:

ctx.RichAnswer(
	tgrich.H1(tgrich.Text("Отчёт")),
	tgrich.P(tgrich.Bold(tgrich.Text("всё работает"))),
)

Все конструкторы, загрузка медиа, валидация и приёмная сторона описаны на странице Rich-Messages-RU.

Drafts и localization

У MessageContext есть:

  • NewDraft()
  • NewDraftMarkdown()
  • Translate(key)

Это делает MessageContext основной удобной точкой доступа почти для всего кода обработчиков.

NewInlineKeyboard(...)

Внутри обработчиков keyboard обычно удобнее всего строить так:

kb := ctx.NewInlineKeyboard(2)

Этот builder автоматически наследует текущую политику данных callback из контекста.

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