@Miklymi

Как отправить разные изображения для сообщений с одинаковым содержанием в Telebot?

Здравствуйте.
Пишу бота с расписанием уроков для школы и столкнулась с такой проблемой: мне нужно, чтобы бот отправлял изображение с расписанием разным классам, в соответствии с тем, какую кнопку нажмёт юзер, но так как в моменте выбора буквы класса(сначала юзер выбирает класс 5,6,7..., а затем букву А,Б,В...) они повторяются, то я не понимаю как сделать так, чтобы бот отправлял нужное расписание, а не расписание, к примеру "7а", вместо "5а".
Ниже прикрепляю код с пояснениями, буду благодарна за помощь.
import telebot
from telebot import types #импорт библиотеки и нужных нам функций
bot = telebot.TeleBot('токен')#привязываем бота к коду с помощью токена
newFile = open('users.txt', 'r')#открытие файла с id пользователей
users = set()
photo5a = open('5а.jpg', 'r')# и далее планируется добавить все изображения с расписанием, может через список
for line in newFile:
    users.add(line.strip()) # прочитывает каждую строку и добавляет её в set(), записывает id юзера в список
newFile.close()
@bot.message_handler(func=lambda x: x.text == 'Назад')#реализация клопки, которая возвращает в главное меню
@bot.message_handler(commands=['start']) #добавление комнады 'start'
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn5 = types.KeyboardButton('5') #кнопки
    btn6 = types.KeyboardButton('6')
    btn7 = types.KeyboardButton('7')
    btn8 = types.KeyboardButton('8')
    btn9 = types.KeyboardButton('9')
    btn10 = types.KeyboardButton('10')
    btn11 = types.KeyboardButton('11')
    markup.add(btn5, btn6, btn7, btn8, btn9, btn10, btn11) #инициируем кнопки
    if not str(message.chat.id) in users:
        newFile = open('users.txt', 'a')
        newFile.write(str(message.chat.id) + '\n')
        users.add(message.chat.id) #проверка того, есть ли id в set() и добавляет, если нет
    bot.send_message(message.chat.id,text='Привет! Это телеграм-бот с расписаниями уроков 5-11 классов для школы №21.\nДля продолжения выберите нужный класс:'.format(message.from_user), reply_markup=markup)
@bot.message_handler(content_types=['text'])#считывание текста
def func(message):
    if (message.text == '5'):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('А')
        btn2 = types.KeyboardButton('Б')
        btn3 = types.KeyboardButton('В')
        btn4 = types.KeyboardButton('Г')
        btnc = types.KeyboardButton('Назад')
        markup.add(btn1, btn2, btn3, btn4, btnc)
        bot.send_message(message.chat.id, text='Выбери нужный класс:', reply_markup=markup)
    elif (message.text == '6'):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('А')
        btn2 = types.KeyboardButton('Б')
        btn3 = types.KeyboardButton('В')
        btnc = types.KeyboardButton('Назад')
        markup.add(btn1, btn2, btn3, btnc)
        bot.send_message(message.chat.id, text='Выбери нужный класс:', reply_markup=markup)
    elif (message.text == '7'):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('А')
        btn2 = types.KeyboardButton('Б')
        btn3 = types.KeyboardButton('В')
        btnc = types.KeyboardButton('Назад')
        markup.add(btn1, btn2, btn3, btnc)
        bot.send_message(message.chat.id, text='Выбери нужный класс:', reply_markup=markup)
    elif (message.text == '8'):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('А')
        btn2 = types.KeyboardButton('Б')
        btn3 = types.KeyboardButton('В')
        btnc = types.KeyboardButton('Назад')
        markup.add(btn1, btn2, btn3, btnc)
        bot.send_message(message.chat.id, text='Выбери нужный класс:', reply_markup=markup)
    elif (message.text == '9'):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('А')
        btn2 = types.KeyboardButton('Б')
        btn3 = types.KeyboardButton('В')
        btnc = types.KeyboardButton('Назад')
        markup.add(btn1, btn2, btn3, btnc)
        bot.send_message(message.chat.id, text='Выбери нужный класс:', reply_markup=markup)
    elif (message.text == '10'):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('А')
        btn2 = types.KeyboardButton('Б')
        btnc = types.KeyboardButton('Назад')
        markup.add(btn1, btn2, btnc)
        bot.send_message(message.chat.id, text='Выбери нужный класс:', reply_markup=markup)
    elif (message.text == '11'):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('А')
        btn2 = types.KeyboardButton('Б')
        btnc = types.KeyboardButton('Назад')
        markup.add(btn1, btn2, btnc)
        bot.send_message(message.chat.id, text='Выбери нужный класс:', reply_markup=markup)
 
bot.infinity_polling()
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Тебе нужен автомат состояний (finite state machine, FSM). Не знаю, есть ли его реализация в комплекте с telebot, но идея простая: нужно помнить, что пользователь делал раньше, т.е. иметь хранилище ключ-значение вида "id пользователя -> состояние+доп. инфа". В простейшем варианте хватит и словаря (если тебе не критично, чтобы сведения переживали перезагрузку бота).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы