Задать вопрос
@Nika980

Как сделать исчезающие сообщения в боте телеграм?

хочу, чтобы мой бот, когда люди пользуются его меню, удалял предыдущее отправленное сообщение автоматически.
мой бот выдает меню, где предлагает что-то выбрать, пользователь выбирает, открывается новое меню, а предыдущее, как бы, удаляется (Его больше не видно, чтобы его увидеть нужно вернуться назад).
Как бы это реализовать?
import telebot;
from telebot import types;
bot = telebot.TeleBot('*******************************')
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
    markup = types.InlineKeyboardMarkup()
    button1 = types.InlineKeyboardButton('Открыть галерею', callback_data='1')
    markup.row(button1)
    bot.send_message(message.from_user.id, f"Привет, ты в моем боте, выбери, что интересно:", reply_markup=markup)

    answer = ''
    if call.data == '1':
        markup = types.InlineKeyboardMarkup()
        button2 = types.InlineKeyboardButton('Далее', callback_data='2')
        markup.row(button2)
        bot.send_photo(call.message.chat.id, photo = open('1.jpg', 'rb'), disable_notification=True, caption=f'Арт за 21.12.22', reply_markup=markup)
        bot.answer_callback_query(callback_query_id=call.id)

        answer = ''
    if call.data == '2':
        markup = types.InlineKeyboardMarkup()
        button1 = types.InlineKeyboardButton('Назад', callback_data='1')
        button3 = types.InlineKeyboardButton('Далее', callback_data='2')
        markup.row(button1, button2)
        bot.send_photo(call.message.chat.id, photo = open('2.jpg', 'rb'), disable_notification=True, caption=f'Арт за 22.12.22', reply_markup=markup)
        bot.answer_callback_query(callback_query_id=call.id)

И вот мне надо чтобы если нажимаешь "Далее", предыдущее сообщение исчезало.
  • Вопрос задан
  • 3483 просмотра
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
OpenAI
@OpenAI
Вы можете удалять сообщения от бота вызывая функцию bot.delete_message в вашем коде:
bot.delete_message(chat_id=message.chat.id, message_id=message.message_id - 1)

chat_id указывает в какой чат отправлено сообщение, а message_id - идентификатор удаляемого сообщения.
Вот пример кода, который реализует поведение, описанное выше:
import telebot
from telebot import types

bot = telebot.TeleBot("YOUR_BOT_TOKEN_HERE")

@bot.message_handler(commands=["start"])
def start(message):
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Проверка")
    btn2 = types.KeyboardButton("Состояние системы")
    markup.add(btn1, btn2)
    bot.send_message(chat_id=message.chat.id, text="Приветствую, выберите нужный для вас раздел:", reply_markup=markup)

@bot.message_handler(func=lambda message: message.text == "Проверка")
def option_1(message):
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id - 1)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Вернутся")
    btn2 = types.KeyboardButton("Лимончик")
    btn3 = types.KeyboardButton("Груша")
    markup.add(btn1, btn2, btn3)
    bot.send_message(chat_id=message.chat.id, text="Был выбран раздел Проверка:", reply_markup=markup)

@bot.message_handler(func=lambda message: message.text == "Состояние системы")
def option_2(message):
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id - 1)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Вернутся")
    btn2 = types.KeyboardButton("Лимончик")
    btn3 = types.KeyboardButton("Груша")
    markup.add(btn1, btn2, btn3)
    bot.send_message(chat_id=message.chat.id, text="Был выбран раздел Состояние системы:", reply_markup=markup)

@bot.message_handler(func=lambda message: message.text == "Вернутся")
def back(message):
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id - 1)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Проверка")
    btn2 = types.KeyboardButton("Состояние системы")
    markup.add(btn1, btn2)
    bot.send_message(chat_id=message.chat.id, text="Выберите нужный для вас раздел:", reply_markup=markup)

@bot.message_handler(func=lambda message: message.text == "Лимончик")
def back(message):
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id - 1)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    bot.send_message(chat_id=message.chat.id, text="Была выбрана система проверки Лимончик.", reply_markup=markup)

@bot.message_handler(func=lambda message: message.text == "Груша")
def back(message):
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)
    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id - 1)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    bot.send_message(chat_id=message.chat.id, text="Была выбрана система проверки Груша.", reply_markup=markup)


bot.polling()

В этом коде я использую telebot.delete_message для удаления предыдущего сообщения перед отправкой нового.
Ответ написан
Ваш ответ на вопрос

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

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