
Подробнее о хостинге для размещения Телеграм бота можно узнать из статьи
Для создания такого простого бота как HelloBot нам нужно лишь словить служебные сообщения от Telegram Bot Api, которое отправляется из группы при добавлении нового участника. Новый участник может быть добавлен действующим участником, присоединиться по ссылке приглашению или самостоятельно присоединиться.
Нас интересует объект message
и в нем объект по ключу new_chat_participant
и там находиться информация о новом участнике.
Структура служебного уведомления:
Array
(
[update_id] =>
[message] => Array
(
[message_id] =>
[from] => Array
(
[id] =>
[is_bot] =>
[first_name] =>
[last_name] =>
[username] =>
[language_code] =>
)
[chat] => Array
(
[id] =>
[title] =>
[type] =>
[all_members_are_administrators] =>
)
[date] =>
[new_chat_participant] => Array
(
[id] =>
[is_bot] =>
[first_name] =>
[username] =>
)
[new_chat_member] => Array
(
[id] =>
[is_bot] =>
[first_name] =>
[username] =>
)
[new_chat_members] => Array
(
[0] => Array
(
[id] =>
[is_bot] =>
[first_name] =>
[username] =>
)
)
)
)
В наш класс бота добавим свойство, в котором будем хранить приветствие, имя пользователя {%username%} будем в последствии заменять на полученные данные из объекта функцией str_replace
<?php
// Приветствие пользователя
private $helloText = "Приветствую, {%username%}";
?>
Для получения необходимого объекта в методе router()
нашего класса сделаем проверку передаваемых данных и при наличии получим имя пользователя и выведем приветствие.
<?php
/** Роутер - Определяем что делать с данными от АПИ
* @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']);
// отправляем приветствие в чат
$this->botApiQuery("sendMessage", [
'chat_id' => $data['message']['chat']['id'],
'text' => str_replace("{%username%}", $name, $this->helloText)]
);
}
return true;
}
?>
Привожу исходный код бота приветствия для группы в Телеграм по типу HelloBot.
<?php
// определим кодировку UTF-8 и ответ 200
header("HTTP/1.1 200 OK");
header('Content-type: text/html; charset=utf-8');
// создаем объект бота
$newBot = new HelloBot();
// запускаем бота
$newBot->init();
/** Класс Бота
* Class HelloBot
*/
class HelloBot
{
// токен вашего бота
private $token = "ВАШ_ТОКЕН";
// Приветствие пользователя
private $helloText = "Приветствую, {%username%}";
/** Стартуем бота
* @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']);
// отправляем приветствие в чат
$this->botApiQuery("sendMessage", [
'chat_id' => $data['message']['chat']['id'],
'text' => str_replace("{%username%}", $name, $this->helloText)
]
);
}
return true;
}
/** Запрос к 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;
}
}
?>
Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте бот @SiteAuthBot,
нажмите кнопку Старт/Start. Следуйте инструкциям бота.
$this->botApiQuery("sendMessage", [
'chat_id' => $data['message']['chat']['id'],
'text' => str_replace("{%username%}", $name, $this->helloText),
'parse_mode' => 'html'
]
);