Почему передача массива ответов в мой класс сообщений не работает для моего бота PHP Telegram?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Почему передача массива ответов в мой класс сообщений не работает для моего бота PHP Telegram?

Сообщение Anonymous »


У меня возникла проблема с написанием базового «эхо-бота» Telegram на PHP (то есть такого, который повторяет все, что вы ему отправляете). Я написал класс Message, который не обязательно работает эффективно, но его использование кажется более интуитивным. Всякий раз, когда я передаю полученное сообщение экземпляру класса, оно перестает работать. Бот не отправляет обратно одно и то же сообщение. Но если я сделаю то же самое, не используя определенный мной класс Message, то это сработает. Я не уверен, что пошло не так. (Я не слишком хорошо знаком с PHP, поэтому прошу прощения, если это очевидно).

Я определил следующий класс:

Сообщение класса{ публичное $сообщение; публичный $текст; общественный $message_id; общественный $от; общедоступная $дата; публичный $чат; общественный $forward_from = ноль; общественный $forward_from_chat = ноль; общественный $reply_to_message = null; общественный $документ = ноль; общественный $reply_markup = null; публичная функция __construct($message){ $это->сообщение = $сообщение; $this->text = isset($this->message["text"]) ? $this->message["текст"]: ноль; $this->message_id = $this->message["message_id"]; $this->from = isset($this->message["from"]) ? новый пользователь($this->message["from"]): null; $this->date = $this->message["дата"]; $this->chat = новый чат($this->message["чат"]); $this->forward_from = isset($this->message["forward_from"]) ? новый пользователь($this->message["forward_from"]): null; $this->forward_from_chat = isset($this->message["forward_from_chat"]) ? новый чат($this->message["forward_from_chat"]): null; $this->reply_to_message = isset($this->message["reply_to_message"]) ? новое сообщение($this->message["reply_to_message"]): null; $this->document = isset($this->message["document"]) ? новый документ($this->message["документ"]): null; $this->reply_markup = isset($this->message["reply_markup"]) ? новый InlineKeyboardMarkup($this->message["reply_markup"]): null; } } Все остальные упомянутые здесь классы также определены аналогичным образом.

Я просто пытаюсь запустить следующее:

$content = file_get_contents('php://input'); $update = json_decode($content, true); define("API_KEY", "..."); // ... заголовок('Тип контента: приложение/json'); $message = isset($update["сообщение"]) ? новое сообщение($update["сообщение"]): ноль; file_get_contents("https://api.telegram.org/bot" . API_KEY "/sendMessage?chat_id=...&text=" . $message->text); В результате бот вообще не будет отвечать.

Изображение

Однако, если я вообще не использую свой класс Message, он работает

$content = file_get_contents('php://input'); $update = json_decode($content, true); define("API_KEY", "..."); // ... заголовок('Тип контента: приложение/json'); $message = $update["сообщение"]; file_get_contents("https://api.telegram.org/bot" . API_KEY "/sendMessage?chat_id=...&text=" . $message["text"]);
Изображение
Значит, я предполагаю, что с моим классом что-то не так? Но я не уверен в чем, потому что единственная разница между $message["text"] и $message->text заключается в том, что есть несколько дополнительных шагов. Ответ $update JSON на сообщение, которое я отправляю в чат-бот Telegram, выглядит следующим образом (после его кодирования с помощью json_encode):

{ «update_id»: 213123489, "сообщение": { «идентификатор_сообщения»: 362, "от": { "id": //ID ПОЛЬЗОВАТЕЛЯ, «is_bot»: ложь, "first_name": "Лейла", "имя пользователя": // ИМЯ ПОЛЬЗОВАТЕЛЯ, "language_code": "ru" }, "чат": { "id": // Идентификатор ЧАТа, "first_name": "Лейла", "имя пользователя": // ИМЯ ПОЛЬЗОВАТЕЛЯ, "тип": "частный" }, "дата": 1698423686, "текст": "Тест" } } Вебхук установлен, поэтому проблем быть не должно (дополнительным доказательством является то, что другой метод действительно работает). Вот ответ, который я получаю с помощью getWebhookInfo:

{ «ок»: правда, "результат": { "url": "https://***.com", «has_custom_certificate»: ложь, «pending_update_count»: 0, "max_connections": 40, "ip_address": // IP-АДРЕС } } Ссылки:
[*]Сообщение согласно определению в документации Telegram Bot API [*]Как определяются классы в PHP [*]Получение данных через вебхук
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»