Telegram-бот не реагирует на команды. Python/Telebot
Я использую библиотеку telebot под python, для написания telegram бота. Я рефакторил управляющий скрипт и обнаружил, что бот перестал отзываться на команды. При попытке ввести '/start', 'start', воспользоваться любыми другими командами, которые поддерживает управляющий скрипт, ничего не происходит.
Интерпретатор не подсвечивал никаких ошибок, я уверен, что проблема может скрываться в функции get_message_bot или в декораторе @bot.message_handler(commands = ['start', 'refresh']). Что - то из них подхватило - бы введённую строку, но этого не происходит.
Это не проблема на стороне Telegram. Первая версия управляющего скрипта "отзывается" на команды и работает правильно. К сожалению, мне не удалось увидеть ошибку самостоятельно, я неопытен.
import telebot
from telebot import types
TOKEN = 'не хочу палить мой токен'
bot = telebot.TeleBot(TOKEN)
#Получение текста, что вводит пользователь
#Раздел костылей: проверка на команду '/команда'
@bot.message_handler(content_types=['text'])
def response(message):
get_message_bot = message.text.strip().lower()
@bot.callback_query_handler(func = lambda c:True)
def inln(inbutton):
if inbutton.data == 'rescue':
main(inbutton.message)
if inbutton.data == 'sos':
sos(inbutton.message)
#Главное меню
@bot.message_handler(commands = ['menu'])
def main(message):
#Удалил код, чтобы не нагромождать пост
bot.send_message(message.chat.id, maintext, reply_markup = markup) #Бот скинет данные в чат, увы, тут нужен костыль
if get_message_bot == 'продать':
newlot(message)
if get_message_bot == 'профайл':
profile(message)
#Выводится при первом запуске бота '/start'
#Выводится при перезапуске бота '/refresh'
@bot.message_handler(commands = ['start', 'refresh'])
def start(message):
#ВНИМАНИЕ! Необходимо сделать проверку согласно БАЗЕ ДАННЫХ
#Если пользователь зарегистрирован раннее, при команде /start даём полный доступ
starttext = message.from_user.first_name + ", добро пожаловать на маркетплейс! Давай для начала настроим твой профиль - без него, ты не сможешь воспользоваться сервисом."
starttext2 = message.from_user.first_name + ", ты в любой момент можешь посмотреть доступные команды. Набери /help Если у тебя внезапно пропали кнопки - эта команда точно поможет"
starttext3 = "Эта опция сейчас недоступна. Авторизируйтесь."
markup = types.ReplyKeyboardMarkup(resize_keyboard = True, row_width = 1)
entry_btn1 = types.KeyboardButton('Создать профиль')
entry_btn2 = types.KeyboardButton('Получить помощь')
entry_btn3 = types.KeyboardButton('У меня есть профиль')
markup.add(entry_btn1, entry_btn2, entry_btn3)
bot.send_message(message.chat.id, starttext1, reply_markup = markup)
bot.send_message(message.chat.id, starttext2, reply_markup = markup)
if get_message_bot == "у меня есть профиль":
main(message)
if get_message_bot == "получить помощь" or get_message_bot == "/support":
support(message)
else:
bot.send_message(message.chat.id, starttext3) #else может сработать некорректно
@bot.message_handler(commands = ['list'])
def helplist(message):
helptext = '''/start - в главное меню
/support - поддержка
/sos - написать модератору
/arbitry - арбитраж
/profile - редактировать профиль
/lots - посмотреть лоты
/setlot - выставить лот
/promo - посмотреть акции'''
helptext2 = 'У вас исчезли кнопки с экрана? Нажмите ниже, чтобы восстановить!'
bot.send_message(message.chat.id, helptext)
listkeyboard = types.InlineKeyboardMarkup()
keyboard.add(types.InlineKeyboardButton(text = 'Вернуть кнопки', callback_data = 'rescue'))
bot.send_message(message.chat.id, helptext2, reply_markup = listkeyboard)
bot.polling(none_stop = True)
Ответы (1 шт):
Коллеги, я обращаюсь ко всем, кто зайдёт на эту страничку. У проблемы есть решение. На stackoverflow куча постов с этим же вопросом, но без ответа. Экспериментальным путём я решил свою проблему.
Если у вас в боте есть декоратор, который обрабатывает текст пользователя:
@bot.message_handler(content_types=['text'])
def response(message):
get_message_bot = message.text.strip().lower()
То он должен находиться в самом низу вашего кода (разумеется, до bot.polling()). Любой код, который записан ниже этого декоратора (кроме bot.polling()) не будет выполнен.