Как добавить аргументы в slash команду discord.py

Всем привет! У меня есть проблема: мне нужно добавить аргументы к функции first_command, чтобы они отображались вот так:

введите сюда описание изображения

Вот мой код:

import config

import discord
from discord import app_commands

intents = discord.Intents.default()
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)


@tree.command(
    name = 'test',
    description="My first application Command")
async def first_command(interaction):
    await interaction.response.send_message(interaction.user.id)


@client.event
async def on_ready():
    await tree.sync()
    print("Ready!")

client.run(config.dsTOKEN)


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

Автор решения: Unclear

Краткий ответ: в аргументы функции, помимо interaction, добавьте свои аргументы (желательно с указанием типа аргумента, также не все типы аргументов поддерживаются, такие как datetime)

Пример:

from discord import Client, Intents, Object, Member, Interaction
from discord.app_commands import CommandTree, Choice, default_permissions, describe, choices
from asyncio import run_coroutine_threadsafe

intents = Intents.all()

bot = Client(intents=intents)
tree = CommandTree(bot)

async def init_commands():
    try:
        guilds = [Object(guild.id) for guild in bot.guilds]

        @tree.command(name="test", description="Тестовая команда бота с аргументом", guilds=guilds)
        @choices(value=[
            Choice(name="Камень", value=1),
            Choice(name="Ножницы", value=2),
            Choice(name="Бумага", value=3)
            ])
        @default_permissions(send_messages=True)
        @describe(member="Пользователь", num="Любое число", value="Выбор значения", neobazatelniy_arg="Необязательный параметр")
        async def test(interaction: Interaction, member: Member, num: float, value: Choice[int], neobazatelniy_arg: str="Hello World!"):
            await interaction.response.send_message(f"Пользователь {member.mention}\nЧисло: {num}\nЗначение: {value.value}\nНеобязательный параметр: {neobazatelniy_arg}", ephemeral=True)
            # ephemeral=True делает сообщение видимым только пользователю
            # choices динамически можно будет обновлять только "пересинхронизируя" команду на сервере, так что лучше choices делать неизменяемыми до перезапуска бота

        for guild in guilds:
            await tree.sync(guild=guild)
        
        print(f"{bot.user.name} has connected to Discord!")
    except Exception as e:
        print(f"Возникла ошибка при создании и синхронизации команд: {e}")

@bot.event
async def on_ready():
    run_coroutine_threadsafe(init_commands(), bot.loop)
    # run_coroutine_threadsafe на случай, если комнад будет очень много (иначе бот выдаст ошибку о том, что команда долго обрабатывается)

bot.run(token=token, reconnect=True)
→ Ссылка