Sometimes we need to update an object, such as a message (whether it's plain text or an embed) or a channel. At first, it might seem confusing, but it's actually really simple! You need an object with all the properties being identical to the existing one. Say you're editing a message. You need to have an object with its ID the same as the one in Discord. Then you replace what you need, such as its content.
- Note
- This example uses callback functions and embeds. To see more information about them, visit Using Callback Functions and Sending Embeds.
Editing messages
Here we send a message and edit it after. To do so, we first reply to the command msg-send with some text, "This is a message" in our case. As described above, on the next step the message object is taken and the text is replaced with whatever the user desires.
#include <dpp/dpp.h>
int main() {
event.reply("That's a message");
const auto content = std::get<std::string>(event.
get_parameter(
"content"));
if (callback.is_error()) {
event.reply("error");
return;
}
bot.message_edit(message);
event.
reply(
"Message content is now `" + content +
"`.");
});
}
});
bot.global_bulk_command_create({ msg_edit, msg_send });
}
});
return 0;
}
The cluster class represents a group of shards and a command queue for sending and receiving commands...
Definition cluster.h:89
snowflake channel_id
Optional: the channel it was sent from.
Definition appcommand.h:1043
std::string get_command_name() const
Get the command name for a command interaction.
Represents an application command, created by your bot either globally, or on a guild.
Definition appcommand.h:1436
A container for a 64 bit unsigned value representing many things on discord. This value is known in d...
Definition snowflake.h:54
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
auto run_once()
Run some code within an if() statement only once.
Definition once.h:41
@ co_string
A string value.
Definition appcommand.h:69
@ st_wait
Wait forever on a condition variable. The cluster will spawn threads for each shard and start() will ...
Definition cluster.h:72
Each command option is a command line parameter. It can have a type (see dpp::command_option_type),...
Definition appcommand.h:208
The results of a REST call wrapped in a convenient struct.
Definition restresults.h:261
T get() const
Get the stored value via std::get.
Definition restresults.h:329
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:789
virtual command_value get_parameter(const std::string &name) const
Get a slashcommand parameter.
Represents messages sent and received on Discord.
Definition message.h:2350
message & set_content(std::string_view c)
Set the message content.
Session ready.
Definition dispatcher.h:1072
User has issued a slash command.
Definition dispatcher.h:806
- Note
- Your bot can't edit messages sent by others!Sending Embeds.
Before editing the message:
After editing the message:
Editing channels
Now we'll want to edit an existing channel - its name in this case. This works similarly to how messages are edited.
#include <dpp/dpp.h>
int main() {
const auto name = std::get<std::string>(event.
get_parameter(
"name"));
const auto channel_id = std::get<dpp::snowflake>(event.
get_parameter(
"channel"));
event.reply("error");
return;
}
bot.channel_edit(channel);
event.reply("Channel name is now `" + name + "`.");
});
}
});
dpp::slashcommand channel_edit(
"channel-edit",
"Edit the name of channel specified", bot.me.id);
bot.global_command_create(channel_edit);
}
});
return 0;
}
A definition of a discord channel. There are one of these for every channel type except threads....
Definition channel.h:340
channel & set_name(const std::string &name)
Set name of this channel object.
@ co_channel
A channel snowflake id. Includes all channel types and categories.
Definition appcommand.h:89
bool is_error() const
Returns true if the call resulted in an error rather than a legitimate value in the confirmation_call...
Before editing the channel:
After editing the channel:
Editing embeds
Now let's send an embed and edit it. If a message has one content field, it can have a few embed fields, up to 10 to be precise. So we first get the embed we want and edit and change its description.
#include <dpp/dpp.h>
int main() {
.
set_author(
"Some author",
"https://dpp.dev/",
"https://dpp.dev/DPP-Logo.png")
event.reply(embed);
const auto description = std::get<std::string>(event.
get_parameter(
"desc"));
if (callback.is_error()) {
event.reply("error");
return;
}
auto& embeds = message.
embeds;
embeds[0].set_description(description);
bot.message_edit(message);
event.
reply(
"Embed description is now `" + description +
"`.");
});
}
});
dpp::slashcommand embed_edit(
"embed-edit",
"Edit an embed sent by the bot", bot.me.id);
bot.global_bulk_command_create({ embed_send, embed_edit });
}
});
return 0;
}
static constexpr uint32_t sti_blue
Definition colors.h:70
A rich embed for display within a dpp::message.
Definition message.h:1090
embed & set_description(std::string_view text)
Set embed description.
embed & set_author(const dpp::embed_author &a)
Set embed author.
embed & set_color(uint32_t col)
Set embed colour.
embed & set_title(std::string_view text)
Set embed title.
embed & set_url(std::string_view url)
Set embed url.
std::vector< embed > embeds
Up to 10 dpp::embed objects.
Definition message.h:2448
Before editing the embed:
Finally, after editing the embed: