Не понимаю как решить ошибку!

Импортировать я не забыл))

from disnake import Option

Вот команда, из-за которой возникает ошибка:

async def trade(ctx,
                game: Option(name='game_name', type=str, description='Выбери игру из списка:', required=True, choices=['Dota 2', 'CS 2']),
                item_name: Option(name='item_name', type=str, description='Напишите название предмета', required=True),
                description: Option(name='desc', type=str, description='Опишите предмет который хотите обменять', required=False)):

продолжение у команды конечно есть, но оно думаю не нужно.

А вот ошибка:

Traceback (most recent call last):
  File "c:\Users\name\Desktop\Codes\!Sale_discrod_bots\testProjects\startNewProjects\tradeBot\main.py", line 41, in <module>
    async def trade(ctx,
  File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\disnake\ext\commands\interaction_bot_base.py", line 554, in decorator
    result = slash_command(
  File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\disnake\ext\commands\slash_core.py", line 820, in decorator
    return InvokableSlashCommand(
  File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\disnake\ext\commands\slash_core.py", line 452, in __init__
    options = expand_params(self)
  File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\disnake\ext\commands\params.py", line 1031, in expand_params
    _, inter_param, params, injections = collect_params(command.callback)
  File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\disnake\ext\commands\params.py", line 921, in collect_params
    elif parameter.annotation in Injection._registered:
TypeError: unhashable type: 'Option'

Я пробовал обновить библиотеку, не помогло, думал не правильно импортировал или использовать Option, но все правильно. Помогите пожалуйста!


Ответы (2 шт):

Автор решения: Forevor Base

Прочитав документацию, я заметил, что disnake.Option нету в ней. Основываясь на документации, я написал данный код:

@bot.slash_command(name="command")
async def trade( 
    ctx, 
    game: str = commands.Param(choices=[OptionChoice("Dota 2", "Dota 2"), OptionChoice("CS2", "CS2")]), 
    item_name: str = commands.Param(), 
    description: str = None):
    """
    Описание команды

    Parameters
    ----------
    game: Описание game
    item_name: Описание item_name
    description: Описание description
    """
    ...

И используя данный код, все у вас должно быть, как вы хотите. То есть, выбор CS2 или Dota 2 (обязательный), название предмета (тоже обязательный) и описание (не обязательно).

Угу.

→ Ссылка
Автор решения: SuperFeda

Я конечно понимаю, что я немного поздно, но всё равно напишу ответ, может кому-то поможет..

disnake.Option нужно использовать не в параметрах функции, а в декораторе, определяющий функцию как слэш команду.

Вот пример:

@commands.slash_command(
    name="send_report",
    description="command description",
    options=[
        disnake.Option(
            name="message", description="message option description", required=True),
        disnake.Option(
            name="report_type", description="report type message description", 
            choices=bot_choices.CHOICE_FOR_REPORT_TYPE, required=True)
    ]
)
async def send_report(self, ctx, message: str, report_type: str):
    [...]

Еще параметры name и description из disnake.Option могут быть локализированы через disnake.Localized.

→ Ссылка