@driverx18

Правильно ли пишу класс для бота Telegram?

Знаю что есть дофига готовых SDK для ботов Telegram, также знаю что ООП дается мне тяжко, и захотелось написать свой класс для работы с Telegram Bot API, очень хотел бы, чтобы знающие подсказали, в верном векторе я двигаюсь, нужно ли создавать свойства такие как token, api, или это абсурд и надо по другому как то порешать. Прошу подкорректировать по возможности. Код то сам по себе работает, но хочу научиться писать правильно. Спасибо
<?php
class Bot {
   private $token = ""; // тут ставлю токен сразу 

   private $api; // в конструкторе выставлю базовый адрес для вызова методов

   public $chatId; // ID чата

   public $message; // полученное сообщение от юзера

   public $output;

   public function __construct() { // сразу заинициализирую в конструкторе адрес апи, чат айди, сообщение..
      $this->api = 'https://api.telegram.org/bot' . $this->token;
      $this->output = json_decode(file_get_contents('php://input'), TRUE);
      $this->chatId = $this->output['message']['chat']['id'];
      $this->message = $this->output['message']['text'];
   }

   public function sendMessage($msg) { // метод отправки сообщений
      file_get_contents($this->api . '/sendMessage?chat_id=' . $this->chatId . '&text=' . $msg);
   }

   public function sendContact($phone, $name) { // метод отправки контакта
      file_get_contents($this->api . '/sendContact?chat_id=' . $this->chatId . '&phone_number=' . $phone . '&first_name=' . $name);
   }

}

$bot = new Bot; 
switch($bot->message) { // проверяем, какое сообщение получено
   case 'hi':
   $bot->sendMessage('halo');
   break;
   case 'contact':
   $bot->sendContact('380662312031', 'Anna');
   break;
   default:
   $bot->sendMessage($bot->message);
   break;
}
  • Вопрос задан
  • 875 просмотров
Пригласить эксперта
Ответы на вопрос 2
SPAHI4
@SPAHI4
реактовцы - это не девы, а прокидыватели пропсов
Много не скажу, на PHP давно не писал
1. Токен и остальные найстройки надо задавать аргументом конструктора, и брать его из окружения/конфиг файла
2. Можно использовать PHP7 тайпинги и ООП:
...
send($message: Message){}
...
$bot->send(new Message('text'))
...

3. Использовать http клиент, например, docs.guzzlephp.org/en/stable
4. Добавить парсинг комманд и чейнинг
$bot
  ->command('start', function() {})
  ->command('hello', function() {});

(не знаю, как коллбек-стайл будет смотреться в php)
Ответ написан
Stalker_RED
@Stalker_RED
Вместо сборки строки запроса вручную можно использовать http_build_query(), заодно отпадут проблемы типа "что, если тут $this->chatId . '&text=' . $msg); в $msg попадет &param=value?"

В switch/case обычно отступами размечают так, чтобы хорошо были видны границы блоков.
switch($bot->message) { // проверяем, какое сообщение получено
   case 'hi':
       $bot->sendMessage('halo');
       break;
   case 'contact':
       $bot->sendContact('380662312031', 'Anna');
       break;
   default:
       $bot->sendMessage($bot->message);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы