@@ -43,33 +43,71 @@ void meta::get_commit(const dpp::slashcommand_t &event) {
43
43
" I am currently running on commit [{}](https://github.com/TechSupportCentral/TSCppBot/commit/{})." , commit_hash, commit_hash)));
44
44
}
45
45
46
- void meta::send_message (const dpp::slashcommand_t &event) {
47
- event.owner ->message_create (dpp::message (event.command .channel_id , std::get<std::string>(event.get_parameter (" message" ))));
48
- event.reply (dpp::message (" Message sent" ).set_flags (dpp::m_ephemeral));
46
+ dpp::task<> meta::send_message (const dpp::slashcommand_t &event) {
47
+ // Send "thinking" response to allow time for Discord API
48
+ dpp::async thinking = event.co_thinking (true );
49
+ // Replace escaped newline "\n" with actual newline character
50
+ std::string message = std::get<std::string>(event.get_parameter (" message" ));
51
+ size_t pos = message.find (" \\ n" );
52
+ while (pos < message.size () && pos != std::string::npos) {
53
+ // Don't replace if "\\n" is sent (double escape)
54
+ if (message[pos - 1 ] != ' \\ ' ) {
55
+ message.replace (pos, 2 , " \n " );
56
+ }
57
+ // Find next occurence, if any
58
+ pos = message.find (" \\ n" , pos + 1 );
59
+ }
60
+ // Send message
61
+ dpp::confirmation_callback_t msg_conf = co_await event.owner ->co_message_create (dpp::message (event.command .channel_id , message));
62
+ co_await thinking;
63
+ if (msg_conf.is_error ()) {
64
+ event.edit_original_response (dpp::message (" Message failed to send." ));
65
+ } else {
66
+ event.edit_original_response (dpp::message (" Message sent" ));
67
+ }
49
68
}
50
69
51
- void meta::announce (const dpp::slashcommand_t &event, const nlohmann::json &config) {
52
- dpp::embed embed = dpp::embed ().set_color (0x00A0A0 ).
53
- set_description (std::get<std::string>(event.get_parameter (" message" )));
70
+ dpp::task<> meta::announce (const dpp::slashcommand_t &event, const nlohmann::json &config) {
71
+ // Send "thinking" response to allow time for Discord API
72
+ dpp::async thinking = event.co_thinking (true );
73
+ // Replace escaped newline "\\n" with actual newline character
74
+ std::string message = std::get<std::string>(event.get_parameter (" message" ));
75
+ size_t pos = message.find (" \\ n" );
76
+ while (pos < message.size () && pos != std::string::npos) {
77
+ // Don't replace if "\\n" is sent (double escape)
78
+ if (message[pos - 1 ] != ' \\ ' ) {
79
+ message.replace (pos, 2 , " \n " );
80
+ }
81
+ // Find next occurence, if any
82
+ pos = message.find (" \\ n" , pos + 1 );
83
+ }
84
+
85
+ dpp::embed embed = dpp::embed ().set_color (util::color::DEFAULT).
86
+ set_description (message);
54
87
try {
55
88
std::string title = std::get<std::string>(event.get_parameter (" title" ));
56
89
embed.set_title (title);
57
90
} catch (const std::bad_variant_access&) {
58
91
embed.set_title (" Announcement" );
59
92
}
60
- dpp::message message = dpp::message (event.command .channel_id , embed);
93
+ dpp::message msg = dpp::message (event.command .channel_id , embed);
61
94
try {
62
95
dpp::snowflake ping_role_id = std::get<dpp::snowflake>(event.get_parameter (" ping" ));
63
96
if (ping_role_id == config[" role_ids" ][" everyone" ].get <dpp::snowflake>()) {
64
- message .set_content (" @everyone" );
65
- message .set_allowed_mentions (true , true , true );
97
+ msg .set_content (" @everyone" );
98
+ msg .set_allowed_mentions (true , true , true );
66
99
} else {
67
- message .set_content (event.command .get_resolved_role (ping_role_id).get_mention ());
68
- message .set_allowed_mentions (true , true );
100
+ msg .set_content (event.command .get_resolved_role (ping_role_id).get_mention ());
101
+ msg .set_allowed_mentions (true , true );
69
102
}
70
103
} catch (const std::bad_variant_access&) {}
71
- event.owner ->message_create (message);
72
- event.reply (dpp::message (" Announcement sent" ).set_flags (dpp::m_ephemeral));
104
+ dpp::confirmation_callback_t msg_conf = co_await event.owner ->co_message_create (msg);
105
+ co_await thinking;
106
+ if (msg_conf.is_error ()) {
107
+ event.edit_original_response (dpp::message (" Announcement failed to send." ));
108
+ } else {
109
+ event.edit_original_response (dpp::message (" Announcement sent" ));
110
+ }
73
111
}
74
112
75
113
dpp::task<> meta::dm (const dpp::slashcommand_t &event, const nlohmann::json &config) {
@@ -78,15 +116,15 @@ dpp::task<> meta::dm(const dpp::slashcommand_t &event, const nlohmann::json &con
78
116
// Get user and message, construct embed, and send DM
79
117
dpp::user user = event.command .get_resolved_user (std::get<dpp::snowflake>(event.get_parameter (" user" )));
80
118
std::string message = std::get<std::string>(event.get_parameter (" message" ));
81
- dpp::embed dm_embed = dpp::embed ().set_color (0x00A0A0 ).set_title (" Message from the owners of TSC" ).set_description (message);
119
+ dpp::embed dm_embed = dpp::embed ().set_color (util::color::DEFAULT ).set_title (" Message from the owners of TSC" ).set_description (message);
82
120
dpp::confirmation_callback_t confirmation = co_await event.owner ->co_direct_message_create (user.id , dpp::message (dm_embed));
83
121
if (confirmation.is_error ()) {
84
122
co_await thinking;
85
123
event.edit_original_response (dpp::message (std::string (" Failed to send direct message: " ) + confirmation.get_error ().human_readable ));
86
124
co_return ;
87
125
}
88
126
// Let sender know and send a log message
89
- dpp::embed log_embed = dpp::embed ().set_color (dpp::colors::green ).set_title (" DM Sent" )
127
+ dpp::embed log_embed = dpp::embed ().set_color (util::color::GREEN ).set_title (" DM Sent" )
90
128
.set_thumbnail (user.get_avatar_url ()).add_field (" Sent to" , user.username , true )
91
129
.add_field (" User ID" , std::to_string (user.id ), true )
92
130
.add_field (" Sent by" , event.command .member .get_nickname (), false )
0 commit comments