@fakin_kiska
Telegram Bots and iOS

Почему бот из бд достает мое сообщение, когда должен вывести другой ответ?

Суть такая: пользователь через инлайн мод бота пишет @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;
}


Проблема заключается в том, что после отправления сообщения, для нажавшего на кнопку человека достается когда-то адресованное ему сообщение. Если в данный момент сообщение пришло не ему, то он все равно может нажать на кнопку, но прочитает только старый запрос

Пример на скриншотах:

616c7d401fd14544240294.png
616c7d493f8f8209803623.png
616c7d4fb6953746352321.png
616c7d5628689480928344.png
616c7d5f72d73570592786.png

В итоге следующая ситуация - я пишу себе сообщение test и спокойно его читаю, затем пишу сообщение человеку с другим username и при нажатии на кнопку возвращается мое предыдущее сообщение, а не выводится от бота - Это не твое сообщение

616c7de0a6800968163971.png

Как можно по другому оформить функцию, чтобы каждому пользователю возвращалось свое сообщение, а другим выводилось, что оно чужое?
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Yamaxila
При формировании запроса в базу нужно учитывать не username, а уникальный номер сообщения. При ответе из базы вы получите username, который уже и будете сравнивать. Если у вас сделан грамотный callback на нажатие кнопки, то подвязать уникальный номер сообщения будет не сложно
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 13:31
10000 руб./за проект
19 апр. 2024, в 13:12
35000 руб./за проект
19 апр. 2024, в 13:06
6000 руб./за проект