Пишу бот, который принимает отправляемые пользователем картинки и сохраняет в разные папки в зависимости от нажатой кнопки. Столкнулся с проблемой: все изображения загружаются в ту папку, в которую фото было загружено в первый раз. То есть при нажатии первый раз кнопки send_mem - изображение сохранится в папке /mem, но если потом пользователь нажмет кнопку send_art то изображение все равно сохранится в папке /mem
Проблема в методе picture_saver и в самом хэндлере изображений
Просьба помочь разобраться.
from aiogram import Bot, Dispatcher, types
from aiogram.dispatcher import FSMContext
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.types import Message, KeyboardButton, ContentType, ReplyKeyboardRemove, ReplyKeyboardMarkup
from aiogram.utils import executor
storage = MemoryStorage()
# инициализация бота и диспетчера
bot = Bot(token='')
dp = Dispatcher(bot, storage=storage)
class MessageState(StatesGroup):
send_pic = State()
# сохранение изображения в папку указанную в path
def picture_saver(path):
@dp.message_handler(content_types=['photo'])
async def get_photo(message: types.Message):
try:
await message.photo[-1].download(destination_file=f"{path}/pic_{message.message_id}.jpg")
await bot.send_message(message.from_user.id, 'Download complete')
except Exception as ex:
print(ex)
@dp.message_handler(commands=['start'])
async def command_start(message: Message):
keyboard = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True).add('send mem', 'send art')
await message.answer("You can send me a pic", reply_markup=keyboard)
await MessageState.send_pic.set()
@dp.message_handler(lambda message: message.text == 'send mem', state=MessageState.send_pic)
async def send_mem(message: Message, state: FSMContext):
picture_saver("photo/mem")
await message.answer('Send mem')
await state.finish()
@dp.message_handler(lambda message: message.text == 'send art', state=MessageState.send_pic)
async def send_art(message: Message, state: FSMContext):
picture_saver("photo/art")
await message.answer('Send art')
await state.finish()
# запуск бота
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)