@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-Й ИНЛАЙН КНОПКИ:
# удаление встроенных кнопок
      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-Й ИНЛАЙН КНОПКИ:
# удаление встроенных кнопок
      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="Преобразовано...!")


ЧТО Я СДЕЛАЛ НЕ ТАК?
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 3
Python Telegram Bot Inline Keyboard. Как сделать так, чтобы код первой кнопки не лез в код второй?
надо еще больше одинаковых вопросов и обязательно КАПСОМ
Ответ написан
@twistfire92
У вас 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)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
04 апр. 2020, в 23:07
30000 руб./за проект
04 апр. 2020, в 23:05
100000 руб./за проект
04 апр. 2020, в 22:57
5000 руб./за проект