#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
. Как только пользователь закончит правильно решать головоломку, вы удалите идентификатор чата из словаря.