Принять две фотографии в одном сообщении с передачей переменной telebot python

Пишу бота который принимает данные от пользователя несколькими сообщениями и потом принимает фото, когда я отправляю боту два фото в одном сообщении происходит ошибка, как будто не передаются переменные в функцию, с одним фото все норм. Если убрать передачу аргументов тогда бот сохраняет два фото. Получается при принятии двух фото бот делает принятие каждой фотографии в отдельном потоке, только второй поток теряет параметры функции.

def get_text_messages_buy_tel_buy(message, city, iam, last, usluga, fio):
    print(f"|{message.text}|")
    if message.text == "/menu":
        menu(message.from_user.id)
    else:
        tel = message.text
        try:
            msg = bot.send_message(message.from_user.id,
                                   "Приктепите фото")
            bot.register_next_step_handler(msg, get_foto_buy, city, iam, last, usluga, fio, tel)
        except TypeError:
            msg = bot.send_message(message.from_user.id,
                                   "Прикрепляйте по одному фото за раззззззз")
            bot.register_next_step_handler(msg, get_text_messages_buy_tel_buy, city, iam, last, usluga, fio, tel)

@bot.message_handler(content_types=['document', 'photo', 'audio', 'video', 'voice', 'text'])  # list relevant content types
def get_foto_buy(message, city, iam, last, usluga, fio, tel):
    print(f"|{message.text}|")
    print(message)
    if message.text == "/menu":
        menu(message.from_user.id)
    if message:
        print("фото")
        fileID = str(message.chat.id)
Traceback (most recent call last):
  File "C:\Users\Владелец\PycharmProjects\bot_exch\main.py", line 1182, in <module>
    bot.polling(none_stop=True, interval=0)
  File "C:\Users\Владелец\PycharmProjects\bot_exch\venv\lib\site-packages\telebot\__init__.py", line 946, in polling
    self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
  File "C:\Users\Владелец\PycharmProjects\bot_exch\venv\lib\site-packages\telebot\__init__.py", line 1021, in __threaded_polling
    raise e
  File "C:\Users\Владелец\PycharmProjects\bot_exch\venv\lib\site-packages\telebot\__init__.py", line 977, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "C:\Users\Владелец\PycharmProjects\bot_exch\venv\lib\site-packages\telebot\util.py", line 154, in raise_exceptions
    raise self.exception_info
  File "C:\Users\Владелец\PycharmProjects\bot_exch\venv\lib\site-packages\telebot\util.py", line 98, in run
    task(*args, **kwargs)
TypeError: get_foto_buy() missing 6 required positional arguments: 'city', 'iam', 'last', 'usluga', 'fio', and 'tel'

Ответы (1 шт):

Автор решения: VItoSRostov

Решил проблему. Бот обрабатывает каждое сообщение в новом потоке, поэтому если посылать два фото в одну функцию он выполняет эту функцию в разных потоках. первый раз переменные передаются в функцию, второй раз уже нет. Я ввел значение по умолчанию для этих переменных и получилось, что первое выполнение проходит с переменными а второе без и в функции условие сделал, что если переменная ==0 тогда её не обрабатывать def get_foto_buy(message, city=0, iam=0, last=0, usluga=0, fio=0, tel=0):

            if city != 0:
            keyboard = telebot.types.ReplyKeyboardMarkup(True, one_time_keyboard=True)
            keyboard.row('Прикрепить еще фото', 'Завершить регистрацию')
            msg = bot.send_message(message.from_user.id, 'Прикрепить еще файл?',
                                   reply_markup=keyboard)
            bot.register_next_step_handler(msg, get_photo_check_buy, city, iam, last, usluga, fio, tel)
→ Ссылка