Button
Вспомогательный класс для генерации кнопок. Поддерживает все актуальные типы кнопок Telegram API.
Импорт
Для использования класса необходимо его импортировать через конструкцию use. Если вы планируете использовать цветные кнопки, также импортируйте перечисление ButtonStyle.
use ZenithGram\ZenithGram\Button;
use ZenithGram\ZenithGram\Enums\ButtonStyle;Стили и Эмодзи (Общие параметры)
Абсолютно все методы класса Button принимают два дополнительных опциональных параметра: $style и $customEmojiId. Для удобства рекомендуется использовать именованные аргументы PHP 8.
- Стили поддерживают 4 цвета:
Primary(Синий),Success(Зеленый),Danger(Красный) и стандартный цвет Telegram. - Эмодзи работают, если у бота есть юзернейм с Fragment или у получателя есть Telegram Premium.
Button::cb(
text: 'Удалить',
data: 'del_123',
style: ButtonStyle::Danger,
customEmojiId: '5368324170671202286'
);Комплексный пример использования класса
<?php
// 1. Необходимые импорты
use ZenithGram\ZenithGram\Bot;
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Button;
use ZenithGram\ZenithGram\Enums\ButtonStyle;
use ZenithGram\ZenithGram\Enums\MessageParseMode;
$tg = ZG::create("BOT_TOKEN");
$bot = new Bot($tg);
// Inline-клавиатура
$bot->onBotCommand('menu', '/menu')
->func(function(ZG $tg) {
// Формируем массив рядов
$inlineKeyboard = [
// Первый ряд: 3 кнопки со всеми доступными стилями
[
Button::cb('Отмена', 'cancel', ButtonStyle::Danger),
Button::cb('Ок', 'confirm', ButtonStyle::Success),
Button::cb('Инфо', 'info', ButtonStyle::Primary)
],
// Второй ряд: 2 кнопки (Ссылка и Копирование текста с кастомным эмодзи)
[
Button::url('Наш сайт', 'https://example.com'),
Button::copyText(
text: 'Промокод',
textToCopy: 'SALE-2025',
customEmojiId: '5368324170671202286' // ID эмодзи
)
],
// Третий ряд: 1 кнопка на всю ширину (Инлайн режим)
[
Button::switchInlineCurrent('🔎 Поиск по каталогу', 'найти ')
]
];
$tg->msg("🗂 <b>Главное меню</b>\nВыберите нужное действие:")
->parseMode(MessageParseMode::HTML)
->inlineKbd($inlineKeyboard)
->send();
});
// Reply-клавиатура
$bot->onBotCommand('tools', '/tools')
->func(function(ZG $tg) {
$replyKeyboard = [
// Первый ряд: запросы пользователей и чатов
[
Button::requestUsers('👥 Выбрать 2-х юзеров', requestId: 1, options: ['max_quantity' => 2]),
Button::requestChat('📢 Выбрать канал', requestId: 2, chatIsChannel: true)
],
// Второй ряд: локация и создание опроса
[
Button::location('📍 Моя геопозиция'),
Button::poll('📊 Сделать опрос', type: 'regular')
],
// Третий ряд: обычный текст для закрытия
[
Button::text('❌ Закрыть меню')
]
];
$tg->msg("🛠 <b>Инструменты</b>\nВоспользуйтесь функциями ниже:")
->parseMode(MessageParseMode::HTML)
->kbd($replyKeyboard, resize: true)
->send();
});
$bot->run();text
Обычная текстовая кнопка (Reply)
Button::text('Текст кнопки');cb
Inline кнопка с Callback Data
Button::cb('Текст кнопки', 'callbackData');url
Inline кнопка-ссылка
Button::url('Текст кнопки', 'https://example.com');webApp
Кнопка для запуска WebApp (Поддерживается как для Inline, так и для Reply)
Button::webApp('Открыть приложение', 'https://app.url');contact
Кнопка запроса контакта (Reply)
Button::contact('Отправить контакт');location
Кнопка запроса геолокации (Reply)
Button::location('Отправить геопозицию');copyText
Inline кнопка для копирования заданного текста в буфер обмена пользователя
Button::copyText('Скопировать промокод', 'PROMO-2025');switchInline
Inline кнопка, переводящая пользователя в другой чат с активацией инлайн-режима бота
Button::switchInline('Поиск в другом чате', 'текст запроса');switchInlineCurrent
Inline кнопка, активирующая инлайн-режим бота в текущем чате
Button::switchInlineCurrent('Искать здесь', 'текст запроса');switchInlineChosen
Inline кнопка для активации инлайн-режима с предварительным выбором типа чата (группы, каналы, лс)
Button::switchInlineChosen('Выбрать чат', [
'query' => 'запрос',
'allow_group_chats' => true
]);loginUrl
Inline кнопка для беспарольной авторизации на сайте через Telegram
Button::loginUrl('Войти через Telegram', ['url' => 'https://example.com/login']);requestUsers
Кнопка запроса выбора одного или нескольких пользователей/ботов (Reply)
Button::requestUsers('Выбрать 2-х Premium юзеров', requestId: 1, options: [
'user_is_premium' => true,
'max_quantity' => 2
]);requestChat
Кнопка запроса выбора группы или канала по заданным критериям (Reply)
Button::requestChat('Выбрать канал', requestId: 2, chatIsChannel: true, options: [
'chat_has_username' => true
]);requestManagedBot
Кнопка запроса на создание управляемого бота (Reply)
Button::requestManagedBot('Создать бота', requestId: 3, options: [
'suggested_name' => 'Мой новый бот'
]);poll
Кнопка, предлагающая пользователю создать опрос или викторину и отправить боту (Reply)
Button::poll('Создать викторину', 'quiz'); // 'regular', 'quiz' или nullpay
Inline кнопка для оплаты счетов (включая Telegram Stars)
Важно
Эту кнопку нельзя прикрепить к обычному текстовому сообщению. Она должна быть первой кнопкой в первом ряду и отправляться исключительно через метод API sendInvoice.
Button::pay('Оплатить 100⭐');