Перейти к содержимому

Конструктор Сообщений (Message Builder)

Класс Message предоставляет удобный "текучий интерфейс" (fluent interface) для создания, форматирования и отправки сообщений. Вместо того чтобы собирать массив параметров вручную, вы можете выстраивать сообщение в виде цепочки вызовов, что делает код более чистым и читаемым.

Основы использования

Основной принцип — вы создаете экземпляр сообщения, настраиваете его с помощью различных методов и в конце вызываете метод отправки send() или редактирования editText(), editCaption() и т.д.

Простое текстовое сообщение

Это самый базовый пример. Метод $tg->msg() является фабрикой, которая создает и возвращает экземпляр класса Message.

php
$bot->onCommand('start')->func(function(ZG $tg) {
    $tg->msg("Привет, мир!")->send();
});

Цепочка вызовов (Chaining)

Сила конструктора в возможности объединять методы в цепочку. Например, отправим фото в ответ на сообщение пользователя.

php
$tg->msg("Вот ваше фото:")
   ->img('/path/to/image.jpg')  // Добавляем изображение
   ->reply()                    // Отвечаем на текущее сообщение
   ->send();                    // Отправляем

Основные методы

text(string $text)

Задает или изменяет основной текст сообщения или подпись к медиа.

php
$tg->msg("Начальный текст.")
   ->text("Текст изменен.") // Этот текст будет отправлен
   ->send();

parseMode(?string $mode)

Устанавливает режим форматирования текста.

Доступные режимы описаны в MessageParseMode

php
use ZenithGram\ZenithGram\Enums\MessageParseMode;

// Использование HTML
$tg->msg("<b>Жирный текст</b> и <i>курсив</i>.")
   ->parseMode(MessageParseMode::HTML)
   ->send();

// Использование MarkdownV2
$tg->msg("*Жирный текст* и _курсив_.")
   ->parseMode(MessageParseMode::MarkdownV2)
   ->send();

reply(?int $message_id = null)

Делает сообщение ответом на другое сообщение.

  • Если $message_id не указан, ответ будет на текущее сообщение из контекста.
php
// Ответ на текущее сообщение
$tg->msg("Это ответ.")->reply()->send();

// Ответ на конкретное сообщение
$tg->msg("Отвечаю на сообщение c ID 12345.")->reply(12345)->send();

Работа с медиа

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

  1. Локальный путь: /path/to/file.jpg
  2. URL: https://example.com/image.png
  3. Telegram file_id: AgACAgIAAxkBAA...

Отправка одного медиафайла

php
// Отправка фото по URL
$tg->msg("Фото из интернета")
   ->img('https://placehold.co/600x400')
   ->send();

// Отправка видео с диска
$tg->msg("Видео с диска")
   ->video('/data/my_video.mp4')
   ->send();

// Отправка документа по file_id
$tg->msg("Документ по ID")
   ->doc('BQACAgIAAxkBAAE..._')
   ->send();

Отправка группы медиа (Media Group)

Чтобы отправить несколько фото или видео в одном сообщении (альбомом), передайте в соответствующий метод массив источников.

Важно: Подпись (text()) будет добавлена только к первому элементу в медиагруппе. В одной группе можно смешивать фото и видео. Документы и аудиофайлы можно группировать только с файлами того же типа.

php
$photos = [
    'https://placehold.co/600x400/EEE/31343C',
    '/path/to/local/image.jpg',
    'AgACAgIAAxkBAAE...' // file_id
];

$tg->msg("Вот альбом из трех фото")
   ->img($photos)
   ->send();

mediaPreview(string $url)

Этот метод позволяет добавить к сообщению предпросмотр ссылки (rich preview), не отображая саму ссылку в тексте. Это достигается за счет добавления невидимой ссылки в начало текста.

php
$tg->msg("Эта статья очень полезна.")
   ->mediaPreview('https://example.com/some-article')
   ->send();

Клавиатуры

Для управления клавиатурами существует 3 метода: kbd(), inlineKbd() и removeKbd() для reply, inline и удаления соответственно.

Reply-клавиатура

php
use ZenithGram\ZenithGram\Button;

$buttons = [
    [
        Button::text('Кнопка 1'), 
        Button::text('Кнопка 2')
    ]
];

$tg->msg("Выберите кнопку:")
   ->kbd($buttons, resize: true, one_time: true)
   ->send();

Inline-клавиатура

php
use ZenithGram\ZenithGram\Button;

$buttons = [
    [Button::url('Google', 'https://google.com')],
    [Button::cb('Нажми меня', 'button_pressed')]
];

$tg->msg("Это inline-клавиатура:")
   ->inlineKbd($buttons)
   ->send();

Удаление клавиатуры

php
$tg->msg("Клавиатура убрана.")
   ->removeKbd()
   ->send();

Редактирование сообщений

Вы можете редактировать уже отправленные сообщения.

editText(?string $messageID = null, ?int $chatID = null)

Редактирует текст сообщения.

php
// Пример в обработчике callback-запроса
$bot->onCallback('edit_text')
    ->func(function(ZG $tg) {
        $tg->answerCallbackQuery();
        
        $tg->msg("Этот текст изменён")->editText();
    });

editCaption(?string $messageID = null, ?int $chatID = null)

Редактирует подпись к медиа. Работает аналогично editText.

editMedia(?string $messageID = null, ?int $chatID = null)

Заменяет медиа в сообщении.

php
$tg->msg("Новая подпись к новому фото")
   ->img('/path/to/new_image.jpg')
   ->editMedia();

Полный список методов

МетодОписание
textУстанавливает текст сообщения или подпись к медиа.
parseModeЗадает режим парсинга.
kbdДобавляет Reply-клавиатуру.
inlineKbdДобавляет Inline-клавиатуру.
removeKbdУдаляет клавиатуру.
replyДелает сообщение ответом на другое.
imgДобавляет фото или группу фото.
videoДобавляет видео или группу видео.
docДобавляет документ или группу документов.
audioДобавляет аудио или группу аудио.
voiceДобавляет голосовое сообщение.
gifДобавляет GIF-анимацию.
stickerОтправляет стикер по его file_id.
diceОтправляет анимированный эмодзи-кубик (🎲, 🎯, 🏀, , 🎳, 🎰).
entitiesУстанавливает массив сущностей для форматирования.
mediaPreviewДобавляет "невидимый" предпросмотр ссылки.
paramsДобавляет любые дополнительные параметры в запрос к API.
sendЗавершающий метод. Отправляет собранное сообщение.
editTextЗавершающий метод. Редактирует текст существующего сообщения.
editCaptionЗавершающий метод. Редактирует подпись к медиа в существующем сообщении.
editMediaЗавершающий метод. Заменяет медиа в существующем сообщении.
sendEditУстаревший. Алиас для editText и editCaption.

Более подробное описание каждого метода в описании класса Message

Опубликовано под лицензией MIT.