Пишу веб-приложение на
PHP, в котором можно выполнять определенные действия. Возникла потребность в регистрации пользователей, а так же рассылке через бота (через него же восстановление пароля, а так же будуе дополняться другими функциями)
На сайте происходит регистрация пользователя корректно, после надо перейти по ссылке и зарегистрироваться через ТГ в боте, написанном на
pyTelegramBotAPI.
Когда пользователь нажимает на кнопку "к боту", то на сервере
создается папка, у которой название - логин пользователя, внутри json файл у которого название - тоже логин.
В боте настроено при первом обращении к нему - команда
/start по середине экрана.
После нажатия на нее бот берет id и записывает в бд, где логин = логин из json файла.
Но возникает проблема, когда несколько человек делает это одновременно, то первый, кто нажал, того id и запишется во всех записях людей, регистрировавшихся на данный момент (
работа через циклы, так как надо найти папку, выбрать, открыть, перебрать файлы и найти нужные и т.д.)
как это можно решить?
@bot.message_handler(commands=['start'])
def start(message):
user_id = message.from_user.id
subdirectories = glob.glob(directory)
if len(subdirectories) == 0:
error_log("Function: start(): folder is not exists")
else:
for target_directory in subdirectories:
folder_path = os.path.join(target_directory)
secure_code_files = [file for file in os.listdir(folder_path) if file.startswith("secure_code")]
login_files = [file for file in os.listdir(folder_path) if not file.startswith("secure_code")]
for login_file in login_files:
file_path = os.path.join(folder_path, login_file)
with open(file_path, "r") as file:
conn = None
try:
data = json.load(file)
login = data.get("login")
conn = create_connection('?','?','?','?')
cursor = conn.cursor()
query = "UPDATE `название таблицы` SET `здесь ID тг` = %s WHERE `логин` = %s;"
values = (user_id, login)
cursor.execute(query, values)
conn.commit()
cursor.close()
os.remove(file_path)
os.rmdir(folder_path)
bot.send_message(user_id, "Succes!")
except Exception as e:
bot.send_message(user_id, f"Error registering your login")
error_log(f"Function: start(): {str(e)}")
finally:
if conn:
conn.close()
Если у вас есть и другие предложения по улучшению данного кода - прошу, я всегда рад узнать новое и совершенствоваться.