When you create or get an object from Discord, you send the request to its API and in return you get either an error or the object you requested/created. You can pass a function to API calls as the callback function. This means that when the request completes, and you get a response from the API, your callback function executes. You must be careful with lambda captures! Good practice would be not capturing variables by reference unless you have to, since when the request completes and the function executes, the variables can already be destructed. Advanced reference can be found here. Now, let's see callback functions in action:
#include <dpp/dpp.h>
int main() {
int64_t limit = std::get<int64_t>(event.get_parameter("quantity"));
bot.messages_get(event.command.channel_id, 0, 0, 0, limit, [event](const dpp::confirmation_callback_t& callback) {
if (callback.is_error()) {
std::cout << callback.get_error().message << std::endl;
return;
}
auto messages = callback.get<dpp::message_map>();
std::string contents;
for (const auto& x : messages) {
contents += x.second.content + '\n';
}
event.reply(contents);
});
bot.log(dpp::loglevel::ll_error, callback.get_error().message);
return;
}
});
event.reply(callback.get_error().message);
return;
}
});
}
});
if (dpp::run_once <struct register_global_commands>()) {
constexpr int64_t min_val{1};
constexpr int64_t max_val{100};
msgs_get.add_option(
.set_min_value(min_val)
.set_max_value(max_val)
);
dpp::slashcommand msg_error(
"msg-error",
"Get an error instead of message :)", bot.me.id);
bot.global_bulk_command_create({ msgs_get, channel_create, msg_error });
}
});
return 0;
}
A definition of a discord channel. There are one of these for every channel type except threads....
Definition: channel.h:340
std::string name
Channel name (1-100 characters).
Definition: channel.h:364
channel & set_name(const std::string &name)
Set name of this channel object.
channel_type get_type() const
Get the channel type.
channel & set_guild_id(const snowflake guild_id)
Set guild_id of this channel object.
The cluster class represents a group of shards and a command queue for sending and receiving commands...
Definition: cluster.h:80
snowflake guild_id
Optional: the guild it was sent from.
Definition: appcommand.h:1004
std::string get_command_name() const
Get the command name for a command interaction.
snowflake id
Unique ID of object set by Discord. This value contains a timestamp, worker ID, internal server ID,...
Definition: managed.h:39
Represents an application command, created by your bot either globally, or on a guild.
Definition: appcommand.h:1397
std::function< void(const dpp::log_t &)> DPP_EXPORT cout_logger()
Get a default logger that outputs to std::cout. e.g.
@ i_message_content
Intent for receipt of message content.
Definition: intents.h:112
@ i_default_intents
Default D++ intents (all non-privileged intents).
Definition: intents.h:132
@ co_integer
An integer value.
Definition: appcommand.h:70
@ st_wait
Wait forever on a condition variable. The cluster will spawn threads for each shard and start() will ...
Definition: cluster.h:63
Each command option is a command line parameter. It can have a type (see dpp::command_option_type),...
Definition: appcommand.h:204
The results of a REST call wrapped in a convenient struct.
Definition: restresults.h:256
bool is_error() const
Returns true if the call resulted in an error rather than a legitimate value in the confirmation_call...
T get() const
Get the stored value via std::get.
Definition: restresults.h:324
void reply(command_completion_event_t callback=utility::log_error()) const
Acknowledge interaction without displaying a message to the user, for use with button and select menu...
interaction command
command interaction
Definition: dispatcher.h:678
Represents messages sent and received on Discord.
Definition: message.h:2071
Session ready.
Definition: dispatcher.h:961
User has issued a slash command.
Definition: dispatcher.h:695