'NoneType' object is not callable / pytelegrambot api

Рейтинг: 0Ответов: 1Опубликовано: 12.04.2023

при попытке перезаписать глобальную переменную вылетает нон тайп ошибка вылетает в fio = message.text при попытке записать текст пользователя в переменную Весь код:

import telebot
from telebot import types
import smtplib, ssl

TOKEN = '************************'
bot = telebot.TeleBot(TOKEN)

smtp_server = "smtp.gmail.com"
sender_email = "*****************"
receiver_email = "********************"
password = '***********************'
context = ssl.create_default_context()
fio = None
@bot.message_handler(commands=['start'])
def start(message):
    global fio, birth_date, passport_date,passport_org
    fio = None
    print(fio)
    markup = types.InlineKeyboardMarkup()
    rus = types.InlineKeyboardButton("🇷🇺 Русский 🇷🇺", 
callback_data='rus')
    markup.row(rus)
    mess = f"Здравствуйте, <b>{message.from_user.first_name} 
{message.from_user.last_name}</b>! Выберете язык дальнейшего 
общения:"
    bot.send_message(message.chat.id, mess, parse_mode='html', 
reply_markup=markup)

@bot.callback_query_handler(func=lambda callback: True)
def callback_message(callback):
    if callback.data == 'rus':
        bot.send_message(callback.message.chat.id, 'Еще раз 
здравствуйте! Я ваш персональный бот помощник! Я здесь чтобы помочь 
вам устроиться  в фирму ЭГИДА.',
parse_mode='html')
        rus(callback.message)
    if callback.data == 'yes_rus':
        bot.send_message(callback.message.chat.id, 'Отправляю 
ваши данные для рассмотрения')
        bot.register_next_step_handler(callback.message, 
push_to_mail())
    if callback.data == 'no_rus':
        bot.send_message(callback.message.chat.id, 'Введите ваши 
данные повторно, более внимательно')
        bot.register_next_step_handler(callback.message, 
start(callback.message))

def rus(message):
    bot.send_message(message.chat.id, 'Чтобы зарегистрировать вас 
нам нужно собрать некоторые данные. Пожалуйста введите ваши имя 
фамилию и отчество')
    bot.register_next_step_handler(message, get_fio_rus)

def get_fio_rus(message):
    global fio
    fio = message.text
    print(fio)
    bot.register_next_step_handler(message, final_rus(message))
def final_rus(message):
    global fio
    markup = types.InlineKeyboardMarkup()
    yes = types.InlineKeyboardButton("Верно", 
callback_data="yes_rus")
    no = types.InlineKeyboardButton("Неверно", 
callback_data="no_rus")
    markup.add(yes, no)
    bot.send_message(message.chat.id, "Проверьте ваши данные")
    bot.send_message(message.chat.id, f"ФИО: {fio}")
    bot.send_message(message.chat.id, f"Все верно?", 
reply_markup=markup)


def push_to_mail():
    global fio
    m = f'{fio}'.encode('utf-8')
    with smtplib.SMTP(smtp_server, port) as server:
        server.starttls(context=context)
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, m)


 bot.polling(none_stop=True)

код ошибки:

Traceback (most recent call last):
    File "C:\Users\Сергей\Desktop\bot\test.py", line 70, in 
    <module>
        bot.polling(none_stop=True)
    File "C:\Users\Сергей\Desktop\bot\venv\Lib\site- 
    packages\telebot\__init__.py", line 1043, in polling
    self.__threaded_polling(non_stop=non_stop, interval=interval, 
        timeout=timeout, 
        long_polling_timeout=long_polling_timeout,
    File "C:\Users\Сергей\Desktop\bot\venv\Lib\site- 
    packages\telebot\__init__.py", line 1118, in 
    __threaded_polling
        raise e
    File "C:\Users\Сергей\Desktop\bot\venv\Lib\site- 
    packages\telebot\__init__.py", line 1074, in 
    __threaded_polling
        self.worker_pool.raise_exceptions()
    File "C:\Users\Сергей\Desktop\bot\venv\Lib\site- 
    packages\telebot\util.py", line 148, in raise_exceptions
        raise self.exception_info
    File "C:\Users\Сергей\Desktop\bot\venv\Lib\site- 
    packages\telebot\util.py", line 91, in run
        task(*args, **kwargs)
TypeError: 'NoneType' object is not callable

Ответы

▲ 1Принят

Скорее всего ошибка связана с этими строками:

bot.register_next_step_handler(callback.message, start(callback.message))
                                                 ^^^^^^^^^^^^^^^^^^^^^^^
...
bot.register_next_step_handler(message, final_rus(message))
                                        ^^^^^^^^^^^^^^^^^^

Вторым аргументом надо передавать функцию, а вы передаёте результат вызова функции, т.е. None, поскольку эти функции ничего не возвращают. Правильно так:

bot.register_next_step_handler(callback.message, start)
...
bot.register_next_step_handler(message, final_rus)