Уважаемые, скажите пожалуйста, почему выскакивает ошибка NoneType, код приложил по ссылке, можете протестить на своем боте, вставив нужный кей.
https://repl.it/repls/DisfiguredDisastrousOstrich До создания двух новых первых функций (см скрин) все норм работало, теперь при обрабатывании первого ифа в функции name, бот вылетает с NoneType. То есть, бот посылает текст и потом умирает. Есть идеи в чем проблема? Неоч в питоне и в ботах.
Суть работы: /first -> вирт клава с 2 вариантами, в итоге выйдем на -> /start -> вирт клава с 4 вариантами и выбираем нужный (тут краш происходит) -> бот вставляет текст и срабатывает хендлер -> бот присылает нужный запрос и спрашивает мол Еще? -> появляется новая клава
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)