Skip to content

Commit

Permalink
docs: added a page for editing messages from a button click (#1163)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jaskowicz1 authored Jul 19, 2024
1 parent 59a3b7c commit 75877cd
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 0 deletions.
53 changes: 53 additions & 0 deletions docpages/example_code/editing_message_after_click.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#include <dpp/dpp.h>
#include <dpp/unicode_emoji.h>

int main() {
dpp::cluster bot("token");

bot.on_log(dpp::utility::cout_logger());

/* The event is fired when someone issues your commands */
bot.on_slashcommand([&bot](const dpp::slashcommand_t& event) {
/* Check which command they ran */
if (event.command.get_command_name() == "button") {
/* Create a message */
dpp::message msg(event.command.channel_id, "this text has a button");

/* Add an action row, and then a button within the action row. */
msg.add_component(
dpp::component().add_component(
dpp::component()
.set_label("Click me!")
.set_type(dpp::cot_button)
.set_emoji(dpp::unicode_emoji::smile)
.set_style(dpp::cos_danger)
.set_id("myid")
)
);

/* Reply to the user with our message. */
event.reply(msg);
}
});

/* When a user clicks your button, the on_button_click event will fire,
* containing the custom_id you defined in your button.
*/
bot.on_button_click([&bot](const dpp::button_click_t& event) {
/* Instead of replying to the button click itself,
* we want to update the message that had the buttons on it.
*/
event.reply(dpp::ir_update_message, "You clicked: " + event.custom_id);
});

bot.on_ready([&bot](const dpp::ready_t& event) {
if (dpp::run_once<struct register_bot_commands>()) {
/* Create and register a command when the bot is ready */
bot.global_command_create(dpp::slashcommand("button", "Send a message with a button!", bot.me.id));
}
});

bot.start(dpp::st_wait);

return 0;
}
58 changes: 58 additions & 0 deletions docpages/example_code/editing_message_after_click2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#include <dpp/dpp.h>
#include <dpp/unicode_emoji.h>

int main() {
dpp::cluster bot("token");

bot.on_log(dpp::utility::cout_logger());

/* The event is fired when someone issues your commands */
bot.on_slashcommand([&bot](const dpp::slashcommand_t& event) {
/* Check which command they ran */
if (event.command.get_command_name() == "button") {
/* Create a message */
dpp::message msg(event.command.channel_id, "this text has a button");

/* Add an action row, and then a button within the action row. */
msg.add_component(
dpp::component().add_component(
dpp::component()
.set_label("Click me!")
.set_type(dpp::cot_button)
.set_emoji(dpp::unicode_emoji::smile)
.set_style(dpp::cos_danger)
.set_id("myid")
)
);

/* Reply to the user with our message. */
event.reply(msg);
}
});

/* When a user clicks your button, the on_button_click event will fire,
* containing the custom_id you defined in your button.
*/
bot.on_button_click([&bot](const dpp::button_click_t& event) {
/* Instead of replying to the button click itself,
* we want to update the message that had the buttons on it.
*/
event.reply(dpp::ir_deferred_channel_message_with_source, "");

/* Pretend you're doing long calls here that may take longer than 3 seconds. */

/* Now, edit the response! */
event.edit_response("After a while, I can confirm you clicked: " + event.custom_id);
});

bot.on_ready([&bot](const dpp::ready_t& event) {
if (dpp::run_once<struct register_bot_commands>()) {
/* Create and register a command when the bot is ready */
bot.global_command_create(dpp::slashcommand("button", "Send a message with a button!", bot.me.id));
}
});

bot.start(dpp::st_wait);

return 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ Components are anything that can be attached to a message or a \ref modal-dialog
* \subpage components2
* \subpage components3
* \subpage default_select_value
* \subpage editing_message_after_click
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
\page editing_message_after_click Editing The Message From a Button Click

\note This page expects you to be familiar with Button Clicks and extends from the \ref components page. Please visit the \ref components page if you are not already familiar with Button Clicks.

Editing messages where you had a button click can be done in a couple ways.

If you want to edit the message that had the buttons on, instead of doing `event.reply("message");`, you would do `event.reply(dpp::ir_update_message, "message");`, like so:

\note You are still limited to the default interaction time (3 seconds) this way. Read on if you need more time!

\include{cpp} editing_message_after_click.cpp

However, if you're going to take longer than 3 seconds to respond, you need to tell Discord to wait. The usual method is `event.thinking(true);` and then `event.edit_response("I have thought long and hard about my actions.");`, however, `event.thinking()` will create a new response if called from `on_button_click`, meaning you can no longer respond to the original response as you already did a response!

Instead, you want to do `event.reply(dpp::ir_deferred_channel_message_with_source, "");` to tell Discord that you intend on editing the message that the button click came from, but you need time. The user will be informed that you've processed the button click (as required) via a loading state and then you have 15 minutes to do everything you need. To then edit the message, you need to do `event.edit_response("new message!");`, like so:

\note If you want to silently acknowledge the button click (no thinking message), replace dpp::ir_deferred_channel_message_with_source with dpp::ir_deferred_update_message. You will still have 15 minutes to make a response.

\include{cpp} editing_message_after_click2.cpp

0 comments on commit 75877cd

Please sign in to comment.