Telebot вылазит ошибка "'CallbackQuery' object has no attribute 'chat'
Только начал делать своего первого +- большого бота, но тут же столкнулся с ошибкой:
*(async_telebot.py:591 MainThread) ERROR - TeleBot: "'CallbackQuery' object has no attribute 'chat'*
Когда нажимаю на кнопку назад, то вылазит эта ошибка, совсем без понятия что делать.
Код:
import asyncio
from telebot.async_telebot import AsyncTeleBot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
bot = AsyncTeleBot("TOKEN")
@bot.message_handler(commands=['start'])
async def cmd_start(message):
await bot.send_message(message.chat.id, "Привет ✌️ ")
markup = InlineKeyboardMarkup(row_width=1)
item1 = InlineKeyboardButton("Все активы", callback_data='bt1')
item2 = InlineKeyboardButton("Выбор счета", callback_data='bt2')
item3 = InlineKeyboardButton("Группу счетов", callback_data='bt3')
markup.add(item1, item2, item3)
await bot.send_message(message.chat.id, 'Выбери где будут вестись финансы:', reply_markup=markup)
@bot.callback_query_handler(func=lambda callback: True)
async def handle_callback(callback):
if callback.data == "bt1":
await handle_all_assets(callback)
elif callback.data == "bt2":
await handle_account_selection(callback)
elif callback.data == "bt3":
await handle_group_selection(callback)
elif callback.data == "back1" or callback.data == "back2" or callback.data == "back3":
await cmd_start(callback)
async def handle_all_assets(callback):
markup = InlineKeyboardMarkup(row_width=2)
plus1 = InlineKeyboardButton(text="Добавить ➕", callback_data="plus1")
minus1 = InlineKeyboardButton(text="Убрать ➖", callback_data="min1")
back1 = InlineKeyboardButton(text="Назад", callback_data="back1")
markup.add(plus1, minus1, back1)
await bot.send_message(callback.message.chat.id, "Общее количество финансов:", reply_markup=markup)
async def handle_account_selection(callback):
markup = InlineKeyboardMarkup(row_width=2)
plus2 = InlineKeyboardButton(text="Добавить ➕", callback_data="plus2")
minus2 = InlineKeyboardButton(text="Убрать ➖", callback_data="min2")
back2 = InlineKeyboardButton(text="Назад", callback_data="back2")
markup.add(plus2, minus2, back2)
await bot.send_message(callback.message.chat.id, "Убрать/добавить счет:\n", reply_markup=markup)
async def handle_group_selection(callback):
await bot.send_message(callback.message.chat.id, "Убрать/добавить новую группу:")
asyncio.run(bot.polling())
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Начнём с того, что у объекта callback нет параметра chat. Ваша функция cmd_start() ожидает объект Message, а вы передаёте в него CallbackQuery.
elif callback.data == "back1" or callback.data == "back2" or callback.data == "back3":
await cmd_start(callback) # Тут ошибка
Что бы исправить ошибку, нужно передать в cmd_start() правильный объект, и на ваше счастье сделать это не сложно -> callback.message
Меняем:
await cmd_start(callback)
На:
await cmd_start(callback.message)