|
| 1 | +--- |
| 2 | +url: 'https://zenithgram.github.io/classes/button.md' |
| 3 | +description: Вспомогательный класс для создания кнопок. |
| 4 | +--- |
| 5 | + |
| 6 | +# **Button** |
| 7 | + |
| 8 | +Вспомогательный класс для генерации кнопок. Поддерживает все актуальные типы кнопок Telegram API. |
| 9 | + |
| 10 | +## Импорт |
| 11 | + |
| 12 | +Для использования класса необходимо его импортировать через конструкцию `use`. Если вы планируете использовать цветные кнопки, также импортируйте перечисление `ButtonStyle`. |
| 13 | + |
| 14 | +```php |
| 15 | +use ZenithGram\ZenithGram\Button; |
| 16 | +use ZenithGram\ZenithGram\Enums\ButtonStyle; |
| 17 | +``` |
| 18 | + |
| 19 | +## Стили и Эмодзи (Общие параметры) |
| 20 | + |
| 21 | +Абсолютно **все** методы класса `Button` принимают два дополнительных опциональных параметра: `$style` и `$customEmojiId`. Для удобства рекомендуется использовать именованные аргументы PHP 8. |
| 22 | + |
| 23 | +* **Стили** поддерживают 4 цвета: `Primary` (Синий), `Success` (Зеленый), `Danger` (Красный) и стандартный цвет Telegram. |
| 24 | +* **Эмодзи** работают, если у бота есть юзернейм с Fragment или у получателя есть Telegram Premium. |
| 25 | + |
| 26 | +```php |
| 27 | +Button::cb( |
| 28 | + text: 'Удалить', |
| 29 | + data: 'del_123', |
| 30 | + style: ButtonStyle::Danger, |
| 31 | + customEmojiId: '5368324170671202286' |
| 32 | +); |
| 33 | +``` |
| 34 | + |
| 35 | +## Комплексный пример использования класса |
| 36 | + |
| 37 | +```php |
| 38 | +<?php |
| 39 | +// 1. Необходимые импорты |
| 40 | +use ZenithGram\ZenithGram\Bot; |
| 41 | +use ZenithGram\ZenithGram\ZG; |
| 42 | +use ZenithGram\ZenithGram\Button; |
| 43 | +use ZenithGram\ZenithGram\Enums\ButtonStyle; |
| 44 | +use ZenithGram\ZenithGram\Enums\MessageParseMode; |
| 45 | + |
| 46 | +$tg = ZG::create("BOT_TOKEN"); |
| 47 | +$bot = new Bot($tg); |
| 48 | + |
| 49 | +// Inline-клавиатура |
| 50 | +$bot->onBotCommand('menu', '/menu') |
| 51 | + ->func(function(ZG $tg) { |
| 52 | + |
| 53 | + // Формируем массив рядов |
| 54 | + $inlineKeyboard = [ |
| 55 | + // Первый ряд: 3 кнопки со всеми доступными стилями |
| 56 | + [ |
| 57 | + Button::cb('Отмена', 'cancel', ButtonStyle::Danger), |
| 58 | + Button::cb('Ок', 'confirm', ButtonStyle::Success), |
| 59 | + Button::cb('Инфо', 'info', ButtonStyle::Primary) |
| 60 | + ], |
| 61 | + // Второй ряд: 2 кнопки (Ссылка и Копирование текста с кастомным эмодзи) |
| 62 | + [ |
| 63 | + Button::url('Наш сайт', 'https://example.com'), |
| 64 | + Button::copyText( |
| 65 | + text: 'Промокод', |
| 66 | + textToCopy: 'SALE-2025', |
| 67 | + customEmojiId: '5368324170671202286' // ID эмодзи |
| 68 | + ) |
| 69 | + ], |
| 70 | + // Третий ряд: 1 кнопка на всю ширину (Инлайн режим) |
| 71 | + [ |
| 72 | + Button::switchInlineCurrent('🔎 Поиск по каталогу', 'найти ') |
| 73 | + ] |
| 74 | + ]; |
| 75 | + |
| 76 | + $tg->msg("🗂 <b>Главное меню</b>\nВыберите нужное действие:") |
| 77 | + ->parseMode(MessageParseMode::HTML) |
| 78 | + ->inlineKbd($inlineKeyboard) |
| 79 | + ->send(); |
| 80 | + }); |
| 81 | + |
| 82 | +// Reply-клавиатура |
| 83 | +$bot->onBotCommand('tools', '/tools') |
| 84 | + ->func(function(ZG $tg) { |
| 85 | + |
| 86 | + $replyKeyboard = [ |
| 87 | + // Первый ряд: запросы пользователей и чатов |
| 88 | + [ |
| 89 | + Button::requestUsers('👥 Выбрать 2-х юзеров', requestId: 1, options: ['max_quantity' => 2]), |
| 90 | + Button::requestChat('📢 Выбрать канал', requestId: 2, chatIsChannel: true) |
| 91 | + ], |
| 92 | + // Второй ряд: локация и создание опроса |
| 93 | + [ |
| 94 | + Button::location('📍 Моя геопозиция'), |
| 95 | + Button::poll('📊 Сделать опрос', type: 'regular') |
| 96 | + ], |
| 97 | + // Третий ряд: обычный текст для закрытия |
| 98 | + [ |
| 99 | + Button::text('❌ Закрыть меню') |
| 100 | + ] |
| 101 | + ]; |
| 102 | + |
| 103 | + $tg->msg("🛠 <b>Инструменты</b>\nВоспользуйтесь функциями ниже:") |
| 104 | + ->parseMode(MessageParseMode::HTML) |
| 105 | + ->kbd($replyKeyboard, resize: true) |
| 106 | + ->send(); |
| 107 | + }); |
| 108 | + |
| 109 | +$bot->run(); |
| 110 | +``` |
| 111 | + |
| 112 | +## text |
| 113 | + |
| 114 | +Обычная текстовая кнопка (Reply) |
| 115 | + |
| 116 | +```php |
| 117 | +Button::text('Текст кнопки'); |
| 118 | +``` |
| 119 | + |
| 120 | +## cb |
| 121 | + |
| 122 | +Inline кнопка с Callback Data |
| 123 | + |
| 124 | +```php |
| 125 | +Button::cb('Текст кнопки', 'callbackData'); |
| 126 | +``` |
| 127 | + |
| 128 | +## url |
| 129 | + |
| 130 | +Inline кнопка-ссылка |
| 131 | + |
| 132 | +```php |
| 133 | +Button::url('Текст кнопки', 'https://example.com'); |
| 134 | +``` |
| 135 | + |
| 136 | +## webApp |
| 137 | + |
| 138 | +Кнопка для запуска WebApp (Поддерживается как для Inline, так и для Reply) |
| 139 | + |
| 140 | +```php |
| 141 | +Button::webApp('Открыть приложение', 'https://app.url'); |
| 142 | +``` |
| 143 | + |
| 144 | +## contact |
| 145 | + |
| 146 | +Кнопка запроса контакта (Reply) |
| 147 | + |
| 148 | +```php |
| 149 | +Button::contact('Отправить контакт'); |
| 150 | +``` |
| 151 | + |
| 152 | +## location |
| 153 | + |
| 154 | +Кнопка запроса геолокации (Reply) |
| 155 | + |
| 156 | +```php |
| 157 | +Button::location('Отправить геопозицию'); |
| 158 | +``` |
| 159 | + |
| 160 | +## copyText |
| 161 | + |
| 162 | +Inline кнопка для копирования заданного текста в буфер обмена пользователя |
| 163 | + |
| 164 | +```php |
| 165 | +Button::copyText('Скопировать промокод', 'PROMO-2025'); |
| 166 | +``` |
| 167 | + |
| 168 | +## switchInline |
| 169 | + |
| 170 | +Inline кнопка, переводящая пользователя в другой чат с активацией инлайн-режима бота |
| 171 | + |
| 172 | +```php |
| 173 | +Button::switchInline('Поиск в другом чате', 'текст запроса'); |
| 174 | +``` |
| 175 | + |
| 176 | +## switchInlineCurrent |
| 177 | + |
| 178 | +Inline кнопка, активирующая инлайн-режим бота в текущем чате |
| 179 | + |
| 180 | +```php |
| 181 | +Button::switchInlineCurrent('Искать здесь', 'текст запроса'); |
| 182 | +``` |
| 183 | + |
| 184 | +## switchInlineChosen |
| 185 | + |
| 186 | +Inline кнопка для активации инлайн-режима с предварительным выбором типа чата (группы, каналы, лс) |
| 187 | + |
| 188 | +```php |
| 189 | +Button::switchInlineChosen('Выбрать чат', [ |
| 190 | + 'query' => 'запрос', |
| 191 | + 'allow_group_chats' => true |
| 192 | +]); |
| 193 | +``` |
| 194 | + |
| 195 | +## loginUrl |
| 196 | + |
| 197 | +Inline кнопка для беспарольной авторизации на сайте через Telegram |
| 198 | + |
| 199 | +```php |
| 200 | +Button::loginUrl('Войти через Telegram', ['url' => 'https://example.com/login']); |
| 201 | +``` |
| 202 | + |
| 203 | +## requestUsers |
| 204 | + |
| 205 | +Кнопка запроса выбора одного или нескольких пользователей/ботов (Reply) |
| 206 | + |
| 207 | +```php |
| 208 | +Button::requestUsers('Выбрать 2-х Premium юзеров', requestId: 1, options: [ |
| 209 | + 'user_is_premium' => true, |
| 210 | + 'max_quantity' => 2 |
| 211 | +]); |
| 212 | +``` |
| 213 | + |
| 214 | +## requestChat |
| 215 | + |
| 216 | +Кнопка запроса выбора группы или канала по заданным критериям (Reply) |
| 217 | + |
| 218 | +```php |
| 219 | +Button::requestChat('Выбрать канал', requestId: 2, chatIsChannel: true, options: [ |
| 220 | + 'chat_has_username' => true |
| 221 | +]); |
| 222 | +``` |
| 223 | + |
| 224 | +## requestManagedBot |
| 225 | + |
| 226 | +Кнопка запроса на создание управляемого бота (Reply) |
| 227 | + |
| 228 | +```php |
| 229 | +Button::requestManagedBot('Создать бота', requestId: 3, options: [ |
| 230 | + 'suggested_name' => 'Мой новый бот' |
| 231 | +]); |
| 232 | +``` |
| 233 | + |
| 234 | +## poll |
| 235 | + |
| 236 | +Кнопка, предлагающая пользователю создать опрос или викторину и отправить боту (Reply) |
| 237 | + |
| 238 | +```php |
| 239 | +Button::poll('Создать викторину', 'quiz'); // 'regular', 'quiz' или null |
| 240 | +``` |
| 241 | + |
| 242 | +## pay |
| 243 | + |
| 244 | +Inline кнопка для оплаты счетов (включая Telegram Stars) |
| 245 | +::: warning Важно |
| 246 | +Эту кнопку **нельзя** прикрепить к обычному текстовому сообщению. Она должна быть первой кнопкой в первом ряду и отправляться исключительно через метод API `sendInvoice`. |
| 247 | +::: |
| 248 | + |
| 249 | +```php |
| 250 | +Button::pay('Оплатить 100⭐'); |
| 251 | +``` |
| 252 | + |
| 253 | +--- |
| 254 | + |
1 | 255 | --- |
2 | 256 | url: 'https://zenithgram.github.io/classes/actionMethods/access.md' |
3 | 257 | description: Ограничивает доступ к маршруту по ID пользователя (белый список). |
@@ -723,73 +977,6 @@ $bot->run(); |
723 | 977 |
|
724 | 978 | --- |
725 | 979 |
|
726 | | ---- |
727 | | -url: 'https://zenithgram.github.io/classes/button.md' |
728 | | -description: Вспомогательный класс для создания кнопок. |
729 | | ---- |
730 | | - |
731 | | -# **Button** |
732 | | - |
733 | | -Вспомогательный класс для генерации кнопок |
734 | | - |
735 | | -## Импорт |
736 | | - |
737 | | -Для использования класса необходимо его импортировать через конструкцию `use` |
738 | | - |
739 | | -```php |
740 | | -use ZenithGram\ZenithGram\Button; |
741 | | -``` |
742 | | - |
743 | | -## text |
744 | | - |
745 | | -Обычная текстовая кнопка |
746 | | - |
747 | | -```php |
748 | | -Button::text('Текст кнопки'); |
749 | | -``` |
750 | | - |
751 | | -## cb |
752 | | - |
753 | | -Inline кнопка |
754 | | - |
755 | | -```php |
756 | | -Button::cb('Текст кнопки', 'callbackData'); |
757 | | -``` |
758 | | - |
759 | | -## url |
760 | | - |
761 | | -Inline кнопка-ссылка |
762 | | - |
763 | | -```php |
764 | | -Button::url('Текст кнопки', 'http://button.url'); |
765 | | -``` |
766 | | - |
767 | | -## webApp |
768 | | - |
769 | | -Inline кнопка для WebApp |
770 | | - |
771 | | -```php |
772 | | -Button::webApp('Текст кнопки', 'http://app.url'); |
773 | | -``` |
774 | | - |
775 | | -## contact |
776 | | - |
777 | | -Кнопка запроса контакта |
778 | | - |
779 | | -```php |
780 | | -Button::contact('Текст кнопки'); |
781 | | -``` |
782 | | - |
783 | | -## location |
784 | | - |
785 | | -Кнопка запроса геолокации |
786 | | - |
787 | | -```php |
788 | | -Button::location('Текст кнопки'); |
789 | | -``` |
790 | | - |
791 | | ---- |
792 | | - |
793 | 980 | --- |
794 | 981 | url: 'https://zenithgram.github.io/classes/zenithMethods/callAPI.md' |
795 | 982 | description: Выполняет произвольный метод Telegram Bot API. |
|
0 commit comments