JiMoon
@JiMoon
меня тут ненавидят, потому что я говнокодер.

TypeError: 'NoneType' object is not callable телеграм бот?

Здравствуйте. Я пишу своего бота в Телеграм на python (pyTelegramBotAPI). Я не могу доработать своего бота до его работоспособности. Помогите пожалуйста исправить ошибку.
Код:
import telebot
from telebot import types

a = True
bot = telebot.TeleBot('token')
print(bot.get_me())

@bot.message_handler(commands=["start"])
def start(m):
    markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = telebot.types.KeyboardButton("Я в кофейне!")
    item2 = telebot.types.KeyboardButton("Я дома...")
    markup.add(item1)
    markup.add(item2)
    bot.send_message(m.chat.id, 'Привет!\nЭто онлайн официант кофейни PRIMETIME!\nПожалуйста, выбери где ты сейчас.',  reply_markup=markup)

@bot.message_handler(content_types=["text"])
def handle_text(message):
    if message.text.strip() == 'Я в кофейне!':
        msg = bot.send_message(message.chat.id, 'Отлично! Ты сейчас в кофейне!\nЗначит тебе будет легче делать заказ!', reply_markup=types.ReplyKeyboardRemove())
        bot.register_next_step_handler(msg, handle_text_2(msg))
        print('Человек в кофейне')

    elif message.text.strip() == 'Я дома...':
        bot.send_message(message.chat.id, "bebroit")

@bot.message_handler(content_types=["text"])
def handle_text_2(message):
    if a:
        global places
        places = ["6-й микрорайон, 1 (Краснообск)", "Орджоникидзе, 30", "Кирова, 23",
                  "проспект Карла Маркса, 29", "Героев Революции, 64", "Орджоникидзе, 18",
                  "Никольский проспект, 1 (БЦ Кольцово)", "площадь Карла Маркса, 7 (Сан Сити)",
                  "Советская, 8", "Кошурникова, 33", "Большевистская, 45/1 (РЕКА)",
                  "Красный проспект, 157/1", "Красный проспект, 2/1", "Выставочная, 38/1",
                  "Военная, 5 (Аура)", "Дуси Ковальчук, 179/5 (БЦ Колибри)", "Богдана Хмельницкого, 27",
                  "Фрунзе, 242 (ДЦ Новая высота)", "Максима Горького, 53", "Дуси Ковальчук, 28д",
                  "Красный проспект, 101 (Ройял Парк)", "Светлановская, 50 (Большая Медведица)"]
        global markup
        markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
        for place in places:  # вот и пригодилась наша глобальная переменная (и без всяких global)
            markup.add(telebot.types.KeyboardButton(place))
        print('Кнопки добавлены!')  # если тебе вообще это нужно
        bot.send_message(message.chat.id, 'Пожалуйста, выбери кофейню, в которой ты сейчас находишься.', reply_markup=markup)
        if a:
            if message.text.strip() in places:
                bot.send_message(message.chat.id, f"Отлично! Ты сейчас по адресу: {message.text.strip()}")


bot.polling(none_stop=True)


ошибка:
Traceback (most recent call last):
  File "/Users/antongorestov/Desktop/PrimetimeBot/bot.py", line 50, in <module>
    bot.polling(none_stop=True)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telebot/__init__.py", line 658, in polling
    self.__threaded_polling(non_stop, interval, timeout, long_polling_timeout, allowed_updates)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telebot/__init__.py", line 720, in __threaded_polling
    raise e
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telebot/__init__.py", line 680, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telebot/util.py", line 135, in raise_exceptions
    raise self.exception_info
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/telebot/util.py", line 87, in run
    task(*args, **kwargs)
TypeError: 'NoneType' object is not callable


P.S. Извините за говнокод с переменной a в коде xd, я не знаю как строку забить чем-то
  • Вопрос задан
  • 1151 просмотр
Пригласить эксперта
Ответы на вопрос 2
@PavelMos
Тут же прямо написано - AttributeError: module 'telebot.types' has no attribute 'ReplyKeyboardRemove'
1. посмотреть в описании или через telebot.types.__dir__() какие есть аттрибуты и методы у telebot.types
2. там есть ReplyKeyboardRemove, и это функция (метод), а не аттрибут, то есть его надо вызывать со скобками с какими-нибудь параметрами или без параметров

так же в поиске см на ReplyKeyboardRemove

Самофикс - посмотрел скрипт, ReplyKeyboardRemove вызывается как функция, но в ошибке нет такого атрибута. Надо разбираться.
Ответ написан
SoreMix
@SoreMix Куратор тега Python
yellow
В
bot.register_next_step_handler(msg, handle_text_2(msg))
ошибка. Вторым аргументом нужно передавать имя функции, вы же передали результат выполнения
Ответ написан
Ваш ответ на вопрос

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

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