Задать вопрос
@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="Преобразовано...!")
  • Вопрос задан
  • 21313 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 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)

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

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

Похожие вопросы
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
19 янв. 2025, в 10:23
5000 руб./за проект
19 янв. 2025, в 07:48
500 руб./за проект