D++ (DPP)
C++ Discord API Bot Library
Using sub-commands in slash commands

This demonstrates how to use sub-commands within slash commands. Also shown below is an example of how to get a "resolved" parameter without having to use the cache or an extra API call.

#include <dpp/dpp.h>
#include <iostream>
int main() {
dpp::cluster bot("token");
/* Executes on ready. */
bot.on_ready([&bot](const dpp::ready_t & event) {
if (dpp::run_once<struct register_bot_commands>()) {
/* Define a slash command. */
dpp::slashcommand image("image", "Send a specific image.", bot.me.id);
image.add_option(
/* Create a subcommand type option for "dog". */
dpp::command_option(dpp::co_sub_command, "dog", "Send a picture of a dog.").
add_option(dpp::command_option(dpp::co_user, "user", "User to turn into a dog.", false))
);
image.add_option(
/* Create another subcommand type option for "cat". */
dpp::command_option(dpp::co_sub_command, "cat", "Send a picture of a cat.").
add_option(dpp::command_option(dpp::co_user, "user", "User to turn into a cat.", false))
);
/* Create command */
bot.global_command_create(image);
}
});
/* Use the on_slashcommand event to look for commands */
bot.on_slashcommand([&bot](const dpp::slashcommand_t & event) {
dpp::interaction interaction = event.command;
/* Check if the command is the image command. */
if (interaction.get_command_name() == "image") {
/* Get the sub command */
auto subcommand = cmd_data.options[0];
/* Check if the subcommand is "dog" */
if (subcommand.name == "dog") {
/* Checks if the subcommand has any options. */
if (!subcommand.options.empty()) {
/* Get the user from the parameter */
dpp::user user = interaction.get_resolved_user(
subcommand.get_option<dpp::snowflake>(0)
);
event.reply(user.get_mention() + " has now been turned into a dog.");
} else {
/* Reply if there were no options.. */
event.reply("No user specified");
}
}
/* Check if the subcommand is "cat" */
if (subcommand.name == "cat") {
/* Checks if the subcommand has any options. */
if (!subcommand.options.empty()) {
/* Get the user from the parameter */
dpp::user user = interaction.get_resolved_user(
subcommand.get_option<dpp::snowflake>(0)
);
event.reply(user.get_mention() + " has now been turned into a cat.");
} else {
/* Reply if there were no options.. */
event.reply("No user specified");
}
}
}
});
bot.start(dpp::st_wait);
return 0;
}
The cluster class represents a group of shards and a command queue for sending and receiving commands...
Definition: cluster.h:276
An interaction represents a user running a command and arrives via the dpp::cluster::on_interaction_c...
Definition: appcommand.h:668
std::string get_command_name() const
Get the command name for a command interaction.
const dpp::user & get_resolved_user(snowflake id) const
Get a user associated with the slash command from the resolved list. The resolved list contains assoc...
command_interaction get_command_interaction() const
Get the command interaction object.
Represents an application command, created by your bot either globally, or on a guild.
Definition: appcommand.h:988
A container for a 64 bit unsigned value representing many things on discord. This value is known in d...
Definition: snowflake.h:48
Represents a user on discord. May or may not be a member of a dpp::guild.
Definition: user.h:82
std::string get_mention() const
Return a ping/mention for the user.
std::function< void(const dpp::log_t &)> DPP_EXPORT cout_logger()
Get a default logger that outputs to std::cout. e.g.
@ co_sub_command
Definition: appcommand.h:51
@ co_user
Definition: appcommand.h:61
@ st_wait
Wait forever on a condition variable. The cluster will spawn threads for each shard and start() will ...
Definition: cluster.h:259
Details of a command within an interaction. This subobject represents the application command associa...
Definition: appcommand.h:567
std::vector< command_data_option > options
Optional: the params + values from the user.
Definition: appcommand.h:570
Each command option is a command line parameter. It can have a type (see dpp::command_option_type),...
Definition: appcommand.h:154
Session ready.
Definition: dispatcher.h:783
User has issued a slash command.
Definition: dispatcher.h:499
D++ Library version 10.0.35D++ Library version 10.0.34D++ Library version 10.0.33D++ Library version 10.0.32D++ Library version 10.0.31D++ Library version 10.0.30D++ Library version 10.0.29D++ Library version 10.0.28D++ Library version 10.0.27D++ Library version 10.0.26D++ Library version 10.0.25D++ Library version 10.0.24D++ Library version 10.0.23D++ Library version 10.0.22D++ Library version 10.0.21D++ Library version 10.0.20D++ Library version 10.0.19D++ Library version 10.0.18D++ Library version 10.0.17D++ Library version 10.0.16D++ Library version 10.0.15D++ Library version 10.0.14D++ Library version 10.0.13D++ Library version 10.0.12D++ Library version 10.0.11D++ Library version 10.0.10D++ Library version 10.0.9D++ Library version 10.0.8D++ Library version 10.0.7D++ Library version 10.0.6D++ Library version 10.0.5D++ Library version 10.0.4D++ Library version 10.0.3D++ Library version 10.0.2D++ Library version 10.0.1D++ Library version 10.0.0D++ Library version 9.0.19D++ Library version 9.0.18D++ Library version 9.0.17D++ Library version 9.0.16D++ Library version 9.0.15D++ Library version 9.0.14D++ Library version 9.0.13D++ Library version 9.0.12D++ Library version 9.0.11D++ Library version 9.0.10D++ Library version 9.0.9D++ Library version 9.0.8D++ Library version 9.0.7D++ Library version 9.0.6D++ Library version 9.0.5D++ Library version 9.0.4D++ Library version 9.0.3D++ Library version 9.0.2D++ Library version 9.0.1D++ Library version 9.0.0D++ Library version 1.0.2D++ Library version 1.0.1D++ Library version 1.0.0