Как добавить выбор переменных в discord slassh comand?

Рейтинг: 1Ответов: 1Опубликовано: 07.02.2023

У меня есть рабочая slash команда, но т.к. есть переменные для ввода двух параметров, я отсылаю людям ссылку на гугл документы со списком ключевых команд. Это не совсем удобно и красиво, недавно узнал, что в дискорде существует выбор переменных в слэш командах, вот такой:

https://i.sstatic.net/yjLu7.png https://i.sstatic.net/d3jwc.png

Я использую disnake, поэтому мой код выглядит так:

files_path = r"General/VseIkon"

@bot.slash_command(name='random_icon', description = "отправляет случайный значок профиля", sync_commands_debug=True)
async def random_icon(inter: disnake.ApplicationCommandInteraction):
  await inter.response.defer()
  await asyncio.sleep(1)
  files_list = os.listdir(files_path)
  file_name = random.choice(files_list)

  name = file_name.replace('.png', '')
  
  await inter.edit_original_response(f'Вам выпал значок профиля: **«{name}»**', file=discord.File(f'General/VseIkon/{file_name}'))
  with open("counter.txt", "a") as f:
        f.write("random_icon " + str(datetime.now()) + "\n")

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

Если кто-то знает, как это сделать, помогите пожалуйста.

Ответы

▲ 0

Возьмём самый простой пример. Создадим варианты Один и Два:

В name будет значение которое будет видно пользователю.

В value значение на которое мы будем присылать ответ.

@app_commands.choices(test=[
    app_commands.Choice(name="Один", value="test1"),
    app_commands.Choice(name="Два", value="test2")
    ])

Теперь перейдём к самой команде. Нам необходимо создать аргумент в котором будут эти варианты:

async def _test(interaction: discord.Interaction, test: app_commands.Choice[str])

Готово. Осталось реализовать разные ответы на два этих аргумента:

    if test.value == 'test1':
        #ответ на выбор "Один"
    if test.value == 'test2':
        #ответ на выбор "Два"