@Kabrosy

TypeError: Object of type KeyboardButton is not JSON serializable (Aiogram), как решить?

Ломаю голову уже который день над тем, почему выскакивает ошибка при, казалось бы, простейшем коде игрового бота телеграм. Застрял в самом начале, при создании меню. Пишу его на aiogram, но каждый раз, когда пытаюсь запустить своё меню вылезает ошибка.

Код (main.py):
import asyncio
from aiogram import Bot, Dispatcher, executor
from config import BOT_TOKEN

loop = asyncio.get_event_loop()
bot = Bot(BOT_TOKEN, parse_mode ="HTML")
dp = Dispatcher(bot, loop=loop)

if __name__ == "__main__":
    from handlers import dp
    executor.start_polling(dp)


Код (handlers.py):

from main import bot, dp
import keyboards as nav
import time

from aiogram.types import Message


@dp.message_handler(commands=['start'])
async def start_message(message: Message):
    text = f'''Привет, приветствуем тебя в #ScoreIt Game Bot '''
    await bot.send_message(message.from_user.id,
                           'Привет, {0.first_name}, приветствуем тебя в #ScoreIt Game Bot '.format(message.from_user),
                           reply_markup=nav.mainMenu)
    time.sleep(3)
    await bot.send_message(message.from_user.id, 'Этот бот погрузит тебя в атмосферу футбольного матча и поможет '
                                                 'представить себя в шкуре футбольного тренера ⚽'.format(
        message.from_user))
    time.sleep(3)


Код (keyboards.py):
from aiogram.types import ReplyKeyboardMarkup, ReplyKeyboardRemove, KeyboardButton

give_money_btn = KeyboardButton(text='Пополнить счёт  (для платной игры)'),
play_match_btn = KeyboardButton(text='Играть матч ⚽ (Одиночная игра)'),
play_tournament_btn = KeyboardButton(text='Играть турнир  (Одиночная игра)'),
play_with_friend_btn = KeyboardButton(text='Играть с другом ')

mainMenu = ReplyKeyboardMarkup(resize_keyboard=True).add(give_money_btn, play_match_btn, play_tournament_btn, play_with_friend_btn)
  • Вопрос задан
  • 1537 просмотров
Пригласить эксперта
Ответы на вопрос 1
GTapok
@GTapok
Короче, анекдот, совершенно случайно починил
У меня была такая же фигня, и вот что я сделал:

classes = [
        types.InlineKeyboardButton(text='Мечник', callback_data='Мечник'),
        types.InlineKeyboardButton(text='Маг', callback_data='Маг'),
        types.InlineKeyboardButton(text='Лучник', callback_data='Лучник')
    ]

(Всё условно)

class_char = types.InlineKeyboardMarkup(row_width=2).add(*classes)

В чём дело?
В .add() я передал список со звёздочкой в начале. Без неё такую же ошибку ловил

Не уверен, насколько это подходит к вопросу (годовой давности), но вот)
Ответ написан
Ваш ответ на вопрос

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

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