KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]

Статьи / PHP

Два с воловиной года назад на сайте была статья о том, как сделать телеграм-бота. Сегодня я решил немного обновить используемую библиотеку и рассмотреть уже в новой части возможность добавления в бота клавиатуры с кнопками.


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

Архив с обновлённой библиотекой (работает на версии php >= 8.0):

telekot.zip


Первым делом добавляем библиотеку в свой проект и создаём php-файл, в котором, собственно, и будем писать бота. После этого необходимо подключить библиотеку:

<?php

require_once __DIR__ . '/telekot/Bot.php';

Теперь создаём экземпляр класса Bot и инициализируем переменные $data, $chat_id и $message:

$tg = \telekot\Bot::create( 'токен' )
    ->initData( $data )
    ->initChatId( $chat_id )
    ->initMessage( $message );

Создаём массив с нужными нам кнопками:

$kbd = [
    'inline_keyboard' => [
        [
            [
                'text' => 'Кнопка #1',
                'callback_data' => 'one'
            ],
            [
                'text' => 'Кнопка #2',
                'callback_data' => 'two'
            ]
        ],
        [
            [
                'text' => '🌄 Картинка',
                'callback_data' => 'img'
            ]
        ]
    ]
];

Далее напишем проверку на клик по inline-кнопке. Также я добавлю блок else, в него добавим пару команд для демонстрации обновлений библиотеки:

if ( isset( $data['callback_query'] ) )
{

    // Тут будем обрабатывать нажатие на кнопки

}
else
{

    // Тут будем обрабатывать обычные команды

}

Стоит заметить, что всё содержимое массива $data при наличии callback_query нужно искать уже внутри callback_query ( $data['callback_query']['*а дальше уже как обычно..*'] ).


Ну, а теперь с помощью конструкции switch-case проверим, на какую из кнопок нажал юзер:

switch ( $data['callback_query']['data'] )
{
    case 'one':
    {
        $tg->sendMessage( $chat_id, 'Вы нажали на первую кнопку' );
        break;
    }
    case 'two':
    {
        $tg->sendMessage( $chat_id, 'Вы нажали на вторую кнопку' );
        break;
    }
    case 'img':
    {
        $tg->sendImage( 'Держи картинку', 'https://proprikol.ru/wp-content/uploads/2020/10/kartinki-ozero-45.jpeg' );
        break;
    }
}

При нажатии любую из первых двух кнопок бот просто уведомит пользователя об этом, при нажатии на третью - отправит картинку с помощью метода sendImage().


Да, как и обещал - в блок else добавляем ещё две команды:

if ( $message == '/привет' )
{
    $tg->reply( 'Здарова' );
}
else if ( $message == '/кнопки' )
{
    $tg->sendMessage( $chat_id, 'Вот твои кнопки:', $kbd );
}

При вводе команды /кнопки - бот будет отправлять клавиатуру пользователю. При вводе команды /привет - здороваться с ним. Однако для первой команды я использовал метод reply(), а для второй - метод sendMessage(). Почему? Разница, на самом-то деле, небольшая: в метод sendMessage() необходимо передавать ID чата, а в метод reply() айди передавать не нужно (ответ придёт тому, кто написал боту). Поэтому в нашем случае, конечно же, удобнее и проще юзать reply().


Весь код:

<?php

require_once __DIR__ . '/telekot/Bot.php';


$tg = \telekot\Bot::create( 'токен' )
    ->initData( $data )
    ->initChatId( $chat_id )
    ->initMessage( $message );


$kbd = [
    'inline_keyboard' => [
        [
            [
                'text' => 'Кнопка #1',
                'callback_data' => 'one'
            ],
            [
                'text' => 'Кнопка #2',
                'callback_data' => 'two'
            ]
        ],
        [
            [
                'text' => '🌄 Картинка',
                'callback_data' => 'img'
            ]
        ]
    ]
];


if ( isset( $data['callback_query'] ) )
{

    switch ( $data['callback_query']['data'] )
    {
        case 'one':
        {
            $tg->sendMessage( $chat_id, 'Вы нажали на первую кнопку' );
            break;
        }
        case 'two':
        {
            $tg->sendMessage( $chat_id, 'Вы нажали на вторую кнопку' );
            break;
        }
        case 'img':
        {
            $tg->sendImage( 'Держи картинку', 'https://proprikol.ru/wp-content/uploads/2020/10/kartinki-ozero-45.jpeg' );
            break;
        }
    }

}
else
{

    if ( $message == '/привет' )
    {
        $tg->reply( 'Здарова' );
    }
    else if ( $message == '/кнопки' )
    {
        $tg->sendMessage( $chat_id, 'Вот твои кнопки:', $kbd );
    }

}


А вот, собственно, как работает бот:


bot.zip

  • 5id15
  • 10.08.2022
  • 1 923
  • 0
[PHP] Создание простого Telegram-бота на простой библиотеке.
[PHP] Создание простого Telegram-бота на простой библиотеке.
2-12-2019, 03:21, PHP
Movie

Нет комментариев. Не желаешь оставить первый комментарий?

Перед публикацией, советую ознакомится с правилами!

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
      • Игровые
    • Модули
    • Хаки
  • Магазин
Комментарии
Карусели для бота ВК на библиотеке SimpleVK2 (ч2)
а что скопировать мне и заменить в этой версии? у меня бот уже функцианальный там vk_api.php и
Карусели для бота ВК
спасибо большое)))
Callback-кнопки для бота ВК
Прекрасные статьи. Думаю, я надолго на этом сайте. :) Полезность статьи хорошо на поведенческие
Карусели для бота ВК на библиотеке SimpleVK2 (ч2)
Вроде только 1 можно, уже точно не помню
Cкрипт добавление возможных друзей Вконтакте, законная накрутка друзей без блокировок!
Бро, скинь по братски, и за отписку от не принявших знаешь? 😄
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 79
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 840
Добавлено за сутки: +0
Пользователей: 3873
Добавлено за сутки: +1
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2022. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль