Телеграм бот python бот не может корректно работать с несколько пользователями одновременно
@bot.message_handler(commands="start")
def start(message):
bot.send_message(message.chat.id, "Введи свое имя")
bot.register_next_step_handler(message, question1)
def question1(message):
user_name = message.text
# Дальше я эту переменную хочу записывать в какой то файл типа excel или еще какой то
но проблема в том что если бота одновременно используют 2 человека то эта переменная не успевая сохраниться запоминает только последнее значение, как это можно исправить, если отпишите подробно
Ответы (4 шт):
сам разбирался с этим вопросом два дня, увидел случайно методы словарей решил почитать и вроде разобрался, тоже советую к прочтению, как в пример могу привести тебе это
user_dict = {}
class User:
def __init__(self, name):
self.name = name
self.accumulation_rub = 0
self.income_rub = 0
self.expense_rub = 0
self.profit_rub = 0
self.memory_sum = 0
self.memory_sum_old = 0
@bot.message_handler(commands=['help', 'start'])
def send_welcome(message):
msg = bot.send_message(message.chat.id, 'Введите x')
bot.register_next_step_handler(msg, next_step_valuey)
def next_step_valuey(message):
chat_id = message.chat.id
name = message.from_user.id
userid = User(name)
user_dict[chat_id] = userid
valuex = message.text
userid = user_dict[chat_id]
userid.valuex = valuex
msg = bot.send_message(message.chat.id, f'Введите y', parse_mode =
'html')
bot.register_next_step_handler(msg, next_step_valuesum)
def next_step_valuesum(message):
chat_id = message.chat.id
valuey = message.text
userid = user_dict[chat_id]
userid.valuey = valuey
valuewalletsum = int(userid.valuex) + int(userid.valuey)
userid.valuewalletsum = valuewalletsum
bot.send_message(message.chat.id, f'x {userid.valuex} \n'
f'y {userid.valuey} \n'
f'sum {userid.valuewalletsum}')
Для этого необходимо записать id отправителя и его сообщение в словарь
def question1(message):
dict = {}
user_name = message.text
user_id = messgae.chat.id
d{user_id} = user_name
Не совсем понял вопрос. Всё там нормально работает для разных пользоватаелей. И в коде ошибка по-моему (если я правильно предположил ожидаемый результат) Вы должны передавать в next_step_handler сообщение бота, на которе он будет ожидать ответ, а вы передаете сообщение пользователя. То есть должно быть
@bot.message_handler(commands="start")
def start(message):
msg = bot.send_message(message.chat.id, "Введи свое имя")
bot.register_next_step_handler(msg, question1)
Не используйте message.chat.id в качестве пользователя!!!Он предназначен для групп, а для пользователей есть message.from_user.id Если использовать message.chat.id в качестве пользователя в группе то при использования кнопки, у всех будет также, как и у вас(если сделать многоуровневые кнопки) Советую использовать ассинхроный TeleBot либо же aiogram