Этот вопрос закрыт для ответов, так как повторяет вопрос Discord.py - TypeError: Object of type Button is not JSON serializable - Как исправить?
@Olega8645

Как избавится от ошибки TypeError: Object of type Select is not JSON serializable?

Здраствуйте! Я хочу перейти на discord_slash. До перехода у меня работала библиотека discord_components. Но после того как я перешёл на слеши всё компоненты не хотят отображается. И у меня выдаёт вот такую ошибку (Основная библиотека: discord.py):

An exception has occurred while executing command `help`:
Traceback (most recent call last):
  File "C:\Users\Administrator\PycharmProjects\bot\venv\lib\site-packages\discord_slash\client.py", line 1353, in invoke_command
    await func.invoke(ctx, **args)
  File "C:\Users\Administrator\PycharmProjects\bot\venv\lib\site-packages\discord_slash\model.py", line 210, in invoke
    return await self.func(*args, **kwargs)
  File "C:\Users\Administrator\PycharmProjects\bot\main.py", line 1246, in help
    await cx.send(embed=embed,
  File "C:\Users\Administrator\PycharmProjects\bot\venv\lib\site-packages\discord_slash\dpy_overrides.py", line 323, in send_override
    return await send(channel, *args, **kwargs)
  File "C:\Users\Administrator\PycharmProjects\bot\venv\lib\site-packages\discord_slash\dpy_overrides.py", line 300, in send
    data = await state.http.send_message(
  File "C:\Users\Administrator\PycharmProjects\bot\venv\lib\site-packages\discord\http.py", line 156, in request
    kwargs['data'] = utils.to_json(kwargs.pop('json'))
  File "C:\Users\Administrator\PycharmProjects\bot\venv\lib\site-packages\discord\utils.py", line 328, in to_json
    return json.dumps(obj, separators=(',', ':'), ensure_ascii=True)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Select is not JSON serializable

Помогите пожалуйста! Весь интернет переискал и все варианты перепробовал. Сам код:

@slash.slash(
        name="help",
        description="просмотр списка команд"
)
async def help(ctx: SlashContext):
        # await ctx.defer(hidden=False)
        cx = ctx.channel
        embed=discord.Embed(
            title=f"Test",
            description=f"Test",
            color=0xA700FF
        )
        await ctx.send("Test")
        await cx.send(embed=embed,
            components=[
                Select(
                    placeholder='Test',
                    options=[
                        SelectOption(label="Test", emoji="️", value=1),
                        SelectOption(label="Test", emoji="", value=2)
                    ]
                )
            ]
        )

@bot.command()
async def on_select_option(interaction):
        if interaction.values[0] == 1:
            embed1=discord.Embed(
                title="скоро..."
            )
            await interaction.send(embed=embed1)
        elif interaction.values[0] == 2:
            embed2=discord.Embed(
                title="скоро..."
            )
            await interaction.send(embed=embed2)
        else:
            pass
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
fenrir1121
@fenrir1121
ABAP developer, Python developer
Так, окей, я еще раз распишу чтобы все аналогичные вопросы перенаправлять сюда.

То, что вы завете discord_slash. является пакетом discord-py-slash-command.
Он так же как и discord_components является устаревшим и больше не поддерживается. Даже слеш-команды там реализованы не полностью, а новых компонентов нет вообще. Соответственно разбираться в ошибке, которая возникает в неподдерживаемом пакете никто не будет.

Если вы откроете гитхаб библиотеки, то увидите, что сейчас у них отдельная, работающая независимо от discord.py библиотека interactions-py

Если вы хотите нормально работающего бота, а не монстра франкенштейна из кусочков разных либ выберите одну библиотеку, которая поддерживает нужные вам функции и сделайте миграцию на нее.

Что касается discord.py v1.7.3 она сильно отстала от жизни поскольку на пол года была заброшена, последнее стабильное обновление было 12 июня 2021. Актуальная dev версия с новыми компонентами устанавливается через git, а не через pip, поскольку еще находится в разработке. Следить за прогрессом разработки v2.0 можно тут

Кроме dev ветки основной либы можно перейти на один из форков, например disnake, pycord (тоже dev из гитхаба) или отдельные библиотеки, вроде описанной выше interactions.py. У каждой свои особенности и понадобится адаптировать старый код, но так будут актуальные компоненты и предсказуемая работа в рамках одной библиотеки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ArhipTimofeev
@ArhipTimofeev
ХаСкер
TypeError: Object of type set is not JSON serializable" возникает, когда мы пытаемся преобразовать `set` объект в строку JSON. Чтобы устранить ошибку, преобразуйте в `set` список, прежде чем сериализовать его в JSON
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы