Задать вопрос
@delete3

Как реализовать одновременное использование Telegram бота несколькими пользователями?

Есть бот, написанный на Python, библиотека Telebot, LongPolling метод. Бот используется для приема показаний ЖКХ. При входе в бота запрашивается лицевой счет, затем телефон, идет поиск по базе, если соответствие найдено, то авторизация проходит и дальше появляется меню с возможностью передачи показаний. Так вот, если несколько человек пользуются ботом одновременно, то все значения в переменных смешиваются. Как реализовать параллельную работу бота? Вот кусок кода с проверкой лицевого счета
def liccheck(message):
    global licabon, flat, idlic, idhome
    licabon = str(message.text)
    conn = pyodbc.connect('DSN=Base;UID=1111;PWD=1111')
    cursor = conn.cursor()
    if is_number(licabon):
        query = """SELECT LIC
                    FROM TENANT
                    WHERE LIC=? """
        args = (licabon)
        try:
            cursor.execute(query, args)
        except:
            msg2 = bot.send_message(message.chat.id,
                                    "Лицевой счет <b>не найден.</b>\nПроверьте <b>правильнность ввода</b> и отправьте "
                                    "<b>номер ЛС снова.</b>\n", parse_mode='html')
            bot.register_next_step_handler(msg2, liccheck)
        else:
            lic_check = cursor.fetchone()
            conn.commit()
            if lic_check is None:
                msg1 = bot.send_message(message.chat.id,
                                        "Лицевой счет <b>не найден.</b>\nПроверьте <b>правильнность ввода</b> и отправьте "
                                        "<b>номер ЛС снова.</b>\n", parse_mode='html')
                bot.register_next_step_handler(msg1, liccheck)
            else:
                if licabon == str(lic_check[0]):
                    msg = bot.send_message(message.chat.id,
                                           "Лицевой счет " + str(
                                               licabon) + " найден." + "\n\n<b><i>Отправьте номер телефона, который привязан к вашему ЛС, для "
                                                                       "авторизации.</i></b>\n\nВы можете "
                                                                       "поделиться номером, <b>нажав на кнопку ниже</b>, "
                                                                       "либо написать свой номер в <b>ответном "
                                                                       "сообщении.</b> \n\n<b>Внимание!</b>\nВвод номера "
                                                                       "начинайте с <b>7</b>, без пробелов.\n\nЧтобы вернуться назад "
                                                                       "нажмите сюда: /back.",
                                           reply_markup=keyboard, parse_mode='html')
                    bot.register_next_step_handler(msg, auth)
                    conn = pyodbc.connect('DSN=Base;UID=1111.;PWD=1111')
                    cursor = conn.cursor()
                    query = """SELECT idflat
                                    FROM TENANT
                                    WHERE LIC=? """
                    args = (licabon)
                    cursor.execute(query, args)
                    flat = cursor.fetchone()
                    flat = str(flat).replace('(', '').replace(',', '').replace(')', '').replace("'", '')
                    query = """SELECT idlic
                                                       FROM TENANT
                                                       WHERE LIC=? """
                    args = (licabon)
                    cursor.execute(query, args)
                    idlic = cursor.fetchone()
                    idlic = str(idlic[0]).replace('(', '').replace(',', '').replace(')', '').replace("'", '')
                    query = """SELECT idhome FROM TENANT WHERE LIC=? """
                    args = (licabon)
                    cursor.execute(query, args)
                    idhome = cursor.fetchone()
                    idhome = str(idhome[0]).replace('(', '').replace(',', '').replace(')', '').replace("'", '')
    else:
        msg7 = bot.send_message(message.chat.id,
                                "Лицевой счет <b>не найден.</b>\n\nПроверьте <b>правильнность ввода</b> и отправьте "
                                "<b>номер ЛС снова.</b>\n", parse_mode='html')
        bot.register_next_step_handler(msg7, liccheck)
  • Вопрос задан
  • 2571 просмотр
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@dimastbk
Первое, что приходит на ум - складывать данные каждого пользователя в словарь, где ключом будет userid (chatid)? Но насколько это верный способ, сказать не могу.
Ответ написан
shabelski89
@shabelski89
engineer
Первое что бросается в глаза это глобальные переменные! Вот у вас и каша.
Ответ написан
Ваш ответ на вопрос

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

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