← Вернуться к списку тем

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

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

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

Ответы


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

    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();
  • S.К [20.10.2020 в 16:54 → iMakeBots]
    Спасибо большое