Как сохранять переменные для нескольких пользователей?
Есть бот у которого всего 2 действия.
Д1. При вводе текста пользователем создается переменная содержащая текст который ввел пользователь и создается папка с именем соответствующим введенному тексту.
Д2. При отправке фото , бот загружает фото в папку которая была создана первым действием, подставляя в путь к папке для загрузки переменную из первого действия.
И когда пользователь 1, никаких проблем не возникает. Но если 2 человека +- в одно время, то в переменную записывается название папки последнего кто вводил текст и соответственно фото от обоих пользователей летят в 1 папку.
Собственно как реализовать какую то БД чтобы текст вводимый пользователем сохранялся в базе/тексте/листе/переменной привязываясь к его id или чат id во время Д1?
И как сделать так чтобы во время Д2, при отправке боту фото, бот проверял id человека который отправил фото , по id находил в базе/тексте/листе/переменной запись с названием папки которую автоматом подставлял бы в путь загрузки фото.
Ну и чтобы эта запись обновлялась в бд после каждого нового ввода текста юзером id которого используется для создания этой записи. Ну тоесть перезаписывалась чтобы не было путаницы при загрузке.
Используй глобальную переменную. Если надо что бы сохранялось между перезапусками то в данном случае можно использовать библиотеку SqliteDict (как самый простой вариант без заморочек заменить словарь на бд)
# pip install sqlitedict
import telebot
import os
# from sqlitedict import SqliteDict
BOT_TOKEN = 'YOUR_BOT_TOKEN'
bot = telebot.TeleBot(BOT_TOKEN)
# Словарь для хранения названий папок для каждого пользователя
user_folders = {}
# user_folders = SqliteDict('user_folders.db', autocommit=True)
@bot.message_handler(content_types=['text'])
def handle_text(message):
user_id = message.chat.id
folder_name = message.text
# Сохраняем название папки в словаре, привязав к ID пользователя
user_folders[user_id] = folder_name
# Создаем папку
try:
os.makedirs(folder_name, exist_ok=True)
bot.reply_to(message, f"Создана папка с именем: {folder_name}")
except OSError as e:
bot.reply_to(message, f"Ошибка при создании папки: {e}")
@bot.message_handler(content_types=['photo'])
def handle_photo(message):
user_id = message.chat.id
# Проверяем, есть ли для этого пользователя сохраненное название папки
if user_id in user_folders:
folder_name = user_folders[user_id]
file_info = bot.get_file(message.photo[-1].file_id)
downloaded_file = bot.download_file(file_info.file_path)
# Сохраняем фото в папку пользователя
src = os.path.join(folder_name, message.photo[-1].file_id + ".jpg") # Можно добавить logic для сохранения оригинального имени
with open(src, 'wb') as new_file:
new_file.write(downloaded_file)
bot.reply_to(message, f"Фотография сохранена в папку: {folder_name}")
else:
bot.reply_to(message, "Сначала введите название папки.")
if __name__ == '__main__':
bot.polling(none_stop=True)