Skip to content

Commit 20c8626

Browse files
committed
Finishing touches before initial deployment
1 parent d47dcbf commit 20c8626

File tree

13 files changed

+138
-82
lines changed

13 files changed

+138
-82
lines changed

TSCppBot.db.example

52 KB
Binary file not shown.

src/command_modules/db_commands.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,14 @@ dpp::task<> db_commands::add_text_command(const dpp::form_submit_t &event, const
130130
event.owner->guild_command_create(slash_command, config["guild_id"]);
131131
}
132132
// Send log
133-
dpp::embed embed = dpp::embed().set_color(dpp::colors::green).set_title("Database Command Added")
133+
dpp::embed embed = dpp::embed().set_color(util::color::GREEN).set_title("Database Command Added")
134134
.set_thumbnail(event.command.member.get_avatar_url()).add_field("Added by", event.command.member.get_nickname(), false)
135135
.add_field("Command name", command_name, true).add_field("Command type", "Text", true);
136136
event.owner->message_create(dpp::message(config["log_channel_ids"]["staff_news"], embed));
137137
// Send confirmation
138138
co_await thinking;
139-
event.edit_original_response(dpp::message(std::format("Command `{}` added successfully.", command_name)));
139+
event.edit_original_response(dpp::message(std::format("Command `{}` added successfully."
140+
"\nYou may need to restart Discord for it to show up.", command_name)));
140141
}
141142

142143
// TODO interactive UI for adding embed commands
@@ -277,7 +278,11 @@ dpp::task<> db_commands::add_embed_command(const dpp::slashcommand_t &event, con
277278
footer.set_icon(std::get<std::string>(event.get_parameter("footer_icon_url")));
278279
sql_row.footer_icon_url = util::sql_escape_string(footer.icon_url, true);
279280
} catch (const std::bad_variant_access&) {
280-
sql_row.footer_icon_url = "NULL";
281+
if (sql_row.footer_text == "NULL") {
282+
sql_row.footer_icon_url = "NULL";
283+
} else {
284+
sql_row.footer_icon_url = "";
285+
}
281286
}
282287
command.embed.set_footer(footer);
283288

@@ -310,13 +315,14 @@ dpp::task<> db_commands::add_embed_command(const dpp::slashcommand_t &event, con
310315
event.owner->guild_command_create(slash_command, config["guild_id"]);
311316
}
312317
// Send log
313-
dpp::embed embed = dpp::embed().set_color(dpp::colors::green).set_title("Database Command Added")
318+
dpp::embed embed = dpp::embed().set_color(util::color::GREEN).set_title("Database Command Added")
314319
.set_thumbnail(event.command.member.get_avatar_url()).add_field("Added by", event.command.member.get_nickname(), false)
315320
.add_field("Command name", command_name, true).add_field("Command type", "Embed", true);
316321
event.owner->message_create(dpp::message(config["log_channel_ids"]["staff_news"], embed));
317322
// Send confirmation
318323
co_await thinking;
319-
event.edit_original_response(dpp::message(std::format("Command `{}` added successfully.", command_name)));
324+
event.edit_original_response(dpp::message(std::format("Command `{}` added successfully."
325+
"\nYou may need to restart Discord for it to show up.", command_name)));
320326
}
321327

