Задать вопрос
@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

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

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

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