Карусель сообщений

← К списку тем

Здравствуйте, можете дать пример?

Мне нужно отправить пост в бота
С гороскопом с кнопками (вчера |сегодня |завтра )
При нажатии на них текст должен меняется
Степан Казбекович 19.10.2020 в 16:41

Авторизуйтесь через Telegram, чтобы ответить.
Откройте бот @SiteAuthBot, нажмите кнопку Старт/Start. Следуйте инструкциям бота.


Ответы

  • По нажатию кнопок формируйте новые данные и меняйте текст в сообщени методом editmessagetext
    iMakeBots 20.10.2020 в 10:26
    • Можно простой пример ото я чайник))
      Степан Казбекович 20.10.2020 в 12:31
      • Не тестировал

        Class Bot
        {
            // Токен бота
            private $token = "TOKEN_BOT";
            // id пользователя которому бот будет отправлять примеры
            // укажите ваш id - узнать можно @myidbot
            private $userId = 0;
            // свойство в котором будем хранить переданные данные из Телеграм Бот АПИ
            private $data;
        
            /**
             * Bot constructor.
             */
            public function __construct()
            {
                // сохраняем данные из Телеграм Бот АПИ в свойство
                $this->data = json_decode(file_get_contents('php://input'), true);
                // запускаем роутер
                $this->router();
            }
        
            /** Роутер - определяет куда направлять запрос от Телеграм Бот АПИ
             * @return bool
             */
            private function router()
            {
                // проверяем на объект Message https://core.telegram.org/bots/api#message
                if (array_key_exists("message", $this->data)) {
                    // если это текстовое сообщение объекта Message
                    if (array_key_exists("text", $this->data['message'])) {
                        // если это команда /start
                        if ($this->data['message']['text'] == "/start") {
                            // вызываем метод обработки команды /start
                            $this->start();
                            // Можно отдельную кнопку клавиатуры обработать
                        } else {
                            return false;
                        }
                    } else {
                        return false;
                    }
                    // если это объект СallbackQuery https://core.telegram.org/bots/api#callbackquery
                } elseif (array_key_exists("callback_query", $this->data)) {
                    // получаем значение (название метода) под ключем 0 из callback_data кнопки inline
                    $method = current(explode("_", $this->data['callback_query']['data']));
                    // вызываем переданный метод и передаем в него весь объект callback_query
                    $this->$method($this->data['callback_query']);
                } else {
                    return false;
                }
            }
        
            /**
             * Старт бота
             */
            private function start()
            {
               $buttons = json_encode([
                   'inline_keyboard' => [
                       [
                           [
                               "text" => "Вчера",
                               "callback_data" => "actionInlineButton_yestoday"
                           ],
                           [
                               "text" => "Сегодня",
                               "callback_data" => "actionInlineButton_today"
                           ],
                           [
                               "text" => "Завтра",
                               "callback_data" => "actionInlineButton_tomorow"
                           ]
                        ]
                   ],
               ], true);
        
                // отправляем текстовое сообщение
                $this->botApiQuery("sendMessage", [
                    "chat_id" => $this->userId,
                    "text" => "Test",
                    "reply_markup" => $buttons
                ]);
            }
        
            /** Обработка Inline кнопки
             * @param $callback_data
             */
            private function actionInlineButton($callback_data)
            {
                $params = explode("_", $callback_data["data"]);
        
                // отправляем Уведомление
                $this->botApiQuery("answerCallbackQuery", [
                    "callback_query_id" => $callback_data["id"],
                    "text" => "Событие inline получено",
                    "alert" => false
                ]);
        
                // отправляем текстовое сообщение
                $this->botApiQuery("editmessagetext", [
                    "chat_id" => $this->userId,
                    "message_id" => $callback_data["message"]["message_id"],
                    "text" => "Параметр " . $params["1"],
                ]);
            }
        
            /** Запрос к Телеграм Bot Api
             * @param $method
             * @param array $fields
             * @return mixed
             */
            private function botApiQuery($method, $fields = array())
            {
                $ch = curl_init("https://api.telegram.org/bot" . $this->token . "/" . $method);
                curl_setopt_array($ch, array(
                    CURLOPT_POST => count($fields),
                    CURLOPT_POSTFIELDS => http_build_query($fields),
                    CURLOPT_SSL_VERIFYPEER => 0,
                    CURLOPT_RETURNTRANSFER => 1,
                    CURLOPT_TIMEOUT => 10
                ));
                $r = json_decode(curl_exec($ch), true);
                curl_close($ch);
                return $r;
            }
        }
        
        // Вызываем класс создания объекта Бота
        new Bot();
        iMakeBots 20.10.2020 в 15:09
        • Спасибо большое
          Степан Казбекович 20.10.2020 в 16:54