Принять две фотографии в одном сообщении с передачей переменной 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 шт):
Решил проблему. Бот обрабатывает каждое сообщение в новом потоке, поэтому если посылать два фото в одну функцию он выполняет эту функцию в разных потоках. первый раз переменные передаются в функцию, второй раз уже нет. Я ввел значение по умолчанию для этих переменных и получилось, что первое выполнение проходит с переменными а второе без и в функции условие сделал, что если переменная ==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)