VK API, Python. Как устранить вмешательство других пользователей в цепочку сообщений с ботом?

У меня есть бот в вк, который при получении сообщения "Сообщить об ошибке" предлагает пользователю ввести текст, чтобы описать, что произошло, который после отправляется админу. Вот та часть кода:
def message_fail():
    try:
        for event in longpoll.listen():
            if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
                mess = str(event.user_id)
                mess_fail = event.text
                vk.messages.send(keyboard = keyboards.keyboard1.get_keyboard(), user_id=event.user_id, message='Сообщение отправлено администратору!.', random_id = random_id())
                vk.messages.send(user_id=admin_id, message='Поступило сообщение об ошибке от vk.com/id' + mess + '\n\nТекст обращения: ' + mess_fail, random_id = random_id())
                break
    except Exception as e:
         vk.messages.send(keyboard = keyboards.keyboard.get_keyboard(), user_id=event.user_id, message="Произошла неизвестная ошибка", random_id = random_id())


for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me:
        if event.text == 'Сообщить об ошибке':
            vk.messages.send(user_id=event.user_id, message='Опишите ошибку, как можно подробнее', random_id = random_id())
            message_fail()

Всё это дело работает, но есть проблема. Если один пользователь напишет "Сообщить об ошибке", получит сообщение, что надо ввести описание ошибки, а в этот же момент боту напишет другой пользователь, то бот отправит тот текст, который написал второй пользователь. Это всё происходит из-за for event in longpoll.listen():, но я не смог иначе реализовать цепочку сообщений. Подскажите, как пофиксить это. Буду благодарен.
  • Вопрос задан
  • 104 просмотра
Решения вопроса 2
OhMySenpai
@OhMySenpai
Начинающий программист
Если хочешь чтобы через беседу можно было бы, то пробуй подключить к своему боту базу данных. К примеру sqlite3: создай бд, поставь столбец айди пользователя(столбец)1, создай ещё один столбец для того что в данный момент он пишет о ошибке(столбец 2) (потом можешь ещё по надобности добавить). После того как пользователь пишет "Сообщить о ошибке" добавляй в столбец 2 какое-то значение (Например стандартное 0, а ты добавил 1), проверяй каждый ивент сообщений и проверяй айди через бд(и также добавляй если его нету, и просто также проверяй есть ли он или нет). Если этот пользователь написал ошибку - поменяй значение столбца 2 на 0 и выводи его сообщение себе. Можно ещё по другому, просто бот написал бы ему в личные сообщения, а потом уже ты бы вывел это себе. Если нужно будет код, то я напишу его когда проснусь
Ответ написан
@UberPool
Тебе нужно что-то вроде "системы состояний".
Я делаю это примерно так.
users = {}
users[event.message.from_id] = 0 #изменить состояние пользователя
if users[event.message.from_id] == 0:  #проверяем состояние пользователя

И после того как пользователь что-то написал,изменяем ему состояние и тд.Но этот вариант имеет смысл если эти данные не нужно постоянно хранить,в этом случае подойдет база данных sqlite,postgresql и тп.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы