Значения смешиваются в боте Telegram, когда 2 пользователя используют бота одновременно

#python #bots #telegram-bot #python-telegram-bot #py-telegram-bot-api

Вопрос:

Проблема: когда два или более пользователя используют эту функцию бота — представьте , что правильный ответ первого пользователя равен 30, а правильный ответ второго пользователя равен 10, проблема в том, что если первый пользователь даст неправильный ответ, то функция создаст новую головоломку (новые числа), и правильный ответ также изменится для первого пользователя, но мой код также изменит правильный ответ для второго пользователя.

я использую библиотеку python pyTelegramBotApi (Telebot)

Это мой код:

 n1 = random.randint(1, 100)
n2 = random.randint(1, 100)

# Generating Random Number For Verifications
def genrate_random():
    global n1, n2
    n1 = random.randint(1, 100)
    n2 = random.randint(1, 100)

# Bot Start Command
@bot.message_handler(commands=['start'])
def start_command(message):
    genrate_random()
    chat_id = message.chat.id
    prove_yourself(chat_id)

def prove_yourself(chat_id):
result = bot.send_message(chat_id, "ℹ️ Prove That You Are A Human!nn"   str(n1)   ' '   str(n2)   " = ?")
        bot.register_next_step_handler(result, verifyUser)

def verifyUser(message):
        if int(message.text) != int(n1   n2):
            bot.send_message(message.chat.id, '❌ Wrong Answer ❌')
            genrate_random()
            prove_yourself(message.chat.id)
        else:
          
            print("next step")
 

Комментарии:

1. если вы ничего не понимаете, пожалуйста, спросите меня

Ответ №1:

Ваша проблема в том, что, поскольку n1 и n2 являются глобальными, каждый раз, когда вы вызываете generate_random (в вашей функции есть опечатка), вы будете меняться n1 и n2 для всех пользователей. Так что избегайте этой строки:

 global n1, n2
 

Вместо этого создайте словарь, например, чтобы ключом карты был идентификатор чата, а значением был кортеж (n1, n2) , который создается вашей функцией для каждого идентификатора чата. Таким образом, для каждого отдельного пользователя (однозначно идентифицируемого идентификатором чата) у вас будет запись на карте для n1 и n2 . Как только пользователь закончит правильно решать головоломку, вы удалите идентификатор чата из словаря.