TeleBot. Помогите пожалуйста, как сделать чтоб данные не путались?
Предположим одновременно 2 пользователя решили создать некий тест, они заполняют вопрос, ответ, название, после либо добавляют фото либо нет, и тут у меня возникла проблема что у 1 пользователя могли оказаться данные 2 пользователя и куча других проблем, пожалуйста помогите сделать код правильным
from telebot import types
import sqlite3
import os
def add_test(bot):
@bot.message_handler(commands=["add_test"])
def register_add_test_1(message):
sel = bot.send_message(message.chat.id, "Введите вопрос:")
bot.register_next_step_handler(sel, register_add_test_2)
def register_add_test_2(message):
user_text_question_test = message.text
sel = bot.send_message(message.chat.id, "Введите ответ:")
bot.register_next_step_handler(sel, register_add_test_3, user_text_question_test)
def register_add_test_3(message, user_text_question_test):
user_text_answer_test = message.text
sel = bot.send_message(message.chat.id, "Введите название:")
bot.register_next_step_handler(sel, s_test1, user_text_question_test, user_text_answer_test)
def s_test1(message, user_text_question_test, user_text_answer_test):
chat_id = message.chat.id
user_text_title_test = message.text
split_text_test = [user_text_question_test, user_text_answer_test, user_text_title_test]
print(split_text_test)
markup = types.InlineKeyboardMarkup()
buttonYES = types.InlineKeyboardButton(text='Да', callback_data=f"{chat_id}/Yes/")
buttonNO = types.InlineKeyboardButton(text='Нет', callback_data=f"{chat_id}/No/")
markup.add(buttonYES, buttonNO)
bot.send_message(message.chat.id, "Добавить фото:", reply_markup=markup)
calldata(split_text_test)
def calldata(split_text_test):
@bot.callback_query_handler(func=lambda call: call.data.startswith(f'{call.message.chat.id}/No/'))
def saveNO(call):
chat_id = call.message.chat.id
try:
bot.send_message(chat_id, "Добавлено!")
with sqlite3.connect('tests.db') as con:
cur = con.cursor()
cur.execute(f"INSERT INTO '{chat_id}' (vop,otv,name) VALUES('{split_text_test[0]}','{split_text_test[1]}','{split_text_test[2]}')")
except sqlite3.OperationalError:
bot.send_message(chat_id, "Вы не прошли регестрацию! Ее можно пройти здесь: /start")
return
except IndexError:
bot.send_message(chat_id, "Вы не верно ввели данные!")
return
@bot.callback_query_handler(func=lambda call: call.data.startswith(f'{call.message.chat.id}/Yes/'))
def saveYES(call):
chat_id = call.message.chat.id
split_text_test = call.data.split("/")
photo_register = bot.send_message(chat_id, "Ваше фото:")
bot.register_next_step_handler(photo_register, photo_id, split_text_test)
def photo_id(message, split_text_test):
chat_id = message.chat.id
fileID = message.photo[-1].file_id
file_info = bot.get_file(fileID)
downloaded_file = bot.download_file(file_info.file_path)
with open(f"{chat_id}.jpg", 'wb') as new_file:
new_file.write(downloaded_file)
with open(f"{chat_id}.jpg", "rb") as photo:
photo_read = photo.read()
with sqlite3.connect('tests.db') as con:
cur = con.cursor()
po = f'''INSERT INTO '{chat_id}' (vop,otv,name,photo) VALUES (?, ?, ?, ?)'''
cur.execute(po,(f'{split_text_test[0]}',f'{split_text_test[1]}',f'{split_text_test[2]}', photo_read,))
bot.send_message(message.chat.id, "Добавлено!")
os.remove(f"{chat_id}.jpg")