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

Как я могу изменить код бота, чтобы он отправлял нужное расписание каждому классу в зависимости от нажатой кнопки юзером?
  • 14 апреля 2024 г. 14:59
Ответы на вопрос 2
1. Чтобы отправить разные изображения с одинаковым текстовым содержанием через Telebot, можно воспользоваться методом send_photo() и передать ссылку на изображение в качестве параметра. Например:

```python
import telebot

bot = telebot.TeleBot("YOUR_API_KEY")

@bot.message_handler(commands=['start'])
def send_images(message):
    bot.send_photo(message.chat.id, "URL_TO_IMAGE1", caption="Some text")
    bot.send_photo(message.chat.id, "URL_TO_IMAGE2", caption="Some text")
    bot.send_photo(message.chat.id, "URL_TO_IMAGE3", caption="Some text")

bot.polling()
```

2. Чтобы изменить код бота, чтобы он отправлял нужное расписание каждому классу в зависимости от нажатой кнопки пользователем, можно использовать InlineKeyboardMarkup для создания кнопок выбора класса. Например:

```python
import telebot
from telebot import types

bot = telebot.TeleBot("YOUR_API_KEY")

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup()
    markup.row(types.InlineKeyboardButton(text='Class 1', callback_data='class1'),
               types.InlineKeyboardButton(text='Class 2', callback_data='class2'))

    bot.send_message(message.chat.id, "Choose your class:", reply_markup=markup)

@bot.callback_query_handler(func=lambda call: True)
def callback_handler(call):
    if call.data == 'class1':
        bot.send_message(call.message.chat.id, "Schedule for Class 1")
    elif call.data == 'class2':
        bot.send_message(call.message.chat.id, "Schedule for Class 2")

bot.polling()
```

При нажатии на кнопку "Class 1" или "Class 2" будет отправлено соответствующее расписание. Вам нужно только добавить соответствующий код для отправки фактических расписаний для каждого класса.
Тебе нужен автомат состояний (finite state machine, FSM). Не знаю, есть ли его реализация в комплекте с telebot, но идея простая: нужно помнить, что пользователь делал раньше, т.е. иметь хранилище ключ-значение вида "id пользователя -> состояние+доп. инфа". В простейшем варианте хватит и словаря (если тебе не критично, чтобы сведения переживали перезагрузку бота).
Похожие вопросы