Суть такая: пользователь через инлайн мод бота пишет @username и сообщение, которое хочет отправить. Бот сохраняет username того, кому отправляют, а также того, кто отправляет и само сообщение После чего бот присылает сообщение с кнопкой, которую нажать может тот юзер, кому оно было адресовано, остальным же бот напишет, что чужое сообщение нельзя прочитать
Функция получения сообщения из бд:
function message_get($username)
{
global $db;
$username = mysqli_real_escape_string($db, $username);
$query = ("SELECT message, receiver_id
FROM `secret_messages`
WHERE receiver_id = '$username'
ORDER BY id DESC LIMIT 1"); // Получить последний ID со строкой
$result = mysqli_query($db, $query) or die ("Получить сообщение не удалось");
return $result->fetch_assoc();
}
Сравнение юзернеймов получателя и того, кто нажимает на кнопку:
switch ($callback_data) {
case 'view_message':
$messageData = message_get($username); // Получение запроса из бд
if ($messageData['receiver_id'] == $username) { // Сравнение юзернейма/айди юзера, кому прислали сообщение и кто его читает
$alert_message = [
'callback_query_id' => $callback_query_id,
'text' => $messageData['message'],
'show_alert' => TRUE
];
sendRequest('answerCallbackQuery', $alert_message);
$message_read = [
'inline_message_id' => $inline_message_id,
'text' => '<b>Сообщение было прочитано</b> ✔',
'parse_mode' => 'html'
];
sendRequest('editMessageText', $message_read);
} elseif ($messageData['message'] == null) {
$alert_message = [
'callback_query_id' => $callback_query_id,
'text' => 'Такого сообщения не существует!',
'show_alert' => TRUE
];
sendRequest('answerCallbackQuery', $alert_message);
} elseif ($messageData['receiver_id'] != $username) {
$alert_message = [
'callback_query_id' => $callback_query_id,
'text' => 'Упс! Это не твое сообщение! ',
'show_alert' => TRUE
];
sendRequest('answerCallbackQuery', $alert_message);
}
break;
}
Проблема заключается в том, что после отправления сообщения, для нажавшего на кнопку человека достается когда-то адресованное ему сообщение. Если в данный момент сообщение пришло не ему, то он все равно может нажать на кнопку, но прочитает только старый запрос
Пример на скриншотах:
В итоге следующая ситуация - я пишу себе сообщение test и спокойно его читаю, затем пишу сообщение человеку с другим username и при нажатии на кнопку возвращается мое предыдущее сообщение, а не выводится от бота - Это не твое сообщение
Как можно по другому оформить функцию, чтобы каждому пользователю возвращалось свое сообщение, а другим выводилось, что оно чужое?