TelegramBot / Api

Native PHP Wrapper for Telegram BOT API
MIT License
1.07k stars 324 forks source link

Как показать alert при клике на inline кнопку? #313

Closed pappercoin closed 3 years ago

pappercoin commented 3 years ago

Подскажите пожалуйста, я хочу сделать так, что бы при клике на кнопку всплывало окно с нужным мне текстом (как уведомление), но не могу понять как это работает.

Вот мой код:


<?php
require_once "vendor/autoload.php";

$token = "МОЙ ТОКЕН";
$bot = new \TelegramBot\Api\Client($token);
$bot->command('start', function ($message) use ($bot) { // команда для start
    $answer = '<b>Добро пожаловать в бота!</b>

Просто пришлите мне текст с несколькими абзацами! Затем ответ бота скопируйте и вставьте в Instagram!

Обратите внимание, что Ваш текст должен быть разделен на обычные абзацы (отступы), то есть между абзацами должна быть пустая строка!';
    $bot->sendMessage($message->getChat()->getId(), $answer, 'html');
});
// Повторяет за мной
$bot->on(function (\TelegramBot\Api\Types\Update $update) use ($bot) {
    $message = $update->getMessage(); // Получаем текст сообщения
    $id = $message->getChat()->getId(); // Получаем id чата

    $messageText = str_replace(array("\r\n\r\n", "\r\r", "\n\n"), "\r\n".'⠀'."\r\n", $message->getText()); // Заменяем символы переноса на невидимый пробел
    if (iconv_strlen($messageText,'UTF-8') <= 2200) {
        //$bot->sendMessage($id, $messageText); // отправляем сообщение
        // $bot->sendMessage($id, "Символов: ".iconv_strlen($messageText,'UTF-8')." из 2200");
        $keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup(
            [
                [
                    ['callback_data' => 'result', 'text' => '📝 '.iconv_strlen($messageText,'UTF-8')." из 2200", 'resize_keyboard' => 'true']
                ]
            ]
        );
        $bot->sendMessage($id, $messageText, null, false, null, $keyboard);
// при клике на эту кнопку я хочу что бы всплывало окно с расширеным текстом.

    } else {

        $bot->sendMessage($id, "<b>❌ В вашем тексте больше 2200 символов!</b>\r\n\r\nInstagram разрешает публиковать посты с количеством символов не превышающим 2200 символов, а у вас получилось ".iconv_strlen($messageText,'UTF-8')." символов.", 'html'); // отправляем сообщение
    }
}, function () {
    return true;
});

$bot->run();
?>```
xynobo commented 3 years ago

Как я понимаю за это отвечает метод answercallbackquery

MyZik commented 3 years ago

Как я понимаю за это отвечает метод answercallbackquery

Всё верно, тебе только нужно вытащить ID:

$callbackQuery = $update->getCallbackQuery();

if ($callbackQuery !== null && $callbackQuery->getData() === 'result') {
    $bot->answerCallbackQuery(
        $callbackQuery->getId(),
        'Catched the callback query! :)',
        true
    );
}