Ошибка, с которой вы сталкиваетесь, связана с тем, что используете объект `call`, который, по всей видимости, является объектом типа `Message`, а не `CallbackQuery`, что вызывает проблему при попытке доступа к атрибуту `data`.
Ваша функция `add` выглядит правильно, если она должна обрабатывать колбэки. Однако возможной причиной возникновения этой ошибки может быть то, что на самом деле в функцию `add` передается не колбэк-запрос (т.е. объект `callback_query`), а объект `message`. Это может произойти, если вы не вызываете правильный обработчик колбэков, а вместо этого используете обработчик сообщений (например, через `@bot.message_handler`).
Давайте перепроверим и убедимся, что вы вызываете именно правильный обработчик. Вот более точный вариант вашего кода с потенциальными исправлениями:
```python
@bot.callback_query_handler(func=lambda call: True)
def add(call):
global category, purpose
# обработка нажатия на кнопку доход или расход
if call.data == "button1_in":
category = 'Доход'
purpose = 'Заработная плата'
bot.send_message(call.message.chat.id, "Укажите сумму:")
bot.register_next_step_handler(call.message, add_amount)
def add_amount(message):
amount = message.text.strip()
user_id = message.from_user.id
if is_number(amount):
print(user_id, category, purpose, amount)
bot.send_message(message.chat.id, f"{category} {amount} учтен в категории: {purpose}")
db.add_db(user_id, category, purpose, amount)
else:
bot.send_message(message.chat.id, "Введено некорректное значение! Повторите попытку.")
# Пример того, как вы можете настроить обработчик сообщений
@bot.message_handler(content_types=['text'])
def handle_text(message):
# Обработка текстовых сообщений
pass
```
Проверьте также, что вы не вызываете функцию `add` напрямую где-то в другом месте вашего кода с объектом типа `Message`. Она должна вызываться только в контексте обработки события колбэка.
Если вы найдете ошибку в другом месте, меняйте обработчики соответственно. Пожалуйста, дайте знать, если у вас есть дополнительные вопросы или если проблема сохраняется!