Как добавить аргументы в 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)