322328
void db_commands::add_embed_command_field_modal(const dpp::slashcommand_t &event, const std::unordered_map<std::string, embed_command> &embed_commands) {
@@ -808,7 +814,7 @@ dpp::task<> db_commands::remove_command(const dpp::slashcommand_t &event, const
808814
text_commands.erase(text_command_it);
809815

810816
// Send log
811-
dpp::embed embed = dpp::embed().set_color(dpp::colors::red).set_title("Database Command Removed")
817+
dpp::embed embed = dpp::embed().set_color(util::color::RED).set_title("Database Command Removed")
812818
.set_thumbnail(event.command.member.get_avatar_url()).add_field("Removed by", event.command.member.get_nickname(), false)
813819
.add_field("Command name", command_name, true).add_field("Command type", "Text", true);
814820
event.owner->message_create(dpp::message(config["log_channel_ids"]["staff_news"], embed));
@@ -874,7 +880,7 @@ dpp::task<> db_commands::remove_command(const dpp::slashcommand_t &event, const
874880
embed_commands.erase(embed_command_it);
875881

876882
// Send log
877-
dpp::embed embed = dpp::embed().set_color(dpp::colors::red).set_title("Database Command Removed")
883+
dpp::embed embed = dpp::embed().set_color(util::color::RED).set_title("Database Command Removed")
878884
.set_thumbnail(event.command.member.get_avatar_url()).add_field("Removed by", event.command.member.get_nickname(), false)
879885
.add_field("Command name", command_name, true).add_field("Command type", "Embed", true);
880886
event.owner->message_create(dpp::message(config["log_channel_ids"]["staff_news"], embed));
@@ -890,7 +896,7 @@ dpp::task<> db_commands::remove_command(const dpp::slashcommand_t &event, const
890896

891897
void db_commands::get_commands(const dpp::slashcommand_t &event, std::unordered_map<std::string, text_command> &text_commands, std::unordered_map<std::string, embed_command> &embed_commands) {
892898
event.thinking();
893-
dpp::embed embed = dpp::embed().set_color(0x00A0A0).set_title("Commands in Database:")
899+
dpp::embed embed = dpp::embed().set_color(util::color::DEFAULT).set_title("Commands in Database:")
894900
.set_footer("Commands not accessible in DM are on the second column", "");
895901
for (const auto& [name, command] : text_commands) {
896902
embed.add_field(name, command.description, command.global);

src/command_modules/meta.cpp

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,33 +43,71 @@ void meta::get_commit(const dpp::slashcommand_t &event) {
4343
"I am currently running on commit [{}](https://github.com/TechSupportCentral/TSCppBot/commit/{}).", commit_hash, commit_hash)));
4444
}
4545

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+
}
4968
}
5069

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);
5487
try {
5588
std::string title = std::get<std::string>(event.get_parameter("title"));
5689
embed.set_title(title);
5790
} catch (const std::bad_variant_access&) {
5891
embed.set_title("Announcement");
5992
}
60-
dpp::message message = dpp::message(event.command.channel_id, embed);
93+
dpp::message msg = dpp::message(event.command.channel_id, embed);
6194
try {
6295
dpp::snowflake ping_role_id = std::get<dpp::snowflake>(event.get_parameter("ping"));
6396
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);
6699
} 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);
69102
}
70103
} 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+
}
73111
}
74112

75113
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
78116
// Get user and message, construct embed, and send DM
79117
dpp::user user = event.command.get_resolved_user(std::get<dpp::snowflake>(event.get_parameter("user")));
80118
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);
82120
dpp::confirmation_callback_t confirmation = co_await event.owner->co_direct_message_create(user.id, dpp::message(dm_embed));
83121
if (confirmation.is_error()) {
84122
co_await thinking;
85123
event.edit_original_response(dpp::message(std::string("Failed to send direct message: ") + confirmation.get_error().human_readable));
86124
co_return;
87125
}
88126
// 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")
90128
.set_thumbnail(user.get_avatar_url()).add_field("Sent to", user.username, true)
91129
.add_field("User ID", std::to_string(user.id), true)
92130
.add_field("Sent by", event.command.member.get_nickname(), false)

src/command_modules/meta.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ namespace meta {
2020
void ping(const dpp::slashcommand_t &event);
2121
void uptime(const dpp::slashcommand_t &event);
2222
void get_commit(const dpp::slashcommand_t &event);
23-
void send_message(const dpp::slashcommand_t &event);
23+
dpp::task<> send_message(const dpp::slashcommand_t &event);
2424
dpp::task<> dm(const dpp::slashcommand_t &event, const nlohmann::json &config);
25-
void announce(const dpp::slashcommand_t &event, const nlohmann::json &config);
25+
dpp::task<> announce(const dpp::slashcommand_t &event, const nlohmann::json &config);
2626
void remindme(const dpp::slashcommand_t &event, sqlite3* db);
2727
void set_bump_timer(const dpp::slashcommand_t &event, const nlohmann::json &config);
2828
}

0 commit comments

Comments
 (0)