@@ -25,11 +25,11 @@ dpp::task<dpp::invite> members::findinvite(dpp::cluster* bot, const dpp::snowfla
25
25
co_return invite_used;
26
26
}
27
27
// 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) {
29
29
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 ) {
31
31
// Update invite in cache
32
- invites[i] = invite;
32
+ cached_invite = invite;
33
33
34
34
invite_used = invite;
35
35
co_return invite_used;
@@ -142,4 +142,106 @@ void members::on_leave(const dpp::guild_member_remove_t& event, const nlohmann::
142
142
.set_description (event.removed .username + " has left Tech Support Central." )
143
143
.set_footer (dpp::embed_footer ().set_text (std::string (" User ID: " ) + event.removed .id .str ()));
144
144
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
+ }
145
247
}
0 commit comments