Не понимаю как решить ошибку!
Импортировать я не забыл))
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 шт):
Прочитав документацию, я заметил, что 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 (обязательный), название предмета (тоже обязательный) и описание (не обязательно).
Я конечно понимаю, что я немного поздно, но всё равно напишу ответ, может кому-то поможет..
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.
