Skip to content
FoxWorn3365 edited this page Jan 24, 2023 · 8 revisions

Options are part of Components.

use Discord\Parts\Interactions\Command\Option;

ATTACHMENT

BOOLEAN

CHANNEL

INTEGER

MENTIONABLE

NUMBER

ROLE

STRING

SUB_COMMAND

SUB_COMMAND_GROUP

USER


Add options to Slash Commands

In this case, the example proposed in the link above is used.

use Discord\Builders\CommandBuilder;

//...

$discord->application->commands->save($discord->application->commands->create(CommandBuilder::new()
  ->setName('greet') 
  ->setDescriptions('Greet an user')
  ->addOption((new Option($discord))
    ->setName('user')
    ->setDescription('User to greet')
    ->setType(Option::USER)
    ->setRequired(true)
  )
  ->toArray()
));

⚠️ Warning!
Defining commands with the CommandBuilder no longer appears to be supported in PHP 8.2 as Creation of dynamic property is deprecated

Then:

// Handle
$discord->listenCommand('greet', function (Interaction $interaction) {
  $user = $interaction->data->resolved->users->first();
  $interaction->respondWithMessage(MessageBuilder::new()->setContent("Hello, {$user}"));
});

Send a custom message

In this case, the example proposed in the link above is used.

use Discord\Builders\CommandBuilder;

//...

$discord->application->commands->save($discord->application->commands->create(CommandBuilder::new()
  ->setName('say') 
  ->setDescriptions('Say a phrase')
  ->addOption((new Option($discord))
    ->setName('text')
    ->setDescription('Phrase')
    ->setType(Option::STRING)
    ->setRequired(true)
  )
  ->toArray()
));

and then for manage the command when executed:

$discord->listenCommand('greet', function (Interaction $interaction) {
  $args = $interaction->data->options->toArray();
  $content = $interaction->data->options->offsetGet('text')->value;
  $interaction->respondWithMessage(MessageBuilder::new()->setContent($content));
});

Ephemeral messages with Interaction response

$discord->listenCommand('mycommand', function (Interaction $interaction) {
  // ...
  $interaction->respondWithMessage(MessageBuilder::new()->setContent($content), true);
});

Note
To retrieve the associative array directly from the command and turn it into an object without having to retrieve each argument first, you can do this. It turns out, however, that it is not recommended to use.

  $args = (object)$interaction->data->options->toArray();
Clone this wiki locally