@unnameds

Вызвать клавиатуру в прошлом меню?

У меня есть обычный бот
При нажатии /start Он отправляет стикер, и приветствуется снизу появляется 2 InlineКлавиатуры - Получить и Помощь
При нажатии Получить, бот редактирует приветствие на сообщение, Но мне нужно чтобы InlineКлавиатуры не исчезали

Как это сделать? Когда я просто пишу "reply_markup=markup" в @bot.callback_query_handler он его не видит
код:
import telebot
import config
import random

from telebot import types

bot = telebot.TeleBot(config.TOKEN)

@bot.message_handler(commands=['start'])
def welcome(message):
	sti = open('static/welcome.tgs', 'rb')
	bot.send_sticker(message.chat.id, sti)

	# keyboard
	markup = types.InlineKeyboardMarkup(row_width=2)
	item1 = types.InlineKeyboardButton(" Получить", callback_data='good')
	item2 = types.InlineKeyboardButton(" Помощь", callback_data='bad')
	markup.add(item1, item2)

	bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!\nНажми на - <b>Получить</b>, и я тебе скину нужные данные.".format(message.from_user, bot.get_me()),
		parse_mode='html', reply_markup=markup)

@bot.message_handler(content_types=['text'])
def lalala(message):
	if message.chat.type == 'private':

		if message.text == 'admin':
			bot.send_message(message.chat.id)
			
		else:
			bot.send_message(message.chat.id, 'Если есть вопросы то напишите @')

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:

            if call.data == 'good':
            	line = random.choice(open('pass.txt', encoding="utf-8").readlines())
            	bot.edit_message_text(message_id=call.message.id, chat_id=call.message.chat.id, text=f'''<code>{line}</code>''', parse_mode='HTML')
                #СУДА НУЖНО ДОБАВИТЬ КЛАВИАТУРУ С ПРИВЕТСТВИЯ
            elif call.data == 'bad':
                bot.send_message(call.message.chat.id, 'Если есть вопросы то напишите @')

    except Exception as e:
        print(repr(e))

# RUN
bot.polling(none_stop=True)
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
@Hitreno
Копипастер со стажем
Вы объявили клавиатуру markup внутри функции welcome, поэтому клавиатуру нельзя вызвать из другой функции (callback_inline). Объявите клавиатуру вне функций, до всех хэндлеров, так будет работать.
Рабочий код
import telebot
import config
import random

from telebot import types

bot = telebot.TeleBot(config.TOKEN)

markup = types.InlineKeyboardMarkup(row_width=2)
item1 = types.InlineKeyboardButton(" Получить", callback_data='good')
item2 = types.InlineKeyboardButton(" Помощь", callback_data='bad')
markup.add(item1, item2)

@bot.message_handler(commands=['start'])
def welcome(message):
  sti = open('static/welcome.tgs', 'rb')
  bot.send_sticker(message.chat.id, sti)

  bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!\nНажми на - <b>Получить</b>, и я тебе скину нужные данные.".format(message.from_user, bot.get_me()),
    parse_mode='html', reply_markup=markup)

@bot.message_handler(content_types=['text'])
def lalala(message):
  if message.chat.type == 'private':

    if message.text == 'admin':
      bot.send_message(message.chat.id)
      
    else:
      bot.send_message(message.chat.id, 'Если есть вопросы то напишите @')

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:

            if call.data == 'good':
            	line = random.choice(open('pass.txt', encoding="utf-8").readlines())
            	bot.edit_message_text(message_id=call.message.id, chat_id=call.message.chat.id, text=f'''<code>{line}</code>''', parse_mode='HTML')
                #СУДА НУЖНО ДОБАВИТЬ КЛАВИАТУРУ С ПРИВЕТСТВИЯ
            elif call.data == 'bad':
                bot.send_message(call.message.chat.id, 'Если есть вопросы то напишите @')

    except Exception as e:
        print(repr(e))

# RUN
bot.polling(none_stop=True)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы