@Novichek2000

Python Telegram Bot Inline Keyboard. Как сделать так, чтобы код первой кнопки не лез в код второй?

Я написал этот код, парился с поиском ошибки часов 10(если не больше), вчера с 19:00мск до 3:00мск и сегодня с 14:00мск до 16:30мск. Ошибку найти не удалось и я прибегнул к таким мерам, как спросить у людей, которые шарят, очень надеюсь на вашу поддержку !

import telebot
import config
import random
from telebot import types

bot = telebot.TeleBot('1**1*37612:AAEZ7r2P2Vg2tvYNB64_np28**KLHQ8t_9Q');

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
  try:
    if call.message:
      if call.data == 'good':
        bot.send_message(call.message.chat.id, 'Вот и отличненько ')
      if call.data == 'bad':
        bot.send_message(call.message.chat.id, 'Бывает ')
 
            # удаление встроенных кнопок
      bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=" Как дела?",
      reply_markup=None)
 
            # показать оповещение
      bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
        text="Преобразовано...")

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

def callback_inline(call):
  try:
    if call.message:
      if call.data == 'good1':
        bot.send_message(call.message.chat.id, 'Успокойся...')
      if call.data == 'bad1':
        bot.send_message(call.message.chat.id, 'Сорян, платки кончились...')
 
            # удаление встроенных кнопок
      bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Не пиши такое больше",
      reply_markup=None)
 
            # показать оповещение
      bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
        text="Преобразовано...!")
 
  except Exception as e:
    print(repr(e))

@bot.message_handler(content_types=['text'])
def get_text_messages(message):

  if message.text == "Как дела?":

    markup3 = types.InlineKeyboardMarkup()
    item1 = types.InlineKeyboardButton("Хорошо", callback_data='good')
    item2 = types.InlineKeyboardButton("Не очень", callback_data='bad')
 
    markup3.add(item1, item2)
 
    bot.send_message(message.chat.id, text='Отлично, сам(-а) как?', reply_markup=markup3)		

  if message.text == "Люблю тебя":
 
    markup4 = types.InlineKeyboardMarkup()
    item1 = types.InlineKeyboardButton("Разозлиться", callback_data='good1')
    item2 = types.InlineKeyboardButton("Вытереть слезки", callback_data='bad1')
 
    markup4.add(item1, item2)
 
    bot.send_message(message.chat.id, text='Выбрать действие:', reply_markup=markup4)

bot.polling(none_stop=True, interval=0)


Вот эти строчки из 1-й inline кнопки:
# удаление встроенных кнопок
      bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=" Как дела?",
      reply_markup=None)
 
            # показать оповещение
      bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
        text="Преобразовано...")


Мешают работе этого кода 2-й inline кнопки:
# удаление встроенных кнопок
      bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Не пиши такое больше",
      reply_markup=None)
 
            # показать оповещение
      bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
        text="Преобразовано...!")
  • Вопрос задан
  • 21208 просмотров
Пригласить эксперта
Ответы на вопрос 3
@twistfire92
Python backend developer
У вас 2 функции callback_inline()
Вторая, которая, собственно не делает ожидаемого, описана без декоратора @bot.callback_query_handler
Так что код этой функции вообще выполняться не будет.
первое - сделать названия функций различным(просто для удобства чтения кода)
второе - ко второй функции дописать хендлер
третье - использовать не func=lambda call: True, а
func=lambda call: call.data in ['good', 'bad'] в декораторе первой функции, и
func=lambda call: call.data in ['good1', 'bad1'] в декораторе второй

четвертое - ХВАТИТ ПИСАТЬ КАПСОМ!!! ВСЕ ВОТ ТАК ЖЕ ПО 10 ЧАСОВ БИЛИСЬ НАД КАКОЙ-ЛИБО ПРОБЛЕМОЙ!

А вообще можно вторую функцию удалить вообще, а всю ее логику перенести в первую и лямбду функцию в хендлере не менять.
будет уже 4 различных ветки с условиями, которые лучше переделать под
if good
elif bad
elif good1
elif bad1

в каждый добавить свой способ затирания inline кнопок.
Ответ написан
@Novichek2000 Автор вопроса
Теперь у меня не удаляются кнопки и не вылезает оповещение об удалении:

@bot.callback_query_handler(func=lambda call: call.data in ['good', 'bad', 'good1', 'bad1'])
def callback_inline(call):
	try:
		if call.message:
			if call.data == 'good':
				bot.send_message(call.message.chat.id, 'Вот и отличненько ')
			elif call.data == 'bad':
				bot.send_message(call.message.chat.id, 'Бывает ')
			elif call.data == 'good1':
				bot.send_message(call.message.chat.id, 'Славненько...')
			elif call.data == 'bad1':
				bot.send_message(call.message.chat.id, 'Сорян, платки кончились...')

            # удаление встроенных кнопок
			bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=" Как дела?",
			reply_markup=['good', 'bad'])
			bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Не пиши такое больше",
			reply_markup=['good1', 'bad1'])

            # показать оповещение
			bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
				text="Преобразовано...")

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

@bot.message_handler(content_types=['text'])
def get_text_messages(message):

	if message.text == "Как дела?":

		markup3 = types.InlineKeyboardMarkup(row_width=2)
		item1 = types.InlineKeyboardButton("Хорошо", callback_data='good')
		item2 = types.InlineKeyboardButton("Не очень", callback_data='bad')
 
		markup3.add(item1, item2)
 
		bot.send_message(message.chat.id, text='Отлично, сам(-а) как?', reply_markup=markup3)

	if message.text == "Люблю тебя":
 
		markup4 = types.InlineKeyboardMarkup(row_width=2)
		item1 = types.InlineKeyboardButton("Уйти...", callback_data='good1')
		item2 = types.InlineKeyboardButton("Вытереть слезки", callback_data='bad1')
 
		markup4.add(item1, item2)
 
		bot.send_message(message.chat.id, text='Выбрать действие:', reply_markup=markup4)

bot.polling(none_stop=True, interval=0)
Ответ написан
Комментировать
@NITRO45
import telebot
import config
import random
from telebot import types

bot = telebot.TeleBot("5294571589:AAG3bzjCbE6EBEIotJjYSP53DkGboK8CV-E")

@bot.callback_query_handler(func=lambda call: call.data in ['good', 'bad', 'good1', 'bad1'])
def callback_inline(call):
try:
if call.message:
if call.data == 'good':
bot.send_message(call.message.chat.id, 'Вот и отличненько ')
elif call.data == 'bad':
bot.send_message(call.message.chat.id, 'Бывает ')
elif call.data == 'good1':
bot.send_message(call.message.chat.id, 'Славненько...')
elif call.data == 'bad1':
bot.send_message(call.message.chat.id, 'Сорян, платки кончились...')

# удаление встроенных кнопок
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=" Как дела?",
reply_markup=['good', 'bad'])
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text="Не пиши такое больше",
reply_markup=['good1', 'bad1'])

# показать оповещение
bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
text="Преобразовано...")

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

@bot.message_handler(content_types=['text'])
def get_text_messages(message):
if message.text == "Как дела?":
markup3 = types.InlineKeyboardMarkup(row_width=2)
item1 = types.InlineKeyboardButton("Хорошо", callback_data='good')
item2 = types.InlineKeyboardButton("Не очень", callback_data='bad')

markup3.add(item1, item2)

bot.send_message(message.chat.id, text='Отлично, сам(-а) как?', reply_markup=markup3)

if message.text == "Люблю тебя":
markup4 = types.InlineKeyboardMarkup(row_width=2)
item1 = types.InlineKeyboardButton("Уйти...", callback_data='good1')
item2 = types.InlineKeyboardButton("Вытереть слезки", callback_data='bad1')

markup4.add(item1, item2)

bot.send_message(message.chat.id, text='Выбрать действие:', reply_markup=markup4)

bot.polling(none_stop=True, interval=0)

Код не работает(( не знаю что делать, кто может помогите пожалуйсто
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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