2222
2323import static com .mcmoddev .mmdbot .thelistener .TheListener .getInstance ;
2424import static com .mcmoddev .mmdbot .thelistener .util .Utils .mentionAndID ;
25+
26+ import club .minnced .discord .webhook .send .AllowedMentions ;
2527import com .mcmoddev .mmdbot .core .event .moderation .WarningEvent ;
28+ import com .mcmoddev .mmdbot .core .util .webhook .WebhookManager ;
2629import com .mcmoddev .mmdbot .thelistener .TheListener ;
2730import com .mcmoddev .mmdbot .thelistener .util .LoggingType ;
2831import com .mcmoddev .mmdbot .thelistener .util .Utils ;
3336import net .dv8tion .jda .api .audit .AuditLogKey ;
3437import net .dv8tion .jda .api .entities .Member ;
3538import net .dv8tion .jda .api .entities .MessageEmbed ;
39+ import net .dv8tion .jda .api .entities .StandardGuildMessageChannel ;
3640import net .dv8tion .jda .api .entities .User ;
3741import net .dv8tion .jda .api .events .guild .GuildBanEvent ;
3842import net .dv8tion .jda .api .events .guild .GuildUnbanEvent ;
5054import java .util .Optional ;
5155import java .util .concurrent .TimeUnit ;
5256
53- // TODO add timeout events
5457public final class ModerationEvents extends ListenerAdapter {
5558 public static final ModerationEvents INSTANCE = new ModerationEvents ();
5659
60+ private static final String WEBHOOK_NAME = "ModerationLogs" ;
61+ private static final WebhookManager WEBHOOKS = WebhookManager .of (e -> e .trim ().equals (WEBHOOK_NAME ), WEBHOOK_NAME , AllowedMentions .none ());
62+
5763 public static final Color RUBY = new Color (0xE91E63 );
5864 public static final Color LIGHT_SEA_GREEN = new Color (0x1ABC9C );
5965
@@ -75,7 +81,7 @@ public void onGuildBan(@NotNull final GuildBanEvent event) {
7581 embed .addField ("**Name:**" , bannedUser .getName (), false );
7682 embed .addField ("**User ID:**" , bannedUser .getId (), false );
7783 embed .addField ("**Profile:**" , bannedUser .getAsMention (), false );
78- embed .addField ("**Profile Age**" , TimeFormat .RELATIVE
84+ embed .addField ("**Profile Age: **" , TimeFormat .RELATIVE
7985 .format (bannedUser .getTimeCreated ()), false );
8086
8187 if (log .getReason () != null ) {
@@ -117,7 +123,7 @@ public void onGuildUnban(@NotNull final GuildUnbanEvent event) {
117123 embed .addField ("**Name:**" , bannedUser .getName (), false );
118124 embed .addField ("**User ID:**" , bannedUser .getId (), false );
119125 embed .addField ("**Profile:**" , bannedUser .getAsMention (), false );
120- embed .addField ("**Profile Age**" , TimeFormat .RELATIVE
126+ embed .addField ("**Profile Age: **" , TimeFormat .RELATIVE
121127 .format (bannedUser .getTimeCreated ()), false );
122128
123129 final var targetId = log .getTargetIdLong ();
@@ -149,15 +155,21 @@ public void onGuildMemberUpdateNickname(@NotNull final GuildMemberUpdateNickname
149155
150156 embed .setColor (Color .YELLOW );
151157 embed .setTitle ("Nickname Changed" );
152- embed .setThumbnail (event .getUser ().getAvatarUrl ());
153158 embed .addField ("User:" , event .getUser ().getAsMention () + " (" + event .getUser ().getId () + ")" , true );
154159 embed .setTimestamp (Instant .now ());
155- embed .addField ("Nickname Editor: " , editor .map (u -> "%s (%s)" .formatted (u .getAsMention (), u .getId ())).orElse ("Unknown" ), false );
160+ if (editor .isPresent ()) {
161+ final User editorU = editor .get ();
162+ if (editorU .getIdLong () != event .getUser ().getIdLong ()) {
163+ embed .addField ("Nickname Editor: " , "%s (%s)" .formatted (editorU .getAsMention (), editorU .getId ()), false );
164+ }
165+ } else {
166+ embed .addField ("Nickname Editor: " , "Unknown" , false );
167+ }
156168
157169 embed .addField ("Old Nickname:" , event .getOldNickname () == null ? "*None*" : event .getOldNickname (), true );
158170 embed .addField ("New Nickname:" , event .getNewNickname () == null ? "*None*" : event .getNewNickname (), true );
159171
160- log (event .getGuild ().getIdLong (), event .getJDA (), embed .build ());
172+ logWithWebhook (event .getGuild ().getIdLong (), event .getJDA (), embed .build (), event . getUser ());
161173 }
162174 }, () -> onNickNoAudit (event ));
163175 }
@@ -175,7 +187,7 @@ private void onNickNoAudit(final GuildMemberUpdateNicknameEvent event) {
175187 embed .addField ("Old Nickname:" , event .getOldNickname () == null ? "*None*" : event .getOldNickname (), true );
176188 embed .addField ("New Nickname:" , event .getNewNickname () == null ? "*None*" : event .getNewNickname (), true );
177189
178- log (event .getGuild ().getIdLong (), event .getJDA (), embed .build ());
190+ logWithWebhook (event .getGuild ().getIdLong (), event .getJDA (), embed .build (), event . getUser ());
179191 }
180192
181193 @ Override
@@ -199,7 +211,7 @@ public void onGuildMemberRemove(@NotNull final GuildMemberRemoveEvent event) {
199211 embed .addField ("**Name:**" , kickedUser .getName (), false );
200212 embed .addField ("**User ID:**" , kickedUser .getId (), false );
201213 embed .addField ("**Profile:**" , kickedUser .getAsMention (), false );
202- embed .addField ("**Profile Age**" , TimeFormat .RELATIVE
214+ embed .addField ("**Profile Age: **" , TimeFormat .RELATIVE
203215 .format (kickedUser .getTimeCreated ()), false );
204216
205217 embed .addField ("Guild Join Time:" , Optional .ofNullable (event .getMember ()).map (Member ::getTimeJoined )
@@ -362,4 +374,18 @@ private void log(long guildId, JDA jda, MessageEmbed embed) {
362374 }
363375 });
364376 }
377+ private void logWithWebhook (long guildId , JDA jda , MessageEmbed embed , User author ) {
378+ final var loggingChannels = LoggingType .MODERATION_EVENTS .getChannels (guildId );
379+ loggingChannels
380+ .forEach (id -> {
381+ final var ch = id .resolve (idL -> jda .getChannelById (StandardGuildMessageChannel .class , idL ));
382+ if (ch != null ) {
383+ WEBHOOKS .getWebhook (ch )
384+ .send (com .mcmoddev .mmdbot .core .util .Utils .webhookMessage (embed )
385+ .setUsername (author .getName ())
386+ .setAvatarUrl (author .getEffectiveAvatarUrl ())
387+ .build ());
388+ }
389+ });
390+ }
365391}
0 commit comments