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

Как открыть обьект message?

Здравствуйте, сейчас сделал приветствие пользователей по уроку, в начале статьи было показаны данные JSON файла, как я могу открыть точно такой же файл? пытался через update, но не получилось

Ответы


  • iMakeBots [20.07.2020 в 20:06 → Ꮯʍуᴩɸиᴋ]
    Данные которые приходят от Телеграм запишите в файл. Откройте созданный файл, и там вы увидите нужные данные.

        private function setFileLog($data) {
            $fh = fopen('log.txt', 'a') or die('can't open file');
            ((is_array($data)) || (is_object($data))) ? fwrite($fh, print_r($data, TRUE)."n") : fwrite($fh, $data . "n");
            fclose($fh);
        }
    
  • Ꮯʍуᴩɸиᴋ [20.07.2020 в 20:23 → iMakeBots]
    Сделал, но данные почему-то не идут. Какие есть еще варианты?
  • iMakeBots [20.07.2020 в 20:24 → Ꮯʍуᴩɸиᴋ]
    Покажите код
  • Ꮯʍуᴩɸиᴋ [20.07.2020 в 20:40 → iMakeBots]
    
    /** Класс Бота
     * Class HelloBot
     */
    class HelloBot
    {
        // токен вашего бота
        private $token = "";
        // Приветствие пользователя
        private $helloText = "Привет, {%username%}. Ты попал(-а) в чат по кибер спорту!
            <a href=''>?Команды чата</a>
    
    ?Статистика-анализ кибер игр | 
    ?Пенальти FIFA | 
    ?Cyber Poker | 
    ?NHL BULLITE |
    ?Баккара | ";
    
        /** Стартуем  бота
         * @return bool
         */
        public function init()
        {
            // получаем данные от АПИ и преобразуем их в ассоциативный массив
            $rawData = json_decode(file_get_contents('php://input'), true);
            // направляем данные из бота в метод
            // для определения дальнейшего выбора действий
            $this->router($rawData);
            // в любом случае вернем true для бот апи
            return true;
        }
    
        /** Роутер - Определяем что делать с данными от АПИ
         * @param $data
         * @return bool
         */
    
        private function router($data)
        {
            if (array_key_exists("new_chat_participant", $data['message'])) {
                $name = trim($data['message']['new_chat_participant']['first_name']
                    . ' ' . $data['message']['new_chat_participant']['last_name']);
                $messageHello = $this->sendHello($data['message']['chat']['id'], $name);
                $this->delOld();
                $this->recData($data['message']['chat']['id'], $messageHello['result']['message_id']);
            }
            // удаление служебных сообщений в чате Телеграм
            if(array_key_exists("new_chat_participant", $data['message']) || array_key_exists("left_chat_participant", $data['message'])) {
                $this->botApiQuery("deleteMessage", [
                    'chat_id' => $data['message']['chat']['id'],
                    'message_id' => $data['message']['message_id']
                ]);
            }
            return true;
        }
    
        private function setFileLog($data) {
            $fh = fopen('log.txt', 'a') or die('can/t open file');
            ((is_array($data)) || (is_object($data))) ? fwrite($fh, print_r($data, TRUE)."n") : fwrite($fh, $data . "n");
            fclose($fh);
        }
    
        private function sendHello($chat_id, $name)
        {
            return $this->botApiQuery("sendMessage", [
                'chat_id' => $chat_id,
                'text' => str_replace("{%username%}", $name, $this->helloText),
                'disable_web_page_preview' => true,
                'parse_mode' => 'HTML'
            ]);
        }
    
        private function recData($chat_id, $message_id) {
            $handler = fopen("pid.txt", "w");
            fwrite($handler, $chat_id . "||" .$message_id);
            fclose($handler);
        }
    
        private function delOld() {
            if(file_exists("pid.txt")) {
                $data = file_get_contents("pid.txt");
                $data_ = explode("||", $data);
                $this->botApiQuery("deleteMessage", [
                    'chat_id' => $data_[0],
                    'message_id' => $data_[1]
                ]);
            }
        }
    
        /** Запрос к BotApi
         * @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;
        }
    }
    
  • iMakeBots [20.07.2020 в 20:44 → Ꮯʍуᴩɸиᴋ]
    Вы не вызвали метод логирования

    ...
    private function router($data)
        {
            // вызываем метод логирования и передаем в него объект $data
            $this->setFileLog($data);
    
            if (array_key_exists("new_chat_participant", $data['message'])) {
                $name = trim($data['message']['new_chat_participant']['first_name']
                    . ' ' . $data['message']['new_chat_participant']['last_name']);
                $messageHello = $this->sendHello($data['message']['chat']['id'], $name);
                $this->delOld();
                $this->recData($data['message']['chat']['id'], $messageHello['result']['message_id']);
            }
            // удаление служебных сообщений в чате Телеграм
            if(array_key_exists("new_chat_participant", $data['message']) || array_key_exists("left_chat_participant", $data['message'])) {
                $this->botApiQuery("deleteMessage", [
                    'chat_id' => $data['message']['chat']['id'],
                    'message_id' => $data['message']['message_id']
                ]);
            }
            return true;
        }
    ...
  • Ꮯʍуᴩɸиᴋ [20.07.2020 в 21:17 → iMakeBots]
    Спасибо.
  • Ꮯʍуᴩɸиᴋ [29.07.2020 в 21:59 → iMakeBots]
    Здравствуйте, проблема. Когда я вызываю setFileLog, то у меня перестает работать приветствие. Что делать?