Половина кода не работает, После 50 строчки не работает код, пожалуйста объясните поподробнее что нужно сделать или поменять, не разбираюсь в терминах

import random

import telebot
from telebot import types


name = ''
surname = ''

bot = telebot.TeleBot("TOKEN", parse_mode=None)


@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton('Рандомное число(от 1 до 10)')
    item2 = types.KeyboardButton('ℹИнформация')

    markup.add(item1, item2)

    bot.send_message(message.chat.id, 'Привет, {0.first_name}!'.format(message.from_user), reply_markup=markup)


@bot.message_handler(content_types=["text"])
def bot_message(message):
    if message.chat.type == 'private':
        if message.text == 'Рандомное число(от 1 до 10)':
            bot.send_message(message.chat.id, 'Ваше число: ' + str(random.randint(0, 10)))
        elif message.text == 'ℹИнформация':
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item1 = types.KeyboardButton('Команды')
            item2 = types.KeyboardButton('Чтото')
            back = types.KeyboardButton('?Назад')
            markup.add(item1, item2, back)

            bot.send_message(message.chat.id, 'ℹИнформация', reply_markup=markup)

        elif message.text == '?Назад':
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item1 = types.KeyboardButton('Рандомное число(от 1 до 10)')
            item2 = types.KeyboardButton('ℹИнформация')

            markup.add(item1, item2)

            bot.send_message(message.chat.id, '?Назад', reply_markup=markup)

        elif message.text == 'Команды':
            bot.send_message(message.chat.id, '/reg - регистрация')


@bot.message_handler(func=lambda m: True)
def echo_all(message):
    if message.text == 'Привет':
        bot.reply_to(message, 'Привет')
    elif message.text == 'привет':
        bot.reply_to(message, 'привет')
    elif message.text == '/reg':
        bot.send_message(message.from_user.id, "Привет, Давай познакомимся! Как тебя зовут?")
        bot.register_next_step_handler(message, reg_name)
    # bot.reply_to(message, message.text)


def reg_name(message):
    global name
    name = message.text
    bot.send_message(message.from_user.id, "Какая у вас фамилия?")
    bot.register_next_step_handler(message, reg_surname)


def reg_surname(message):
    global surname
    surname = message.text

    keyboard = types.InlineKeyboardMarkup()
    key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes')
    keyboard.add(key_yes)
    key_no = types.InlineKeyboardButton(text='Нет', callback_data='no')
    keyboard.add(key_no)
    question = 'Тебя зовут: ' + surname + ' ' + name + '?'
    bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)


@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    if call.data == 'yes':
        bot.send_message(call.message.chat.id, 'Приятно познокомиться')
    elif call.data == 'no':
        bot.send_message(call.message.chat.id, 'Попробуем еще раз!')
        bot.send_message(call.message.chat.id, 'Привет, Давай познакомимся! Как тебя зовут?')
        bot.register_next_step_handler(call.message, reg_name)


bot.polling()

Ответы (1 шт):

Автор решения: oleksandrigo

Ну смотри, когда юзер что-то пишет боту, телеграм сообщает об этом собственно самому боту. Дальше бот проверяет это сообщение с помощью хендлеров, однако проверяет он их по порядку появления в коде.

То есть первый будет @bot.message_handler(commands=['start']) который проверяет не прислал ли юзер команду старт, если нет то идёт следующий хендлер @bot.message_handler(content_types=["text"]) который тебе собственно все и ломает, он принимает в себя любой ТЕКСТ то есть если бы ты отправил стикер, видео, или что нибудь что не является текстом он бы не сработал, однако ниже у тебя @bot.message_handler(func=lambda который вообще-то такой себе мусорщик, который принимает в себя всё. Но в этом "мусорщике" у тебя идёт проверка на текст, которая в свою очередь в этот хендлер не попадет из-за хендлера выше, который в себя впитывает любой текст.

Думаю причина более менее понятная. Как это исправить?

Ну ты можешь перетащить весь код который находится под "мусорщиком" в хендлер выше который принимает в себя текст. Но я бы вообще поменял то что ты написал на вот такое.

@bot.message_handler(func=lambda message: message.text=='Рандомное число(от 1 до 10)')
def rand_num(message):
    if message.chat.type == 'private':
      
  bot.send_message(message.chat.id, 'Ваше число: ' + str(random.randint(0, 10)))

@bot.message_handler(func=lambda message: message.text=='ℹИнформация')
def info(message):
    if message.chat.type == 'private':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            item1 = types.KeyboardButton('Команды')
            item2 = types.KeyboardButton('Чтото')
            back = types.KeyboardButton('?Назад')
            markup.add(item1, item2, back)

            bot.send_message(message.chat.id, 'ℹИнформация', reply_markup=markup)

@bot.message_handler(func=lambda message: message.text=='?Назад')
def back(message):
    if message.chat.type == 'private':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        item1 = types.KeyboardButton('Рандомное число(от 1 до 10)')
        item2 = types.KeyboardButton('ℹИнформация')

        markup.add(item1, item2)
      
  bot.send_message(message.chat.id, '?Назад', reply_markup=markup)

@bot.message_handler(func=lambda message: message.text=='Команды')
def back(message):
    if message.chat.type == 'private': 
      
 bot.send_message(message.chat.id, '/reg - регистрация')

Уверен есть способ избавиться и от лишнего условия (тит чата), но я не уверен как это сделать правильно итак весь код с телефона писал.

И думаю буду менее понятно что я сделал, вместо того чтобы был один хендлер в котором будут тысяча ифов я сделал тысячу хендлеров для каждого сообщения которое мне нужно обрабатывать. Зачем? Потому что так удобнее. Как минимум. А ещё так ты всегда будешь понимать что вообще происходит, какой хендлер сработал, какие в нем были условия и ТД.

Ах да я не трогал тот самый "мусорщик" так как честно говоря лень. Но в целом я думаю сделать с ним тоже самое не сложно. Ну или же, как я писал ранее, ты можешь просто перетащить код в хендлер выше.

→ Ссылка