@elric180

Почему в TelegramAPI не обрабатывается кнопка и не вызывается функция?

Не обрабатывается кнопка и не вызывается функция в следующим коде:
def inlin2(c):
	print("hi")
	if c.data == 'news':
		print("Hi")
		bot.send_message(c.message.chat.id, 'Новость1')
bot.polling(none_stop=True)

Никак не могу понять в чем проблема,все делала по инструкции,но нет результата. При нажатии на кнопку - нет эмоций, хотя остальные писались по такому же алгоритму и работают.
Весь код
# -*- coding: utf-8 -*-

import telebot
from telebot import types
TOKEN = ""
bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['start'])
def exchange_command(message):  
	keyboard = telebot.types.InlineKeyboardMarkup()
	keyboard.row(
      telebot.types.InlineKeyboardButton('Жилье в Москве', callback_data='homeMoscow'),
      telebot.types.InlineKeyboardButton('Работа в Москве', callback_data='workMoscow'),
      telebot.types.InlineKeyboardButton('Новости', callback_data='news'),
      )
	keyboard.row(
		telebot.types.InlineKeyboardButton('Найти попутчиков для поездки', callback_data='findpeop'))

	keyboard.row(
      telebot.types.InlineKeyboardButton('Передача вещей из городов', callback_data='getGorod'),
      telebot.types.InlineKeyboardButton('Скидки от наших партнеров', callback_data='sale'),
      )

	bot.send_message(message.chat.id, 'Добро пожаловать ! Тут будет Ваш текст', reply_markup=keyboard)



@bot.callback_query_handler(func=lambda c:True)


def inlin(c):
	if c.data == 'homeMoscow':
		keyboard = telebot.types.InlineKeyboardMarkup()
		keyboard.row(
			telebot.types.InlineKeyboardButton('Ищу жилье в Москве', callback_data='findMoscow'),
			)
		keyboard.row(
			telebot.types.InlineKeyboardButton('Предложу жилье в Москве без комиссии', callback_data='getMoscow'),
			)
		keyboard.row(
			telebot.types.InlineKeyboardButton('Квартира сдалась удалить объявление', callback_data='delstatus'),
			)
		bot.send_message(c.message.chat.id, 'Раздел Жилье в Москве',reply_markup=keyboard)
	if c.data == 'workMoscow':
		keyboard = telebot.types.InlineKeyboardMarkup()
		keyboard.row(
			telebot.types.InlineKeyboardButton('Ищу работу', callback_data='findwork'),
			telebot.types.InlineKeyboardButton('Предложить работу', callback_data='getwork'),
			)
		bot.send_message(c.message.chat.id, 'Раздел Работа в Москве',reply_markup=keyboard)	
	if c.data == 'news':
		keyboard = telebot.types.InlineKeyboardMarkup()
		keyboard.row(
			telebot.types.InlineKeyboardButton('Новости', callback_data='findnews'),
			telebot.types.InlineKeyboardButton('Предложить новсть', callback_data='getnews'),
			)
		bot.send_message(c.message.chat.id, 'Раздел Новости',reply_markup=keyboard)


	if c.data == 'findpeop':
		keyboard = telebot.types.InlineKeyboardMarkup()
		keyboard.row(
			telebot.types.InlineKeyboardButton('Я еду из Астрахани', callback_data='downAstra'),
			)
		keyboard.row(
			telebot.types.InlineKeyboardButton('Я еду в Астрахань', callback_data='getAstra'),
			)
		keyboard.row(
			telebot.types.InlineKeyboardButton('Готов взять с собой в Москву', callback_data='getsaleMoscow'),
			telebot.types.InlineKeyboardButton('Помощь(FAQ)', callback_data='help'),
			)
		bot.send_message(c.message.chat.id, 'Раздел Поиск попутчиков',reply_markup=keyboard)
	if c.data == 'getGorod':
		keyboard = telebot.types.InlineKeyboardMarkup()
		keyboard.row(
			telebot.types.InlineKeyboardButton('Я еду из Астрахани в Москву, готов взять до 1 кг', callback_data='getMoscow1'),
			)
		keyboard.row(
			telebot.types.InlineKeyboardButton('Я еду из Москвы в Астрахань, готов передать до 1кг', callback_data='getMoscowAstra'),
			)
		keyboard.row(
			telebot.types.InlineKeyboardButton('Мне надо передать в Москву до 1 кг', callback_data='getMoscow1'),
			)
		bot.send_message(c.message.chat.id, 'Раздел Передача вещей из городов',reply_markup=keyboard)


@bot.callback_query_handler(func=lambda c:c.data in ["findnews", "sds"])


def inlin2(c):
	print("hi")
	if c.data == 'news':
		print("Hi")
		bot.send_message(c.message.chat.id, 'Новость1')



bot.polling(none_stop=True)
  • Вопрос задан
  • 373 просмотра
Пригласить эксперта
Ответы на вопрос 1
@neggod
1) Декораторы надо "прижимать вплотную" к объявлению метода.
2) Код выполняется сверху вниз.
@bot.callback_query_handler(func=lambda c:True)


def inlin(c):
перехватывает все колбэки и
@bot.callback_query_handler(func=lambda c:c.data in ["findnews", "sds"])


def inlin2(c):
не достаётся ничего.
Поменяйте их местами.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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