Таким образом если разом вступит 10 человек то не будет на 5 экранов висеть 10 приветсвенных текстов а будет лишь один.
Сейчас код выглядит так, но не удаление ни даже запись в файл не проходит(
/ Стартуем бота
* @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']);
// отправляем приветствие в чат
$pid_del_id = $this->botApiQuery("sendMessage", $data_send);
file_put_contents('pid.txt',$pid_del_id);
$data_send['message_id'] = $pid_del_id;
$this->botApiQuery("deleteMessage", $data_send);
$pid_del_id = $this->botApiQuery("sendMessage", [
'chat_id' => $data['message']['chat']['id'],
'text' => str_replace("{%username%}", $name, $this->helloText),
'disable_web_page_preview' => true,
'parse_mode' => 'HTML'
]
);
}
return true;
}
1. отправляешь сообщение с пустыми данными ($data_send) - записываешь в переменную $pid_del_id массив[] ответа после результата отправки - будет массив с ошибкой
2. записываешь массив[] ответа $pid_del_id в файл
3. $data_send['message_id'] присваиваешь массив[] ответа
4. удаляешь сообщение с неправильными данными (во-впервых в message_id дожнен быть int, во-вторых $data_send - не полный - отсутствует chat_id) - будет ошибка
Попробуйте вот этот код, правда его не тестировал
header("HTTP/1.1 200 OK"); header('Content-type: text/html; charset=utf-8'); $newBot = new HelloBot(); $newBot->init(); class HelloBot { private $token = "TOKEN"; private $helloText = "Hola, {%username%}! рады видеть вас в нашем чате."; public function init() { $rawData = json_decode(file_get_contents('php://input'), true); $this->router($rawData); return true; } 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 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] ]); } } 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; } }