@TchernyavskyDaniil

Почему вылетает NoneType?

Уважаемые, скажите пожалуйста, почему выскакивает ошибка NoneType, код приложил по ссылке, можете протестить на своем боте, вставив нужный кей. https://repl.it/repls/DisfiguredDisastrousOstrich До создания двух новых первых функций (см скрин) все норм работало, теперь при обрабатывании первого ифа в функции name, бот вылетает с NoneType. То есть, бот посылает текст и потом умирает. Есть идеи в чем проблема? Неоч в питоне и в ботах.

Суть работы: /first -> вирт клава с 2 вариантами, в итоге выйдем на -> /start -> вирт клава с 4 вариантами и выбираем нужный (тут краш происходит) -> бот вставляет текст и срабатывает хендлер -> бот присылает нужный запрос и спрашивает мол Еще? -> появляется новая клава

5a29ff4aa373c304278301.jpeg5a29ff645d278635356550.jpeg
import telebot
from telebot import types
from config import token

FIRST_KEYBOARD = ['Получить справку по ЮР', 'Статистика по бизнесу']

# Первая клавиатура
START_KEYBOARD = ['Найти ЮЛ по ОГРН', 'Найти ЮЛ по ИНН', 'Найти ЮЛ по названию','Найти ЮЛ по учередителю']

# Вторая клавитура
REPEAT_KEYBOARD = ['Еще', 'Отмена']

photo = open('kek.png', 'rb')

# Токен нашего бота
bot = telebot.TeleBot(token)

bot.mode = 0

@bot.message_handler(commands=['first'])
def first(mes):
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add(*[types.KeyboardButton(name) for name in FIRST_KEYBOARD])
    msg = bot.send_message(mes.chat.id, 'Давай приступим', reply_markup=keyboard)
    bot.register_next_step_handler(msg, firstOption)

def firstOption(mes):
    if mes.text == 'Статистика по бизнесу':
        bot.send_photo(mes.chat.id, photo)
        bot.send_message(mes.chat.id, 'Вернемся назад?', parse_mode='Markdown')
        bot.register_next_step_handler(mes, backToFirst)

    elif mes.text == 'Получить справку по ЮР':
        bot.register_next_step_handler(mes, start(mes))

@bot.message_handler(content_types=["text"])
def backToFirst(mes):
    if mes.text == 'Да':
        bot.register_next_step_handler(mes, first(mes))

    if mes.text == 'Нет':
        bot.send_message(mes.chat.id, 'Вбивай тогда следующую команду /start')


# Работает по /start
@bot.message_handler(commands=['start'])
def start(m):
    # bot.send_photo(m.chat.id, photo)
    # Создаем вирт клаву
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add(*[types.KeyboardButton(name) for name in START_KEYBOARD])
    msg = bot.send_message(m.chat.id, 'Кого выбираешь?',
        reply_markup=keyboard)

    # Переход на нашу функцию name
    bot.register_next_step_handler(msg, name)

def name(m):
    if m.text == 'Найти ЮЛ по ОГРН':
        bot.send_message(m.chat.id, 'Ответ по 1 запросу', parse_mode='Markdown')
        bot.mode = 1

    elif m.text == 'Найти ЮЛ по ИНН':
        bot.send_message(m.chat.id, 'Ответ по 2 запросу', parse_mode='Markdown')
        bot.mode = 2

    elif m.text == 'Найти ЮЛ по названию':
        bot.send_message(m.chat.id, 'Ответ по 3 запросу', parse_mode='Markdown')
        bot.mode = 3

    elif m.text == 'Найти ЮЛ по учередителю':
        bot.send_message(m.chat.id, 'Ответ по 4 запросу', parse_mode='Markdown')
        bot.mode = 4

# Если вбили любой текст
@bot.message_handler(content_types=["text"])
def text(message):

    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add(*[types.KeyboardButton(name) for name in REPEAT_KEYBOARD])

    # TODO: обработка входных данных
    bot.send_message(message.chat.id, "mode: " + str(bot.mode) + "\nКого выбираешь?", reply_markup=keyboard)

    bot.register_next_step_handler(message, refrest)

# Служит для возврата изначальной клавы
def refrest(message):
    print(message.text)
    bot.mode = 0

    # Нихуя не работает (работает!11)
    if message.text == 'Еще':
        bot.register_next_step_handler(message, start(message))

    # Если Отмена, то возврат на 1 шаг назад
    if message.text == 'Отмена':
        bot.register_next_step_handler(message, text(message))

if __name__ == '__main__':
    bot.polling(none_stop=True)
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы