D++ (DPP)
C++ Discord API Bot Library
dpp::commandhandler Class Reference

The commandhandler class represents a group of commands, prefixed or slash commands with handling functions. More...

#include <commandhandler.h>

+ Collaboration diagram for dpp::commandhandler:

Public Member Functions

bool string_has_prefix (std::string &str)
 Returns true if the string has a known prefix on the start. Modifies string to remove prefix if it returns true. More...
 
 commandhandler (class cluster *o, bool auto_hook_events=true, snowflake application_id=0)
 Construct a new commandhandler object. More...
 
 ~commandhandler ()
 Destroy the commandhandler object. More...
 
commandhandlerset_owner (class cluster *o)
 Set the application id after construction. More...
 
commandhandleradd_prefix (const std::string &prefix)
 Add a prefix to the command handler. More...
 
commandhandleradd_command (const std::string &command, const parameter_registration_t &parameters, command_handler handler, const std::string &description="", snowflake guild_id=0)
 Add a command to the command handler. More...
 
commandhandlerregister_commands ()
 Register all slash commands with Discord This method must be called at least once if you are using the "/" prefix to mark the end of commands being added to the handler. Note that this uses bulk registration and will replace any existing slash commands. More...
 
void route (const dpp::message &msg)
 Route a command from the on_message_create function. Call this method from within your on_message_create with the received dpp::message object if you have disabled automatic registration of events. More...
 
void route (const struct interaction_create_t &event)
 Route a command from the on_interaction_create function. Call this method from your on_interaction_create with the received dpp::interaction_create_t object if you have disabled automatic registration of events. More...
 
void reply (const dpp::message &m, command_source source, command_completion_event_t callback={})
 Reply to a command. You should use this method rather than cluster::message_create as the way you reply varies between slash commands and message commands. Note you should ALWAYS reply. Slash commands will emit an ugly error to the user if you do not emit some form of reply within 3 seconds. More...
 
void thinking (command_source source, command_completion_event_t callback={})
 Reply to a command without a message, causing the discord client to display "Bot name is thinking...". The "thinking" message will persist for a maximum of 15 minutes. This counts as a reply for a slash command. Slash commands will emit an ugly error to the user if you do not emit some form of reply within 3 seconds. More...
 

Public Attributes

std::unordered_map< std::string, command_info_tcommands
 Commands in the handler. More...
 
std::vector< std::string > prefixes
 Valid prefixes. More...
 
bool slash_commands_enabled
 Set to true automatically if one of the prefixes added is "/". More...
 
class clusterowner
 Cluster we are attached to for issuing REST calls. More...
 
snowflake app_id
 Application ID. More...
 
event_handle interactions
 Interaction event handle. More...
 
event_handle messages
 Message event handle. More...
 

Detailed Description

The commandhandler class represents a group of commands, prefixed or slash commands with handling functions.

It can automatically register slash commands, and handle routing of messages and interactions to separated command handler functions.

Constructor & Destructor Documentation

◆ commandhandler()

dpp::commandhandler::commandhandler ( class cluster o,
bool  auto_hook_events = true,
snowflake  application_id = 0 
)

Construct a new commandhandler object.

Parameters
oOwning cluster to attach to
auto_hook_eventsSet to true to automatically hook the on_interaction_create and on_message events. You should not need to set this to false unless you have a specific use case, as D++ supports multiple listeners to an event, so will allow the commandhandler to hook to your command events without disrupting other uses for the events you may have.
application_idThe application id of the bot. If not specified, the class will look within the cluster object and use cluster::me::id instead.

◆ ~commandhandler()

dpp::commandhandler::~commandhandler ( )

Destroy the commandhandler object.

Member Function Documentation

◆ add_command()

commandhandler & dpp::commandhandler::add_command ( const std::string &  command,
const parameter_registration_t parameters,
command_handler  handler,
const std::string &  description = "",
snowflake  guild_id = 0 
)

Add a command to the command handler.

Parameters
commandCommand to be handled. Note that if any one of your prefixes is "/" this will attempt to register a global command using the API and you will receive notification of this command via an interaction event.
handlerHandler function
parametersParameters to use for the command
descriptionThe description of the command, shown for slash commands
guild_idThe guild ID to restrict the command to. For slash commands causes registration of a guild command as opposed to a global command.
Returns
commandhandler& reference to self
Exceptions
dpp::logic_exceptionif application ID cannot be determined

◆ add_prefix()

commandhandler & dpp::commandhandler::add_prefix ( const std::string &  prefix)

Add a prefix to the command handler.

Parameters
prefixPrefix to be handled by the command handler
Returns
commandhandler& reference to self

◆ register_commands()

commandhandler & dpp::commandhandler::register_commands ( )

Register all slash commands with Discord This method must be called at least once if you are using the "/" prefix to mark the end of commands being added to the handler. Note that this uses bulk registration and will replace any existing slash commands.

Note that if you have previously registered your commands and they have not changed, you do not need to call this again. Discord retains a cache of previously added commands.

Note
Registration of global slash commands can take up to an hour to appear on Discord. This is a Discord API limitation. For rapid testing use guild specific commands by specifying a guild ID when declaring the command.
Returns
commandhandler& Reference to self for chaining method calls

◆ reply()

void dpp::commandhandler::reply ( const dpp::message m,
command_source  source,
command_completion_event_t  callback = {} 
)

Reply to a command. You should use this method rather than cluster::message_create as the way you reply varies between slash commands and message commands. Note you should ALWAYS reply. Slash commands will emit an ugly error to the user if you do not emit some form of reply within 3 seconds.

Parameters
mmessage to reply with.
sourcesource of the command
callbackUser function to execute when the api call completes.

◆ route() [1/2]

void dpp::commandhandler::route ( const dpp::message msg)

Route a command from the on_message_create function. Call this method from within your on_message_create with the received dpp::message object if you have disabled automatic registration of events.

Parameters
msgmessage to parse

◆ route() [2/2]

void dpp::commandhandler::route ( const struct interaction_create_t event)

Route a command from the on_interaction_create function. Call this method from your on_interaction_create with the received dpp::interaction_create_t object if you have disabled automatic registration of events.

Parameters
eventcommand interaction event to parse

◆ set_owner()

commandhandler & dpp::commandhandler::set_owner ( class cluster o)

Set the application id after construction.

Parameters
oOwning cluster to attach to

◆ string_has_prefix()

bool dpp::commandhandler::string_has_prefix ( std::string &  str)

Returns true if the string has a known prefix on the start. Modifies string to remove prefix if it returns true.

Parameters
strString to check and modify
Returns
true string contained a prefix, prefix removed from string
false string did not contain a prefix

◆ thinking()

void dpp::commandhandler::thinking ( command_source  source,
command_completion_event_t  callback = {} 
)

Reply to a command without a message, causing the discord client to display "Bot name is thinking...". The "thinking" message will persist for a maximum of 15 minutes. This counts as a reply for a slash command. Slash commands will emit an ugly error to the user if you do not emit some form of reply within 3 seconds.

Parameters
sourcesource of the command
callbackUser function to execute when the api call completes.

Member Data Documentation

◆ app_id

snowflake dpp::commandhandler::app_id

Application ID.

◆ commands

std::unordered_map<std::string, command_info_t> dpp::commandhandler::commands

Commands in the handler.

◆ interactions

event_handle dpp::commandhandler::interactions

Interaction event handle.

◆ messages

event_handle dpp::commandhandler::messages

Message event handle.

◆ owner

class cluster* dpp::commandhandler::owner

Cluster we are attached to for issuing REST calls.

◆ prefixes

std::vector<std::string> dpp::commandhandler::prefixes

Valid prefixes.

◆ slash_commands_enabled

bool dpp::commandhandler::slash_commands_enabled

Set to true automatically if one of the prefixes added is "/".

D++ 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