Мой код:
class ContentManager(SpecialistProfile):
lock = asyncio.Lock()
async def get_content(self, message: Message, bot: Bot, state: FSMContext) -> None:
date = f"{datetime.now().day}.{datetime.now().month}.{datetime.now().year}"
folder = os.path.join(CONTENT_DIR_PATH, date)
if not os.path.exists(folder):
os.makedirs(folder)
# Download content
async with lock:
data = await state.get_data()
content = data['content'] if 'content' in data else []
if message.photo:
short_path = os.path.join(
date, message.photo[-1].file_unique_id + '.png')
full_path = os.path.join(CONTENT_DIR_PATH, short_path)
await bot.download(file=message.photo[-1].file_id, destination=full_path)
else:
if message.video.duration > 20:
await message.answer("Ваше видео сильно длинное, загрузите пожалуйста видео до 20с!")
return
short_path = os.path.join(
date, message.video.file_unique_id + '.mp4')
full_path = os.path.join(CONTENT_DIR_PATH, short_path)
await bot.download(file=message.video.file_id, destination=full_path)
content.append(short_path)
await state.update_data(content=content)
len_content = len(content)
if len_content <= 9:
await message.answer(f"Добавлено - {len_content} из 10. Еще одно?", reply_markup=rp_save)
else:
await self.confirmation(message=message, state=state)
Этот метод я вношу в регистр:
dp.message.register(photo_manager.get_content, FillingSpecialistProfile.CONTENT, F.photo)
dp.message.register(photo_manager.get_content, FillingSpecialistProfile.CONTENT, F.video)
Теперь о проблеме. Я с начало не заметил и создал один класс контент менеджера для всях юзеров и получалось так что если два человека отправляют фото в один момент то все фотографии становяться в очередь, а изначально была идея чтобы у каждого юзера отдельно фотографии становились в блокировку, а выходит из-за глобального блокировщика, фотографии 2 разных людей становятся в одну очередь. Я понимаю что мне нужно создавать отдельный блокировщик для каждого юзера который решил загрузить фотографии, но проблема в том что я не понимаю как я могу это внедрить в код телеграмм бота