Skip to content

Commit 80d012f

Browse files
committed
Nickname and role listeners
1 parent c60b20d commit 80d012f

File tree

4 files changed

+114
-3
lines changed

4 files changed

+114
-3
lines changed

config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"welcome": 854429524477476864,
3131
"suggestion_list": 854429524798996483,
3232
"tickets": 854429524798996480,
33+
"new_staff_members": 899730477064265769,
3334
"staff_news": 854429525147385895,
3435
"discord_updates": 854429524976861233,
3536
"mod_log": 854429525147385889,

src/listeners/members.cpp

Lines changed: 105 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ dpp::task<dpp::invite> members::findinvite(dpp::cluster* bot, const dpp::snowfla
2525
co_return invite_used;
2626
}
2727
// Look for any invite with more uses than the cache has
28-
for (size_t i = 0; i < invites.size(); i++) {
28+
for (dpp::invite& cached_invite : invites) {
2929
for (const dpp::invite& invite : std::get<dpp::invite_map>(invites_conf.value) | std::views::values) {
30-
if (invite.code == invites[i].code && invite.uses > invites[i].uses) {
30+
if (invite.code == cached_invite.code && invite.uses > cached_invite.uses) {
3131
// Update invite in cache
32-
invites[i] = invite;
32+
cached_invite = invite;
3333

3434
invite_used = invite;
3535
co_return invite_used;
@@ -142,4 +142,106 @@ void members::on_leave(const dpp::guild_member_remove_t& event, const nlohmann::
142142
.set_description(event.removed.username + " has left Tech Support Central.")
143143
.set_footer(dpp::embed_footer().set_text(std::string("User ID: ") + event.removed.id.str()));
144144
event.owner->message_create(dpp::message(config["log_channel_ids"]["member_log"], embed));
145+
}
146+
147+
dpp::task<> members::on_member_edit(const dpp::guild_audit_log_entry_create_t& event, const nlohmann::json& config) {
148+
dpp::confirmation_callback_t user_conf = co_await event.owner->co_user_get_cached(event.entry.target_id);
149+
if (!user_conf.is_error()) {
150+
dpp::user_identified user = std::get<dpp::user_identified>(user_conf.value);
151+
for (const dpp::audit_change& change : event.entry.changes) {
152+
dpp::embed embed;
153+
dpp::snowflake channel = 0;
154+
if (change.key == "nick") {
155+
embed.set_author(dpp::embed_author(user.username, "", user.get_avatar_url()));
156+
dpp::confirmation_callback_t mod_conf = co_await event.owner->co_user_get_cached(event.entry.user_id);
157+
if (!mod_conf.is_error()) {
158+
dpp::user_identified mod = std::get<dpp::user_identified>(mod_conf.value);
159+
embed.set_thumbnail(mod.get_avatar_url());
160+
embed.add_field("Named by", mod.global_name, false);
161+
}
162+
if (change.old_value.empty()) {
163+
embed.set_color(dpp::colors::green).set_title("Nickname Added");
164+
} else {
165+
embed.set_color(0x00A0A0).set_title("Nickname Changed");
166+
// Remove quotation marks at beginning and end
167+
embed.add_field("Old Nickname", change.old_value.substr(1, change.old_value.size() - 2), true);
168+
}
169+
if (change.new_value.empty()) {
170+
embed.set_color(dpp::colors::red).set_title("Nickname Removed");
171+
} else {
172+
// Remove quotation marks at beginning and end
173+
embed.add_field("New Nickname", change.new_value.substr(1, change.new_value.size() - 2), true);
174+
}
175+
embed.set_footer(dpp::embed_footer().set_text(std::string("User ID: ") + user.id.str()));
176+
channel = config["log_channel_ids"]["name_changed"];
177+
} // other attributes can be added in the future
178+
if (channel != 0) {
179+
event.owner->message_create(dpp::message(channel, embed));
180+
}
181+
}
182+
}
183+
}
184+
185+
dpp::task<> members::on_roles_change(const dpp::guild_audit_log_entry_create_t& event, const nlohmann::json& config) {
186+
dpp::confirmation_callback_t user_conf = co_await event.owner->co_user_get_cached(event.entry.target_id);
187+
if (!user_conf.is_error()) {
188+
dpp::user_identified user = std::get<dpp::user_identified>(user_conf.value);
189+
for (const dpp::audit_change& change : event.entry.changes) {
190+
std::vector<dpp::snowflake> roles;
191+
if (!change.new_value.empty()) {
192+
for (const auto& role : nlohmann::json::parse(change.new_value)) {
193+
roles.emplace_back(role["id"].get<std::string>());
194+
// Don't log new members getting their OG role on join
195+
if (roles.back() == config["role_ids"]["og"].get<dpp::snowflake>()) {
196+
co_return;
197+
}
198+
// New staff member log
199+
if (change.key == "$add") {
200+
if (roles.back() == config["role_ids"]["moderator"].get<dpp::snowflake>()) {
201+
dpp::embed welcome_embed = dpp::embed().set_color(0xF1C40F).set_title("New Moderator")
202+
.set_thumbnail(user.get_avatar_url())
203+
.set_description(std::format("Congratulate {} on the promotion from trial mod!", user.get_mention()));
204+
event.owner->message_create(dpp::message(config["log_channel_ids"]["new_staff_members"], welcome_embed));
205+
}
206+
else if (roles.back() == config["role_ids"]["trial_mod"].get<dpp::snowflake>()) {
207+
dpp::embed welcome_embed = dpp::embed().set_color(0x3498DB).set_title("New Trial Moderator")
208+
.set_thumbnail(user.get_avatar_url())
209+
.set_description(std::format("Welcome {} to the moderation team!", user.get_mention()));
210+
event.owner->message_create(dpp::message(config["log_channel_ids"]["new_staff_members"], welcome_embed));
211+
}
212+
else if (roles.back() == config["role_ids"]["support_team"].get<dpp::snowflake>()) {
213+
dpp::embed welcome_embed = dpp::embed().set_color(0x4DF352).set_title("New Support Team Member")
214+
.set_thumbnail(user.get_avatar_url())
215+
.set_description(std::format("Welcome {} to the support team!", user.get_mention()));
216+
event.owner->message_create(dpp::message(config["log_channel_ids"]["new_staff_members"], welcome_embed));
217+
}
218+
}
219+
}
220+
}
221+
222+
dpp::embed embed = dpp::embed().set_author(dpp::embed_author(user.global_name, "", user.get_avatar_url()));
223+
if (change.key == "$add") {
224+
embed.set_color(dpp::colors::green).set_title("Role Added");
225+
} else if (change.key == "$remove") {
226+
embed.set_color(dpp::colors::red).set_title("Role Removed");
227+
}
228+
229+
std::string description;
230+
for (dpp::snowflake role : roles) {
231+
description += "<@&";
232+
description += role.str();
233+
description += ">\n";
234+
}
235+
embed.set_description(description);
236+
237+
dpp::confirmation_callback_t mod_conf = co_await event.owner->co_user_get_cached(event.entry.user_id);
238+
if (!mod_conf.is_error()) {
239+
dpp::user_identified mod = std::get<dpp::user_identified>(mod_conf.value);
240+
embed.set_thumbnail(mod.get_avatar_url()).add_field("By", mod.global_name, false);
241+
}
242+
embed.set_footer(dpp::embed_footer().set_text(std::string("User ID: ") + user.id.str()));
243+
244+
event.owner->message_create(dpp::message(config["log_channel_ids"]["role_changed"], embed));
245+
}
246+
}
145247
}

src/listeners/members.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ namespace members {
3030
dpp::task<> on_unban(const dpp::guild_audit_log_entry_create_t& event, const nlohmann::json& config);
3131
dpp::task<> on_join(const dpp::guild_member_add_t& event, const nlohmann::json& config, std::vector<dpp::invite>& invites);
3232
void on_leave(const dpp::guild_member_remove_t& event, const nlohmann::json& config);
33+
dpp::task<> on_member_edit(const dpp::guild_audit_log_entry_create_t& event, const nlohmann::json& config);
34+
dpp::task<> on_roles_change(const dpp::guild_audit_log_entry_create_t& event, const nlohmann::json& config);
3335
}

src/main.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,12 @@ int main(int argc, char* argv[]) {
307307
case dpp::aut_member_ban_remove:
308308
co_await members::on_unban(event, config);
309309
break;
310+
case dpp::aut_member_update:
311+
co_await members::on_member_edit(event, config);
312+
break;
313+
case dpp::aut_member_role_update:
314+
co_await members::on_roles_change(event, config);
315+
break;
310316
default:
311317
break;
312318
}

0 commit comments

Comments
 (0)