Использую для создания бота вот эту библиотеку -
https://github.com/php-telegram-bot/example-bot.
Имеется команда InlinekeyboardCommand.php. Она создаёт сообщение с кнопками. Я её переопределил, она в отличие от примера в библиотеке имеет только кнопки, возвращающие данные обратным вызовом.
<?php
/**
* This file is part of the PHP Telegram Bot example-bot package.
* https://github.com/php-telegram-bot/example-bot/
*
* (c) PHP Telegram Bot Team
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Longman\TelegramBot\Commands\UserCommands;
/**
* User "/inlinekeyboard" command
*
* Display an inline keyboard with a few buttons.
*
* This command requires CallbackqueryCommand to work!
*
* Отобразите встроенную клавиатуру с несколькими кнопками.
*
* Для работы этой команды требуется команда запроса обратного вызова!
* @see CallbackqueryCommand.php
*/
use Longman\TelegramBot\Commands\UserCommand;
use Longman\TelegramBot\Entities\InlineKeyboard;
use Longman\TelegramBot\Entities\ServerResponse;
use Longman\TelegramBot\Exception\TelegramException;
class InlinekeyboardCommand extends UserCommand
{
/**
* @var string
*/
protected $name = 'inlinekeyboard';
/**
* @var string
*/
protected $description = 'Show inline keyboard';
/**
* @var string
*/
protected $usage = '/inlinekeyboard';
/**
* @var string
*/
protected $version = '0.2.0';
/**
* Main command execution
*
* @return ServerResponse
* @throws TelegramException
*/
public function execute(): ServerResponse
{
$inline_keyboard = new InlineKeyboard([
['text' => 'Callback', 'callback_data' => '1'],
['text' => 'Callback', 'callback_data' => '1'],
], [
['text' => 'Callback', 'callback_data' => '1'],
['text' => 'Callback', 'callback_data' => '1'],
]);
return $this->replyToChat('Вопрос 1', [
'reply_markup' => $inline_keyboard,
]);
}
}
Имеется команда, которая вызывается всякий раз, когда происходит обратный вызов.
<?php
/**
* This file is part of the PHP Telegram Bot example-bot package.
* https://github.com/php-telegram-bot/example-bot/
*
* (c) PHP Telegram Bot Team
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Callback query command
*
* This command handles all callback queries sent via inline keyboard buttons.
*
* @see InlinekeyboardCommand.php
Команда запроса обратного вызова
Эта команда обрабатывает все запросы обратного вызова, отправляемые с помощью интерактивных кнопок клавиатуры.
@смотри InlinekeyboardCommand.php
*/
namespace Longman\TelegramBot\Commands\SystemCommands;
use Longman\TelegramBot\Commands\SystemCommand;
use Longman\TelegramBot\Entities\ServerResponse;
use Longman\TelegramBot\Entities\InlineKeyboard;
class CallbackqueryCommand extends SystemCommand
{
/**
* @var string
*/
protected $name = 'callbackquery';
/**
* @var string
*/
protected $description = 'Handle the callback query';
/**
* @var string
*/
protected $version = '1.2.0';
/**
* Main command execution
*
* @return ServerResponse
* @throws \Exception
*/
/*public function execute(): ServerResponse
{
// Callback query data can be fetched and handled accordingly.
// Данные запроса обратного вызова могут быть извлечены и обработаны соответствующим образом.
$callback_query = $this->getCallbackQuery();
$callback_data = $callback_query->getData();
return $callback_query->answer([
'text' => 'Content of the callback data: ' . $callback_data,
'show_alert' => (bool) random_int(0, 1), // Randomly show (or not) as an alert.
'cache_time' => 5,
]);
}*/
public function execute(): ServerResponse
{
/*spl_autoload_register("my_autoloader");
// Callback query data can be fetched and handled accordingly.
// Данные запроса обратного вызова могут быть извлечены и обработаны соответствующим образом.
$callback_query = $this->getCallbackQuery();
$callback_data = $callback_query->getData();
if($callback_data === 'InlinekeyboardCommand1'){
$command = new InlinekeyboardCommand1($telegram, $update);
} elseif($callback_data === 'InlinekeyboardCommand2') {
$command = new InlinekeyboardCommand2($telegram, $update);
} elseif($callback_data === 'InlinekeyboardCommand3') {
$command = new InlinekeyboardCommand3($telegram, $update);
}
$command->execute();
/*return $callback_query->answer([
'text' => 'Content of the callback data: ' . $callback_data,
'show_alert' => (bool) random_int(0, 1), // Randomly show (or not) as an alert.
'cache_time' => 5,
]);*/
$callback_query = $this->getCallbackQuery();
$callback_data = $callback_query->getData();
if($callback_data == '1'){
$inline_keyboard = new InlineKeyboard([
['text' => 'Callback', 'callback_data' => '2'],
['text' => 'Callback', 'callback_data' => '2'],
], [
['text' => 'Callback', 'callback_data' => '2'],
['text' => 'Callback', 'callback_data' => '2'],
]);
} elseif($callback_data == '2') {
$inline_keyboard = new InlineKeyboard([
['text' => 'Callback', 'callback_data' => '3'],
['text' => 'Callback', 'callback_data' => '3'],
], [
['text' => 'Callback', 'callback_data' => '3'],
['text' => 'Callback', 'callback_data' => '3'],
]);
} elseif($callback_data == '3') {
$inline_keyboard = new InlineKeyboard([
['text' => 'Callback', 'callback_data' => '4'],
['text' => 'Callback', 'callback_data' => '4'],
], [
['text' => 'Callback', 'callback_data' => '4'],
['text' => 'Callback', 'callback_data' => '4'],
]);
}
//$callback_query->editMessageReplyMarkup($inline_keyboard);
/*return $callback_query->answer([
'text' => 'Content of the callback data: ' . $callback_data,
'show_alert' => (bool) random_int(0, 1), // Randomly show (or not) as an alert.
'cache_time' => 5,
'reply_markup' => $inline_keyboard
]);*/
//return $callback_query->answer();
return $this->replyToChat($callback_query, [
'reply_markup' => $inline_keyboard,
]);
}
}
Всякий раз, когда происходит вызов, хочу вернуть клавиатуру со следующим вопросом, но ничего не возвращается. Сама команда /inlinekeyboard вызывается, а вот ещё один набор кнопок после неё уже нет. Мне необходимо, чтобы бот выдавал вопросы в количестве четырех подряд, а ответы были в виде кнопок.
В методе я создаю нужную клавиатуру, которая будет соответствовать обратному вызову.
Бот реагирует тем, что в нажатой кнопке появляется в правом нижнем углу часы, а потом они исчезают и всё.
Как сделать так, чтобы бот выдавал набор кнопок?