Почему не работает функция в PyCharm для Телеграмм бота?
Мне надо, чтобы когда пользователь нажимал на 'номер' он мог текстом ввести номер машины, а бот выводил название машины. Помогите пожалуйста!
import telebot
from telebot import types
bot = telebot.TeleBot('Токен')
@bot.message_handler(commands=['start'])
def start(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton("Поздороваться")
markup.add(btn1)
bot.send_message(message.from_user.id, "Привет! Я твой бот-помошник!", reply_markup=markup)
# Тут я думаю всё понятно
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
if message.text == 'Поздороваться':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton('Номер')
btn2 = types.KeyboardButton('Название')
btn3 = types.KeyboardButton('Все машины')
markup.add(btn1, btn2, btn3)
bot.send_message(message.from_user.id, 'Я помогу вам найти досье о машине.', reply_markup=markup)
bot.send_message(message.from_user.id, 'Какую информацию о машине вы знаете?', reply_markup=markup)
elif message.text == 'Номер':
bot.send_message(message.from_user.id, 'Введите гос номер авто', parse_mode='Markdown')
# Следующая функция почему-то игнорируется ботом
@bot.message_handler(content_types=['text'])
def get_text_messag(messags):
a = messags.lower()
if a == 'нффф' or a == '294':
bot.send_message(messags.from_user.id, '7 серебро', parse_mode='Markdown')
bot.send_message(messags.from_user.id, 'нффф', parse_mode='Markdown')
bot.send_message(messags.from_user.id, 'Текст', parse_mode='Markdown')
elif a == 'аффф' or a == '213':
bot.send_message(messags.from_user.id, '14 серебро', parse_mode='Markdown')
bot.send_message(messags.from_user.id, 'аффф', parse_mode='Markdown')
bot.send_message(messags.from_user.id, 'Текст', parse_mode='Markdown')
# А дальше всё работает
elif message.text == 'Название':
bot.send_message(message.from_user.id, 'Введите название машины', parse_mode='Markdown')
elif message.text == 'Все машины':
bot.send_message(message.from_user.id, 'Здесь вы можете увидеть перечинь машин', parse_mode='Markdown')
bot.polling(none_stop=True, interval=0)
Ответы (1 шт):
Автор решения: mrBars1k
→ Ссылка
Pycharm не имеет отношения к вопросу, это IDE, а не язык программирования.
В остальном, проблема в определениях функции; вы объявляете одну функцию внутри другой.
Попробуйте так:
import telebot
from telebot import types
bot = telebot.TeleBot('TOKEN')
@bot.message_handler(commands=['start'])
def start(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton("Поздороваться")
markup.add(btn1)
bot.send_message(message.from_user.id, "Привет! Я твой бот-помощник!", reply_markup=markup)
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
if message.text == 'Поздороваться':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton('Номер')
btn2 = types.KeyboardButton('Название')
btn3 = types.KeyboardButton('Все машины')
markup.add(btn1, btn2, btn3)
bot.send_message(message.from_user.id, 'Я помогу вам найти досье о машине.', reply_markup=markup)
bot.send_message(message.from_user.id, 'Какую информацию о машине вы знаете?', reply_markup=markup)
elif message.text == 'Номер':
bot.send_message(message.from_user.id, 'Введите гос номер авто', parse_mode='Markdown')
bot.register_next_step_handler(message, handle_car_number_input)
elif message.text == 'Название':
bot.send_message(message.from_user.id, 'Введите название машины', parse_mode='Markdown')
bot.register_next_step_handler(message, handle_car_name_input)
elif message.text == 'Все машины':
bot.send_message(message.from_user.id, 'Здесь вы можете увидеть перечень машин', parse_mode='Markdown')
def handle_car_number_input(message):
car_number = message.text
if car_number == 'нффф' or car_number == '294':
bot.send_message(message.from_user.id, '7 серебро', parse_mode='Markdown')
bot.send_message(message.from_user.id, 'нффф', parse_mode='Markdown')
bot.send_message(message.from_user.id, 'Текст', parse_mode='Markdown')
elif car_number == 'аффф' or car_number == '213':
bot.send_message(message.from_user.id, '14 серебро', parse_mode='Markdown')
bot.send_message(message.from_user.id, 'аффф', parse_mode='Markdown')
bot.send_message(message.from_user.id, 'Текст', parse_mode='Markdown')
def handle_car_name_input(message):
car_name = message.text
if message.text == 'Название':
bot.send_message(message.from_user.id, 'Введите название машины', parse_mode='Markdown')
#### здесь нужно дописать проверку по названию машины, аналогично с предыдущей функцией с номерами машин
def handle_car_name_input(message):
all_car = message.text
if message.text == 'Все машины':
bot.send_message(message.from_user.id, 'Здесь вы можете увидеть перечень машин', parse_mode='Markdown')
#### здесь можете написать логику вывода всех машин. Можете в список все занести и оттуда прогонять, вместо бесконечных if/elif и сделать для всех функции.
bot.polling(none_stop=True, interval=0)
Я бы рекомендовал вместо if/elif проверять по заданному списку элементы на совпадение и дальше уже создать логику вывода информации. А ещё лучше, если подключите SQL базу данных и через запросы будете работать.