@KhinevichVladimir

Бот должен при команде /photo сохранять присланное после команды фото в одну папку, а при /photo1 в другую?

Вот что я написал:
import telebot
from telebot import types                                               # для указание типов
import config
bot = telebot.TeleBot('5968574660:AAFx_YTvm31qsHI9lLSst3OQJozm0KXQ3XU')
@bot.message_handler(commands=['photo'])
def start(message):
    bot.send_message(message.chat.id, "отправьте фото")
    @bot.message_handler(content_types=['photo'])
    def photo(message):   
        bot.send_message(message.chat.id, "0")
        fileID = message.photo[-1].file_id   
        file_info = bot.get_file(fileID)
        downloaded_file = bot.download_file(file_info.file_path)
        with open("E:/python/img0.jpg", 'wb') as new_file:
            new_file.write(downloaded_file)
            bot.send_message(message.chat.id, file_info)

@bot.message_handler(commands=['photo1'])
def start(message):
    bot.send_message(message.chat.id, "отправьте фото")
    @bot.message_handler(content_types=['photo'])
    def photo2(message):   
        bot.send_message(message.chat.id, "1")
        fileID = message.photo[-1].file_id   
        file_info = bot.get_file(fileID)
        downloaded_file = bot.download_file(file_info.file_path)
        with open("E:/python/img1.jpg", 'wb') as new_file:
            new_file.write(downloaded_file)
            bot.send_message(message.chat.id, file_info)

bot.polling(none_stop=True)
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Не надо внутри одной функции объявлять другую. Это не будет работать, вообще никак! Результатом будет дописывание в список хендлеров новых обработчиков, а так как условия в них уже описаны в других обработчиках, то эти никогда вызваны не будут.

Также при такой записи "внутренний" обработчик будет создаваться каждый раз заново. Короче, вытащить на верхний уровень, дать им другие имена и никогда так больше не делать.

В данном случае для решения задачи нужно использовать FSM. В telebot есть очень простая в использовании реализация FSM на основе вызовов register_next_step_handler пример.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект
22 нояб. 2024, в 22:26
3500 руб./за проект