From 9f260913a70408f5089ea54cc2131c183c52a4cf Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Sun, 23 Aug 2020 19:30:42 -0500 Subject: [PATCH 01/29] Created InverseEvent utility class. Looked through every method. Added all methods that can logically be inverted. Implemented some inversions as samples --- .../commons/utils/InverseEvent.java | 489 ++++++++++++++++++ 1 file changed, 489 insertions(+) create mode 100644 commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java new file mode 100644 index 00000000..a527beab --- /dev/null +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java @@ -0,0 +1,489 @@ +package com.jagrosh.jdautilities.commons.utils; + +import net.dv8tion.jda.api.events.Event; +import net.dv8tion.jda.api.events.channel.category.CategoryCreateEvent; +import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdateNameEvent; +import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdatePositionEvent; +import net.dv8tion.jda.api.events.channel.priv.PrivateChannelCreateEvent; +import net.dv8tion.jda.api.events.channel.store.StoreChannelCreateEvent; +import net.dv8tion.jda.api.events.channel.store.update.StoreChannelUpdateNameEvent; +import net.dv8tion.jda.api.events.channel.store.update.StoreChannelUpdatePositionEvent; +import net.dv8tion.jda.api.events.channel.text.TextChannelCreateEvent; +import net.dv8tion.jda.api.events.channel.text.TextChannelDeleteEvent; +import net.dv8tion.jda.api.events.channel.text.update.*; +import net.dv8tion.jda.api.events.channel.voice.VoiceChannelCreateEvent; +import net.dv8tion.jda.api.events.channel.voice.VoiceChannelDeleteEvent; +import net.dv8tion.jda.api.events.channel.voice.update.*; +import net.dv8tion.jda.api.events.emote.EmoteAddedEvent; +import net.dv8tion.jda.api.events.emote.update.EmoteUpdateNameEvent; +import net.dv8tion.jda.api.events.emote.update.EmoteUpdateRolesEvent; +import net.dv8tion.jda.api.events.guild.GuildJoinEvent; +import net.dv8tion.jda.api.events.guild.GuildUnbanEvent; +import net.dv8tion.jda.api.events.guild.invite.GuildInviteCreateEvent; +import net.dv8tion.jda.api.events.guild.invite.GuildInviteDeleteEvent; +import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent; +import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleAddEvent; +import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleRemoveEvent; +import net.dv8tion.jda.api.events.guild.member.update.GuildMemberUpdateNicknameEvent; +import net.dv8tion.jda.api.events.guild.override.PermissionOverrideCreateEvent; +import net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent; +import net.dv8tion.jda.api.events.guild.override.PermissionOverrideUpdateEvent; +import net.dv8tion.jda.api.events.guild.voice.*; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; +import net.dv8tion.jda.api.events.role.RoleCreateEvent; +import net.dv8tion.jda.api.events.role.RoleDeleteEvent; +import net.dv8tion.jda.api.events.role.update.*; +import net.dv8tion.jda.api.events.self.*; +import net.dv8tion.jda.api.managers.ChannelManager; +import net.dv8tion.jda.api.requests.RestAction; +import net.dv8tion.jda.api.requests.restaction.AuditableRestAction; + +/** + * A utility class meant to serve as a way to rollback certain events where it makes sense to. + * + *

+ * All methods are overloaded static factory methods, always returning a {@link net.dv8tion.jda.api.requests.RestAction RestAction} + * meant to "undo" the given event. Note that this will only be possible for events in which it makes sense. + * In events where something is posted, the inverse would be another request to remove said post, for example. + * + * Also, since it's a RestAction that simply makes an attempt at the inverse, it's not always possible due to multiple + * factors, such as permissions, etc. For example, trying to inverse a {@link net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent GuildMessageReceievedEvent} in a channel with no permission + * to remove messages will fail + *

+ *
+ *

+ * Events fired when something is "created" like a {@link net.dv8tion.jda.api.events.guild.override.PermissionOverrideCreateEvent PermissionOverrideCreateEvent} + * can usually be logically inverted, by removing what was created. + * + * Events fired for the deletion of something are a different story. Some cases are logical, but many are not, like the + * removal of a text channel. Cases where the complete undoing of the event cannot be guaranteed are not implemented + *

+ * + * @author HydroPage90 + */ +public final class InverseEvent +{ + /** + * @return A {@link net.dv8tion.jda.api.managers.ChannelManager ChannelManager} action that will return the category + * to its old position + */ + public static ChannelManager of(CategoryUpdatePositionEvent event) + { + ChannelManager manager = event.getCategory().getManager(); + int oldPosition = event.getOldPosition(); + + return manager.setPosition(oldPosition); + } + + /** + * @return An attempt to undo the update + */ + public static ChannelManager of(CategoryUpdateNameEvent event) + { + ChannelManager manager = event.getCategory().getManager(); + String oldName = event.getOldName(); + + return manager.setName(oldName); + } + + /** + * @return An attempt to remove the category + */ + public static AuditableRestAction of(CategoryCreateEvent event) + { + return event.getCategory().delete(); + } + + /** + * @return An attempt to remove the invite + */ + public static AuditableRestAction of(GuildInviteCreateEvent event) + { + return event.getInvite().delete(); + } + + /** + * @return An attempt to leave the guild + */ + public static RestAction of(GuildJoinEvent event) + { + return null; + } + + /** + * @return An attempt to take the role away + */ + public static RestAction of(GuildMemberRoleAddEvent event) + { + return null; + } + + /** + * @return An attempt to add the role back + */ + public static RestAction of(GuildMemberRoleRemoveEvent event) + { + return null; + } + + /** + * @return An attempt to undo the nickname update + */ + public static RestAction of(GuildMemberUpdateNicknameEvent event) + { + return null; + } + + //TODO Look into all the GenericGuildUpdateEvents. There are a lot + + /** + * @return An attempt to kick the member + */ + public static RestAction of(GuildMemberJoinEvent event) + { + return null; + } + + /** + * @return An attempt to ban them again + */ + public static RestAction of(GuildUnbanEvent event) + { + return null; + } + + /** + * @return An attempt to undeafen if they were deafened, or an attempt to deafen if they were undeafened + */ + public static RestAction of(GuildVoiceGuildDeafenEvent event) + { + return null; + } + + /** + * @return An attempt to kick them from the channel + */ + public static RestAction of(GuildVoiceJoinEvent event) + { + return null; + } + + /** + * @return An attempt to move them back to where they just were + */ + public static RestAction of(GuildVoiceMoveEvent event) + { + return null; + } + + /** + * @return An attempt to unmute if they were muted, or an attempt to mute if they were unmuted + */ + public static RestAction of(GuildVoiceGuildMuteEvent event) + { + return null; + } + + /** + * @return An attempt to remove said override + */ + public static RestAction of(PermissionOverrideCreateEvent event) + { + return null; + } + + /** + * @return An attempt to add the override back + */ + public static RestAction of(PermissionOverrideDeleteEvent event) + { + return null; + } + + /** + * @return An attempt to set rules to what they just were + */ + public static RestAction of(PermissionOverrideUpdateEvent event) + { + return null; + } + + /** + * @return An attempt to remove said emote + */ + public static RestAction of(EmoteAddedEvent event) + { + return null; + } + + /** + * @return An attempt to change the name back to what it just was + */ + public static RestAction of(EmoteUpdateNameEvent event) + { + return null; + } + + /** + * @return An attempt to change the roles to what they just were + */ + public static RestAction of(EmoteUpdateRolesEvent event) + { + return null; + } + + /** + * @return An attempt to remove said role + */ + public static RestAction of(RoleCreateEvent event) + { + return null; + } + + /** + * @return An attempt to add the role back + */ + public static RestAction of(RoleDeleteEvent event) + { + return null; + } + + /** + * @return An attempt to make the role unmentionable again + */ + public static RestAction of(RoleUpdateMentionableEvent event) + { + return null; + } + + /** + * @return An attempt to move the role back to where it just was + */ + public static RestAction of(RoleUpdatePositionEvent event) + { + return null; + } + + /** + * @return An attempt to change the role's permissions back + */ + public static RestAction of(RoleUpdatePermissionsEvent event) + { + return null; + } + + /** + * @return An attempt to change the role's name back + */ + public static RestAction of(RoleUpdateNameEvent event) + { + return null; + } + + //TODO What the hell is a hoisted role? Lmao, look at that later + + /** + * @return An attempt to change the role's color back to what it just was + */ + public static RestAction of(RoleUpdateColorEvent event) + { + return null; + } + + /** + * @return An attempt to remove said channel + */ + public static RestAction of(PrivateChannelCreateEvent event) + { + return null; + } + + // I'm not sure what this is, but keeping it here for now + public static RestAction of(SelfUpdateDiscriminatorEvent event) + { + return null; + } + + /** + * @return An attempt to change the avatar back + */ + public static RestAction of(SelfUpdateAvatarEvent event) + { + return null; + } + + // Don't know what this is either + public static RestAction of(SelfUpdateMFAEvent event) + { + return null; + } + + /** + * @return An attempt to change the name back + */ + public static RestAction of(SelfUpdateNameEvent event) + { + return null; + } + + // Not sure what this is + public static RestAction of(SelfUpdateVerifiedEvent event) + { + return null; + } + + /** + * @return An attempt to make the channel again + */ + public static RestAction of(VoiceChannelDeleteEvent event) + { + return null; + } + + /** + * @return An attempt to remove said channel + */ + public static RestAction of(VoiceChannelCreateEvent event) + { + return null; + } + + /** + * @return An attempt to change the voice channel's name back + */ + public static RestAction of(VoiceChannelUpdateNameEvent event) + { + return null; + } + + /** + * @return An attempt to change the voice channel's parent back + */ + public static RestAction of(VoiceChannelUpdateParentEvent event) + { + return null; + } + + /** + * @return An attempt to change the voice channel's position back + */ + public static RestAction of(VoiceChannelUpdatePositionEvent event) + { + return null; + } + + /** + * @return An attempt to change the voice channel's bitrate back + */ + public static RestAction of(VoiceChannelUpdateBitrateEvent event) + { + return null; + } + + /** + * @return An attempt to change the voice channel's user limit back + */ + public static RestAction of(VoiceChannelUpdateUserLimitEvent event) + { + return null; + } + + /** + * @return An attempt to remove said channel + */ + public static RestAction of(TextChannelCreateEvent event) + { + return null; + } + + /** + * @return An attempt to change the text channel's topic back + */ + public static RestAction of(TextChannelUpdateTopicEvent event) + { + return null; + } + + /** + * @return An attempt to change the text channel's name back + */ + public static RestAction of(TextChannelUpdateNameEvent event) + { + return null; + } + + /** + * @return An attempt to change the text channel's slowmode value back + */ + public static RestAction of(TextChannelUpdateSlowmodeEvent event) + { + return null; + } + + /** + * @return An attempt to move the text channel back + */ + public static RestAction of(TextChannelUpdatePositionEvent event) + { + return null; + } + + /** + * @return An attempt to change the text channel's NSFW state back + */ + public static RestAction of(TextChannelUpdateNSFWEvent event) + { + return null; + } + + /** + * @return An attempt to change the text channel's parent back + */ + public static RestAction of(TextChannelUpdateParentEvent event) + { + return null; + } + + /** + * @return An attempt to remove said reaction + */ + public static RestAction of(MessageReactionAddEvent event) + { + return null; + } + + /** + * @return An attempt to remove said message + */ + public static RestAction of(MessageReceivedEvent event) + { + return null; + } + + // I'm not really sure what to do about store channels. + + /** + * @return An attempt to move the store channel back + */ + public static RestAction of(StoreChannelUpdatePositionEvent event) + { + return null; + } + + /** + * @return An attempt to change the store channel's name back + */ + public static RestAction of(StoreChannelUpdateNameEvent event) + { + return null; + } + + /** + * @return An attempt to remove said store channel + */ + public static RestAction of(StoreChannelCreateEvent event) + { + return null; + } +} From a84a596311f1561acc8fc492d6e6249159a325c2 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Sun, 23 Aug 2020 19:38:50 -0500 Subject: [PATCH 02/29] Made docs more consistent (removed 2 unneeded imports) --- .../commons/utils/InverseEvent.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java index a527beab..2782ec2a 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java @@ -1,6 +1,5 @@ package com.jagrosh.jdautilities.commons.utils; -import net.dv8tion.jda.api.events.Event; import net.dv8tion.jda.api.events.channel.category.CategoryCreateEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdateNameEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdatePositionEvent; @@ -9,7 +8,6 @@ import net.dv8tion.jda.api.events.channel.store.update.StoreChannelUpdateNameEvent; import net.dv8tion.jda.api.events.channel.store.update.StoreChannelUpdatePositionEvent; import net.dv8tion.jda.api.events.channel.text.TextChannelCreateEvent; -import net.dv8tion.jda.api.events.channel.text.TextChannelDeleteEvent; import net.dv8tion.jda.api.events.channel.text.update.*; import net.dv8tion.jda.api.events.channel.voice.VoiceChannelCreateEvent; import net.dv8tion.jda.api.events.channel.voice.VoiceChannelDeleteEvent; @@ -20,7 +18,6 @@ import net.dv8tion.jda.api.events.guild.GuildJoinEvent; import net.dv8tion.jda.api.events.guild.GuildUnbanEvent; import net.dv8tion.jda.api.events.guild.invite.GuildInviteCreateEvent; -import net.dv8tion.jda.api.events.guild.invite.GuildInviteDeleteEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleAddEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleRemoveEvent; @@ -28,7 +25,10 @@ import net.dv8tion.jda.api.events.guild.override.PermissionOverrideCreateEvent; import net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent; import net.dv8tion.jda.api.events.guild.override.PermissionOverrideUpdateEvent; -import net.dv8tion.jda.api.events.guild.voice.*; +import net.dv8tion.jda.api.events.guild.voice.GuildVoiceGuildDeafenEvent; +import net.dv8tion.jda.api.events.guild.voice.GuildVoiceGuildMuteEvent; +import net.dv8tion.jda.api.events.guild.voice.GuildVoiceJoinEvent; +import net.dv8tion.jda.api.events.guild.voice.GuildVoiceMoveEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent; import net.dv8tion.jda.api.events.role.RoleCreateEvent; @@ -65,8 +65,7 @@ public final class InverseEvent { /** - * @return A {@link net.dv8tion.jda.api.managers.ChannelManager ChannelManager} action that will return the category - * to its old position + * @return An attempt to change the category's position back */ public static ChannelManager of(CategoryUpdatePositionEvent event) { @@ -77,7 +76,7 @@ public static ChannelManager of(CategoryUpdatePositionEvent event) } /** - * @return An attempt to undo the update + * @return An attempt to change the category's name back */ public static ChannelManager of(CategoryUpdateNameEvent event) { @@ -88,7 +87,7 @@ public static ChannelManager of(CategoryUpdateNameEvent event) } /** - * @return An attempt to remove the category + * @return An attempt to remove said category */ public static AuditableRestAction of(CategoryCreateEvent event) { @@ -96,7 +95,7 @@ public static AuditableRestAction of(CategoryCreateEvent event) } /** - * @return An attempt to remove the invite + * @return An attempt to remove said invite */ public static AuditableRestAction of(GuildInviteCreateEvent event) { @@ -104,7 +103,7 @@ public static AuditableRestAction of(GuildInviteCreateEvent event) } /** - * @return An attempt to leave the guild + * @return An attempt to leave said guild */ public static RestAction of(GuildJoinEvent event) { @@ -112,7 +111,7 @@ public static RestAction of(GuildJoinEvent event) } /** - * @return An attempt to take the role away + * @return An attempt to take said role away */ public static RestAction of(GuildMemberRoleAddEvent event) { @@ -120,7 +119,7 @@ public static RestAction of(GuildMemberRoleAddEvent event) } /** - * @return An attempt to add the role back + * @return An attempt to give the member the role back */ public static RestAction of(GuildMemberRoleRemoveEvent event) { @@ -128,7 +127,7 @@ public static RestAction of(GuildMemberRoleRemoveEvent event) } /** - * @return An attempt to undo the nickname update + * @return An attempt to change the member's nickname back */ public static RestAction of(GuildMemberUpdateNicknameEvent event) { @@ -138,7 +137,7 @@ public static RestAction of(GuildMemberUpdateNicknameEvent event) //TODO Look into all the GenericGuildUpdateEvents. There are a lot /** - * @return An attempt to kick the member + * @return An attempt to kick said member */ public static RestAction of(GuildMemberJoinEvent event) { @@ -146,7 +145,7 @@ public static RestAction of(GuildMemberJoinEvent event) } /** - * @return An attempt to ban them again + * @return An attempt to ban said member again */ public static RestAction of(GuildUnbanEvent event) { From f06ddc5c85fb6343242ee3c3847f53c7f2a0de71 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Sun, 23 Aug 2020 20:27:24 -0500 Subject: [PATCH 03/29] Removed "self" event inverters. Wouldn't be useful --- .../commons/utils/InverseEvent.java | 34 ------------------- 1 file changed, 34 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java index 2782ec2a..cbe3a5b9 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java @@ -298,40 +298,6 @@ public static RestAction of(PrivateChannelCreateEvent event) return null; } - // I'm not sure what this is, but keeping it here for now - public static RestAction of(SelfUpdateDiscriminatorEvent event) - { - return null; - } - - /** - * @return An attempt to change the avatar back - */ - public static RestAction of(SelfUpdateAvatarEvent event) - { - return null; - } - - // Don't know what this is either - public static RestAction of(SelfUpdateMFAEvent event) - { - return null; - } - - /** - * @return An attempt to change the name back - */ - public static RestAction of(SelfUpdateNameEvent event) - { - return null; - } - - // Not sure what this is - public static RestAction of(SelfUpdateVerifiedEvent event) - { - return null; - } - /** * @return An attempt to make the channel again */ From 7d3e3acba5fbb291a0cd30713f01ecc778c38cee Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Sun, 23 Aug 2020 21:34:15 -0500 Subject: [PATCH 04/29] Renamed InverseEvent to InverseAction --- .../commons/utils/{InverseEvent.java => InverseAction.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename commons/src/main/java/com/jagrosh/jdautilities/commons/utils/{InverseEvent.java => InverseAction.java} (99%) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java similarity index 99% rename from commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java rename to commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index cbe3a5b9..27219f96 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseEvent.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -62,7 +62,7 @@ * * @author HydroPage90 */ -public final class InverseEvent +public final class InverseAction { /** * @return An attempt to change the category's position back From 52f4f5ff508c27e542738872644fcd48a93babd6 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 10:21:39 -0500 Subject: [PATCH 05/29] Remove GuildUnbanEvent inversion. It doesn't make sense --- .../jagrosh/jdautilities/commons/utils/InverseAction.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 27219f96..4dbf009b 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -144,14 +144,6 @@ public static RestAction of(GuildMemberJoinEvent event) return null; } - /** - * @return An attempt to ban said member again - */ - public static RestAction of(GuildUnbanEvent event) - { - return null; - } - /** * @return An attempt to undeafen if they were deafened, or an attempt to deafen if they were undeafened */ From 5d218da562bc43088720d5ddaee887f03b9327d6 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 10:29:43 -0500 Subject: [PATCH 06/29] Added Member events --- .../commons/utils/InverseAction.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 4dbf009b..a7d3490c 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -111,19 +111,27 @@ public static RestAction of(GuildJoinEvent event) } /** - * @return An attempt to take said role away + * @return An attempt to take said roles away */ public static RestAction of(GuildMemberRoleAddEvent event) { - return null; + Guild guild = event.getGuild(); + Member member = event.getMember(); + List addedRoles = event.getRoles(); + + return guild.modifyMemberRoles(member, null, addedRoles); } /** - * @return An attempt to give the member the role back + * @return An attempt to give the member the roles back */ public static RestAction of(GuildMemberRoleRemoveEvent event) { - return null; + Guild guild = event.getGuild(); + Member member = event.getMember(); + List rolesRemoved = event.getRoles(); + + return guild.modifyMemberRoles(member, rolesRemoved, null); } /** @@ -131,7 +139,10 @@ public static RestAction of(GuildMemberRoleRemoveEvent event) */ public static RestAction of(GuildMemberUpdateNicknameEvent event) { - return null; + Member member = event.getMember(); + String oldNick = event.getOldNickname(); + + return member.modifyNickname(oldNick); } //TODO Look into all the GenericGuildUpdateEvents. There are a lot @@ -141,7 +152,7 @@ public static RestAction of(GuildMemberUpdateNicknameEvent event) */ public static RestAction of(GuildMemberJoinEvent event) { - return null; + return event.getMember().kick(); } /** From 133f8a6b7e15f1e121ad61d2dd3c2b1b0bb13803 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 10:32:36 -0500 Subject: [PATCH 07/29] Forgot to specify RestAction types --- .../jdautilities/commons/utils/InverseAction.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index a7d3490c..54321658 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -1,5 +1,8 @@ package com.jagrosh.jdautilities.commons.utils; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.Role; import net.dv8tion.jda.api.events.channel.category.CategoryCreateEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdateNameEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdatePositionEvent; @@ -39,6 +42,8 @@ import net.dv8tion.jda.api.requests.RestAction; import net.dv8tion.jda.api.requests.restaction.AuditableRestAction; +import java.util.List; + /** * A utility class meant to serve as a way to rollback certain events where it makes sense to. * @@ -113,7 +118,7 @@ public static RestAction of(GuildJoinEvent event) /** * @return An attempt to take said roles away */ - public static RestAction of(GuildMemberRoleAddEvent event) + public static AuditableRestAction of(GuildMemberRoleAddEvent event) { Guild guild = event.getGuild(); Member member = event.getMember(); @@ -125,7 +130,7 @@ public static RestAction of(GuildMemberRoleAddEvent event) /** * @return An attempt to give the member the roles back */ - public static RestAction of(GuildMemberRoleRemoveEvent event) + public static AuditableRestAction of(GuildMemberRoleRemoveEvent event) { Guild guild = event.getGuild(); Member member = event.getMember(); @@ -137,7 +142,7 @@ public static RestAction of(GuildMemberRoleRemoveEvent event) /** * @return An attempt to change the member's nickname back */ - public static RestAction of(GuildMemberUpdateNicknameEvent event) + public static AuditableRestAction of(GuildMemberUpdateNicknameEvent event) { Member member = event.getMember(); String oldNick = event.getOldNickname(); @@ -150,7 +155,7 @@ public static RestAction of(GuildMemberUpdateNicknameEvent event) /** * @return An attempt to kick said member */ - public static RestAction of(GuildMemberJoinEvent event) + public static AuditableRestAction of(GuildMemberJoinEvent event) { return event.getMember().kick(); } From d17de4a4b8d031ae5ff6e2bdbde66edf8bca53b1 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 11:15:40 -0500 Subject: [PATCH 08/29] Implement guild voice events --- .../commons/utils/InverseAction.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 54321658..20778a01 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -3,6 +3,7 @@ import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.VoiceChannel; import net.dv8tion.jda.api.events.channel.category.CategoryCreateEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdateNameEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdatePositionEvent; @@ -163,33 +164,43 @@ public static AuditableRestAction of(GuildMemberJoinEvent event) /** * @return An attempt to undeafen if they were deafened, or an attempt to deafen if they were undeafened */ - public static RestAction of(GuildVoiceGuildDeafenEvent event) + public static RestAction of(GuildVoiceGuildDeafenEvent event) { - return null; + return event.getGuild().leave(); } /** * @return An attempt to kick them from the channel */ - public static RestAction of(GuildVoiceJoinEvent event) + public static RestAction of(GuildVoiceJoinEvent event) { - return null; + Guild guild = event.getGuild(); + Member member = event.getMember(); + + return guild.kickVoiceMember(member); } /** * @return An attempt to move them back to where they just were */ - public static RestAction of(GuildVoiceMoveEvent event) + public static RestAction of(GuildVoiceMoveEvent event) { - return null; + Guild guild = event.getGuild(); + Member member = event.getMember(); + VoiceChannel previous = event.getOldValue(); + + return guild.moveVoiceMember(member, previous); } /** * @return An attempt to unmute if they were muted, or an attempt to mute if they were unmuted */ - public static RestAction of(GuildVoiceGuildMuteEvent event) + public static AuditableRestAction of(GuildVoiceGuildMuteEvent event) { - return null; + Member member = event.getMember(); + boolean action = event.isGuildMuted(); + + return member.mute(!action); } /** From 976eeceae53e9e00bd7f0226b85c5046a738324f Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 11:47:38 -0500 Subject: [PATCH 09/29] Implement permission override events --- .../commons/utils/InverseAction.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 20778a01..5f991b7d 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -1,9 +1,7 @@ package com.jagrosh.jdautilities.commons.utils; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.Role; -import net.dv8tion.jda.api.entities.VoiceChannel; +import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.events.channel.category.CategoryCreateEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdateNameEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdatePositionEvent; @@ -42,7 +40,9 @@ import net.dv8tion.jda.api.managers.ChannelManager; import net.dv8tion.jda.api.requests.RestAction; import net.dv8tion.jda.api.requests.restaction.AuditableRestAction; +import net.dv8tion.jda.api.requests.restaction.PermissionOverrideAction; +import java.util.EnumSet; import java.util.List; /** @@ -52,7 +52,7 @@ * All methods are overloaded static factory methods, always returning a {@link net.dv8tion.jda.api.requests.RestAction RestAction} * meant to "undo" the given event. Note that this will only be possible for events in which it makes sense. * In events where something is posted, the inverse would be another request to remove said post, for example. - * + *

* Also, since it's a RestAction that simply makes an attempt at the inverse, it's not always possible due to multiple * factors, such as permissions, etc. For example, trying to inverse a {@link net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent GuildMessageReceievedEvent} in a channel with no permission * to remove messages will fail @@ -61,7 +61,7 @@ *

* Events fired when something is "created" like a {@link net.dv8tion.jda.api.events.guild.override.PermissionOverrideCreateEvent PermissionOverrideCreateEvent} * can usually be logically inverted, by removing what was created. - * + *

* Events fired for the deletion of something are a different story. Some cases are logical, but many are not, like the * removal of a text channel. Cases where the complete undoing of the event cannot be guaranteed are not implemented *

@@ -206,25 +206,36 @@ public static AuditableRestAction of(GuildVoiceGuildMuteEvent event) /** * @return An attempt to remove said override */ - public static RestAction of(PermissionOverrideCreateEvent event) + public static AuditableRestAction of(PermissionOverrideCreateEvent event) { - return null; + return event.getPermissionOverride().delete(); } /** * @return An attempt to add the override back */ - public static RestAction of(PermissionOverrideDeleteEvent event) + public static PermissionOverrideAction of(PermissionOverrideDeleteEvent event) { - return null; + PermissionOverride deleted = event.getPermissionOverride(); + EnumSet allowed = deleted.getAllowed(); + EnumSet denied = deleted.getDenied(); + + return event.getChannel() + .createPermissionOverride(event.getPermissionHolder()) + .setPermissions(allowed, denied); } /** * @return An attempt to set rules to what they just were */ - public static RestAction of(PermissionOverrideUpdateEvent event) + public static PermissionOverrideAction of(PermissionOverrideUpdateEvent event) { - return null; + PermissionOverride updated = event.getPermissionOverride(); + EnumSet allow = event.getOldAllow(); + EnumSet deny = event.getOldDeny(); + + return updated.getManager() + .setAllow(allow).setDeny(deny); } /** From 1ddafcd56efa5e29d66ba41d20bb6303bcac1edd Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 12:03:27 -0500 Subject: [PATCH 10/29] Implement emote events --- .../commons/utils/InverseAction.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 5f991b7d..a9c590bf 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -38,12 +38,15 @@ import net.dv8tion.jda.api.events.role.update.*; import net.dv8tion.jda.api.events.self.*; import net.dv8tion.jda.api.managers.ChannelManager; +import net.dv8tion.jda.api.managers.EmoteManager; import net.dv8tion.jda.api.requests.RestAction; import net.dv8tion.jda.api.requests.restaction.AuditableRestAction; import net.dv8tion.jda.api.requests.restaction.PermissionOverrideAction; import java.util.EnumSet; +import java.util.HashSet; import java.util.List; +import java.util.stream.Collectors; /** * A utility class meant to serve as a way to rollback certain events where it makes sense to. @@ -241,25 +244,33 @@ public static PermissionOverrideAction of(PermissionOverrideUpdateEvent event) /** * @return An attempt to remove said emote */ - public static RestAction of(EmoteAddedEvent event) + public static AuditableRestAction of(EmoteAddedEvent event) { - return null; + return event.getEmote().delete(); } /** * @return An attempt to change the name back to what it just was */ - public static RestAction of(EmoteUpdateNameEvent event) + public static EmoteManager of(EmoteUpdateNameEvent event) { - return null; + Emote emote = event.getEmote(); + EmoteManager manager = emote.getManager(); + String oldName = event.getOldName(); + + return manager.setName(oldName); } /** * @return An attempt to change the roles to what they just were */ - public static RestAction of(EmoteUpdateRolesEvent event) + public static EmoteManager of(EmoteUpdateRolesEvent event) { - return null; + Emote emote = event.getEmote(); + EmoteManager manager = emote.getManager(); + HashSet oldRoles = new HashSet<>(event.getOldRoles()); + + return manager.setRoles(oldRoles); } /** From 0788b4f195558dbfa8e892a09db4caa9a8b42dc0 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 14:02:58 -0500 Subject: [PATCH 11/29] Implement role events --- .../commons/utils/InverseAction.java | 58 ++++++++++++++----- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index a9c590bf..8e742748 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -39,10 +39,15 @@ import net.dv8tion.jda.api.events.self.*; import net.dv8tion.jda.api.managers.ChannelManager; import net.dv8tion.jda.api.managers.EmoteManager; +import net.dv8tion.jda.api.managers.RoleManager; import net.dv8tion.jda.api.requests.RestAction; import net.dv8tion.jda.api.requests.restaction.AuditableRestAction; import net.dv8tion.jda.api.requests.restaction.PermissionOverrideAction; +import net.dv8tion.jda.api.requests.restaction.RoleAction; +import net.dv8tion.jda.api.requests.restaction.order.OrderAction; +import net.dv8tion.jda.api.requests.restaction.order.RoleOrderAction; +import java.awt.*; import java.util.EnumSet; import java.util.HashSet; import java.util.List; @@ -69,6 +74,9 @@ * removal of a text channel. Cases where the complete undoing of the event cannot be guaranteed are not implemented *

* + * Keep in mind that inverting the deletion of something requires for a new object to be created with the same values. + * But doing this can't possibly copy information such as the ID of the deleted object + * * @author HydroPage90 */ public final class InverseAction @@ -276,49 +284,67 @@ public static EmoteManager of(EmoteUpdateRolesEvent event) /** * @return An attempt to remove said role */ - public static RestAction of(RoleCreateEvent event) + public static AuditableRestAction of(RoleCreateEvent event) { - return null; + return event.getRole().delete(); } /** * @return An attempt to add the role back */ - public static RestAction of(RoleDeleteEvent event) + public static RoleAction of(RoleDeleteEvent event) { - return null; + return event.getRole().createCopy(); } /** - * @return An attempt to make the role unmentionable again + * @return An attempt to change the mentionable state back */ - public static RestAction of(RoleUpdateMentionableEvent event) + public static RoleManager of(RoleUpdateMentionableEvent event) { - return null; + Role role = event.getRole(); + RoleManager manager = role.getManager(); + Boolean oldState = event.getOldValue(); + + return manager.setMentionable(oldState); } /** * @return An attempt to move the role back to where it just was */ - public static RestAction of(RoleUpdatePositionEvent event) + public static OrderAction of(RoleUpdatePositionEvent event) { - return null; + Role role = event.getRole(); + int oldPos = event.getOldPosition(); + + return event.getGuild() + .modifyRolePositions() + .selectPosition(role) + .moveTo(oldPos); } /** * @return An attempt to change the role's permissions back */ - public static RestAction of(RoleUpdatePermissionsEvent event) + public static RoleManager of(RoleUpdatePermissionsEvent event) { - return null; + Role role = event.getRole(); + RoleManager manager = role.getManager(); + EnumSet oldPerms = event.getOldPermissions(); + + return manager.setPermissions(oldPerms); } /** * @return An attempt to change the role's name back */ - public static RestAction of(RoleUpdateNameEvent event) + public static RoleManager of(RoleUpdateNameEvent event) { - return null; + Role role = event.getRole(); + RoleManager manager = role.getManager(); + String oldName = event.getOldName(); + + return manager.setName(oldName); } //TODO What the hell is a hoisted role? Lmao, look at that later @@ -328,7 +354,11 @@ public static RestAction of(RoleUpdateNameEvent event) */ public static RestAction of(RoleUpdateColorEvent event) { - return null; + Role role = event.getRole(); + RoleManager manager = role.getManager(); + Color oldColor = event.getOldColor(); + + return manager.setColor(oldColor); } /** From 2f3999783e7da5e68f88b860e24a11c6df3161cd Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 14:03:51 -0500 Subject: [PATCH 12/29] Implement private channel event --- .../com/jagrosh/jdautilities/commons/utils/InverseAction.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 8e742748..7d074b77 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -362,11 +362,11 @@ public static RestAction of(RoleUpdateColorEvent event) } /** - * @return An attempt to remove said channel + * @return An attempt to close said channel */ public static RestAction of(PrivateChannelCreateEvent event) { - return null; + return event.getChannel().close(); } /** From f6a598be9fea206a026eb5199cca66bc62b608a5 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 14:04:19 -0500 Subject: [PATCH 13/29] Update return values --- .../com/jagrosh/jdautilities/commons/utils/InverseAction.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 7d074b77..bc44f799 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -352,7 +352,7 @@ public static RoleManager of(RoleUpdateNameEvent event) /** * @return An attempt to change the role's color back to what it just was */ - public static RestAction of(RoleUpdateColorEvent event) + public static RoleManager of(RoleUpdateColorEvent event) { Role role = event.getRole(); RoleManager manager = role.getManager(); @@ -364,7 +364,7 @@ public static RestAction of(RoleUpdateColorEvent event) /** * @return An attempt to close said channel */ - public static RestAction of(PrivateChannelCreateEvent event) + public static RestAction of(PrivateChannelCreateEvent event) { return event.getChannel().close(); } From 09de202d03307ba7c0d938423d5616f37cb7bfd2 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 15:54:45 -0500 Subject: [PATCH 14/29] Implement voice channel events --- .../commons/utils/InverseAction.java | 56 ++++++++++++++----- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index bc44f799..bc3f19a1 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -42,6 +42,7 @@ import net.dv8tion.jda.api.managers.RoleManager; import net.dv8tion.jda.api.requests.RestAction; import net.dv8tion.jda.api.requests.restaction.AuditableRestAction; +import net.dv8tion.jda.api.requests.restaction.ChannelAction; import net.dv8tion.jda.api.requests.restaction.PermissionOverrideAction; import net.dv8tion.jda.api.requests.restaction.RoleAction; import net.dv8tion.jda.api.requests.restaction.order.OrderAction; @@ -372,57 +373,84 @@ public static RestAction of(PrivateChannelCreateEvent event) /** * @return An attempt to make the channel again */ - public static RestAction of(VoiceChannelDeleteEvent event) + public static ChannelAction of(VoiceChannelDeleteEvent event) { - return null; + Guild guild = event.getGuild(); + VoiceChannel deleted = event.getChannel(); + + return guild.createVoiceChannel(deleted.getName()) + .setUserlimit(deleted.getUserLimit()) + .setBitrate(deleted.getBitrate()) + .setPosition(deleted.getPosition()) + .setParent(deleted.getParent()); } /** * @return An attempt to remove said channel */ - public static RestAction of(VoiceChannelCreateEvent event) + public static AuditableRestAction of(VoiceChannelCreateEvent event) { - return null; + return event.getChannel().delete(); } /** * @return An attempt to change the voice channel's name back */ - public static RestAction of(VoiceChannelUpdateNameEvent event) + public static ChannelManager of(VoiceChannelUpdateNameEvent event) { - return null; + VoiceChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + String oldName = event.getOldName(); + + return manager.setName(oldName); } /** * @return An attempt to change the voice channel's parent back */ - public static RestAction of(VoiceChannelUpdateParentEvent event) + public static ChannelManager of(VoiceChannelUpdateParentEvent event) { - return null; + VoiceChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + Category oldParent = event.getOldParent(); + + return manager.setParent(oldParent); } /** * @return An attempt to change the voice channel's position back */ - public static RestAction of(VoiceChannelUpdatePositionEvent event) + public static ChannelManager of(VoiceChannelUpdatePositionEvent event) { - return null; + VoiceChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + int oldPos = event.getOldPosition(); + + return manager.setPosition(oldPos); } /** * @return An attempt to change the voice channel's bitrate back */ - public static RestAction of(VoiceChannelUpdateBitrateEvent event) + public static ChannelManager of(VoiceChannelUpdateBitrateEvent event) { - return null; + VoiceChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + int oldBitrate = event.getOldBitrate(); + + return manager.setBitrate(oldBitrate); } /** * @return An attempt to change the voice channel's user limit back */ - public static RestAction of(VoiceChannelUpdateUserLimitEvent event) + public static ChannelManager of(VoiceChannelUpdateUserLimitEvent event) { - return null; + VoiceChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + int oldLimit = event.getOldUserLimit(); + + return manager.setUserLimit(oldLimit); } /** From 0546d8570a1ec0798fd4b1344c1c057d6d863142 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 17:29:03 -0500 Subject: [PATCH 15/29] Implement text channel events --- .../commons/utils/InverseAction.java | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index bc3f19a1..b42f3fb0 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -456,57 +456,81 @@ public static ChannelManager of(VoiceChannelUpdateUserLimitEvent event) /** * @return An attempt to remove said channel */ - public static RestAction of(TextChannelCreateEvent event) + public static AuditableRestAction of(TextChannelCreateEvent event) { - return null; + return event.getChannel().delete(); } /** * @return An attempt to change the text channel's topic back */ - public static RestAction of(TextChannelUpdateTopicEvent event) + public static ChannelManager of(TextChannelUpdateTopicEvent event) { - return null; + TextChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + String oldTopic = event.getOldTopic(); + + return manager.setTopic(oldTopic); } /** * @return An attempt to change the text channel's name back */ - public static RestAction of(TextChannelUpdateNameEvent event) + public static ChannelManager of(TextChannelUpdateNameEvent event) { - return null; + TextChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + String oldName = event.getOldName(); + + return manager.setName(oldName); } /** * @return An attempt to change the text channel's slowmode value back */ - public static RestAction of(TextChannelUpdateSlowmodeEvent event) + public static ChannelManager of(TextChannelUpdateSlowmodeEvent event) { - return null; + TextChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + int oldState = event.getOldSlowmode(); + + return manager.setSlowmode(oldState); } /** * @return An attempt to move the text channel back */ - public static RestAction of(TextChannelUpdatePositionEvent event) + public static ChannelManager of(TextChannelUpdatePositionEvent event) { - return null; + TextChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + int oldPos = event.getOldPosition(); + + return manager.setPosition(oldPos); } /** * @return An attempt to change the text channel's NSFW state back */ - public static RestAction of(TextChannelUpdateNSFWEvent event) + public static ChannelManager of(TextChannelUpdateNSFWEvent event) { - return null; + TextChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + boolean oldState = event.getOldNSFW(); + + return manager.setNSFW(oldState); } /** * @return An attempt to change the text channel's parent back */ - public static RestAction of(TextChannelUpdateParentEvent event) + public static ChannelManager of(TextChannelUpdateParentEvent event) { - return null; + TextChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + Category oldParent = event.getOldParent(); + + return manager.setParent(oldParent); } /** From 43e25b8e07f98d4e90bd1eeadf9790e9640a2e42 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 17:35:14 -0500 Subject: [PATCH 16/29] Implement message events --- .../jagrosh/jdautilities/commons/utils/InverseAction.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index b42f3fb0..9a61a330 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -536,17 +536,17 @@ public static ChannelManager of(TextChannelUpdateParentEvent event) /** * @return An attempt to remove said reaction */ - public static RestAction of(MessageReactionAddEvent event) + public static RestAction of(MessageReactionAddEvent event) { - return null; + return event.getReaction().removeReaction(); } /** * @return An attempt to remove said message */ - public static RestAction of(MessageReceivedEvent event) + public static AuditableRestAction of(MessageReceivedEvent event) { - return null; + return event.getMessage().delete(); } // I'm not really sure what to do about store channels. From e2fbc1f90bb4cac67041089a988af15dcf13ecd2 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 17:40:32 -0500 Subject: [PATCH 17/29] Implement store channel events --- .../commons/utils/InverseAction.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 9a61a330..e3923066 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -549,29 +549,35 @@ public static AuditableRestAction of(MessageReceivedEvent event) return event.getMessage().delete(); } - // I'm not really sure what to do about store channels. - /** * @return An attempt to move the store channel back */ - public static RestAction of(StoreChannelUpdatePositionEvent event) + public static ChannelManager of(StoreChannelUpdatePositionEvent event) { - return null; + StoreChannel updated = event.getChannel(); + ChannelManager manager = updated.getManager(); + int oldPos = event.getOldPosition(); + + return manager.setPosition(oldPos); } /** * @return An attempt to change the store channel's name back */ - public static RestAction of(StoreChannelUpdateNameEvent event) + public static ChannelManager of(StoreChannelUpdateNameEvent event) { - return null; + StoreChannel update = event.getChannel(); + ChannelManager manager = update.getManager(); + String oldName = event.getOldName(); + + return manager.setName(oldName); } /** * @return An attempt to remove said store channel */ - public static RestAction of(StoreChannelCreateEvent event) + public static AuditableRestAction of(StoreChannelCreateEvent event) { - return null; + return event.getChannel().delete(); } } From 39d1073fd25b307ba68c9b1291eb436f227ba275 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 17:45:44 -0500 Subject: [PATCH 18/29] Typo in javadoc, and import cleanup --- .../jagrosh/jdautilities/commons/utils/InverseAction.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index e3923066..5eb4b27c 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -18,7 +18,6 @@ import net.dv8tion.jda.api.events.emote.update.EmoteUpdateNameEvent; import net.dv8tion.jda.api.events.emote.update.EmoteUpdateRolesEvent; import net.dv8tion.jda.api.events.guild.GuildJoinEvent; -import net.dv8tion.jda.api.events.guild.GuildUnbanEvent; import net.dv8tion.jda.api.events.guild.invite.GuildInviteCreateEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleAddEvent; @@ -36,7 +35,6 @@ import net.dv8tion.jda.api.events.role.RoleCreateEvent; import net.dv8tion.jda.api.events.role.RoleDeleteEvent; import net.dv8tion.jda.api.events.role.update.*; -import net.dv8tion.jda.api.events.self.*; import net.dv8tion.jda.api.managers.ChannelManager; import net.dv8tion.jda.api.managers.EmoteManager; import net.dv8tion.jda.api.managers.RoleManager; @@ -52,7 +50,6 @@ import java.util.EnumSet; import java.util.HashSet; import java.util.List; -import java.util.stream.Collectors; /** * A utility class meant to serve as a way to rollback certain events where it makes sense to. @@ -63,7 +60,7 @@ * In events where something is posted, the inverse would be another request to remove said post, for example. *

* Also, since it's a RestAction that simply makes an attempt at the inverse, it's not always possible due to multiple - * factors, such as permissions, etc. For example, trying to inverse a {@link net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent GuildMessageReceievedEvent} in a channel with no permission + * factors, such as permissions, etc. For example, trying to invert a {@link net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent GuildMessageReceievedEvent} in a channel with no permission * to remove messages will fail *

*
From c79fceb545e419b3a0a8e4bf15808ebbe51b7090 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 17:46:38 -0500 Subject: [PATCH 19/29] Add guild join inverse --- .../com/jagrosh/jdautilities/commons/utils/InverseAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 5eb4b27c..2525f8ab 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -122,7 +122,7 @@ public static AuditableRestAction of(GuildInviteCreateEvent event) */ public static RestAction of(GuildJoinEvent event) { - return null; + return event.getGuild().leave(); } /** From fe27e0918ca30c4cbfc2a13e1106d8b38f85cded Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 17:54:46 -0500 Subject: [PATCH 20/29] Make PermissionOverrideDeleteEvent able to fail if the permission holder isn't in cache --- .../commons/utils/InverseAction.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 2525f8ab..837ce3c8 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -71,7 +71,7 @@ * Events fired for the deletion of something are a different story. Some cases are logical, but many are not, like the * removal of a text channel. Cases where the complete undoing of the event cannot be guaranteed are not implemented *

- * + *

* Keep in mind that inverting the deletion of something requires for a new object to be created with the same values. * But doing this can't possibly copy information such as the ID of the deleted object * @@ -222,15 +222,20 @@ public static AuditableRestAction of(PermissionOverrideCreateEvent event) /** * @return An attempt to add the override back + * @throws com.jagrosh.jdautilities.commons.utils.InverseAction.InversionException If the override's permission holder isn't cached */ public static PermissionOverrideAction of(PermissionOverrideDeleteEvent event) { PermissionOverride deleted = event.getPermissionOverride(); + IPermissionHolder holder = event.getPermissionHolder(); EnumSet allowed = deleted.getAllowed(); EnumSet denied = deleted.getDenied(); + if (holder == null) + throw new InversionException("No permission holder in cache to use to copy deleted override"); + return event.getChannel() - .createPermissionOverride(event.getPermissionHolder()) + .createPermissionOverride(holder) .setPermissions(allowed, denied); } @@ -577,4 +582,12 @@ public static AuditableRestAction of(StoreChannelCreateEvent event) { return event.getChannel().delete(); } + + private static class InversionException extends RuntimeException + { + public InversionException(String msg) + { + super(msg); + } + } } From b0918e742ef7171c05308952cbaa64a73ca0e931 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Mon, 24 Aug 2020 18:11:19 -0500 Subject: [PATCH 21/29] Implemented GuildJoin inverse and added GuildBan inverse back --- .../commons/utils/InverseAction.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 837ce3c8..234a14ed 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -17,6 +17,7 @@ import net.dv8tion.jda.api.events.emote.EmoteAddedEvent; import net.dv8tion.jda.api.events.emote.update.EmoteUpdateNameEvent; import net.dv8tion.jda.api.events.emote.update.EmoteUpdateRolesEvent; +import net.dv8tion.jda.api.events.guild.GuildBanEvent; import net.dv8tion.jda.api.events.guild.GuildJoinEvent; import net.dv8tion.jda.api.events.guild.invite.GuildInviteCreateEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent; @@ -120,11 +121,33 @@ public static AuditableRestAction of(GuildInviteCreateEvent event) /** * @return An attempt to leave said guild */ - public static RestAction of(GuildJoinEvent event) + public static RestAction of(GuildJoinEvent event) { return event.getGuild().leave(); } + /** + * @return An attempt to ban them again (0 message deletion days will be assumed) + */ + public static AuditableRestAction of(GuildBanEvent event) + { + Guild guild = event.getGuild(); + User user = event.getUser(); + + return guild.ban(user, 0); + } + + /** + * @return An attempt to ban them again + */ + public static AuditableRestAction of(GuildBanEvent event, int delDays) + { + Guild guild = event.getGuild(); + User user = event.getUser(); + + return guild.ban(user, delDays); + } + /** * @return An attempt to take said roles away */ From 3773e20c7849e1a5602bc1952dc3fc6cc96b74f0 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Tue, 25 Aug 2020 09:31:22 -0500 Subject: [PATCH 22/29] Fixed unban inversions, and added (real) ban inversion --- .../commons/utils/InverseAction.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 234a14ed..9ecbc052 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -19,6 +19,7 @@ import net.dv8tion.jda.api.events.emote.update.EmoteUpdateRolesEvent; import net.dv8tion.jda.api.events.guild.GuildBanEvent; import net.dv8tion.jda.api.events.guild.GuildJoinEvent; +import net.dv8tion.jda.api.events.guild.GuildUnbanEvent; import net.dv8tion.jda.api.events.guild.invite.GuildInviteCreateEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberRoleAddEvent; @@ -126,10 +127,21 @@ public static RestAction of(GuildJoinEvent event) return event.getGuild().leave(); } + /** + * @return An attempt to unban them + */ + public static RestAction of(GuildBanEvent event) + { + Guild guild = event.getGuild(); + User user = event.getUser(); + + return guild.unban(user); + } + /** * @return An attempt to ban them again (0 message deletion days will be assumed) */ - public static AuditableRestAction of(GuildBanEvent event) + public static AuditableRestAction of(GuildUnbanEvent event) { Guild guild = event.getGuild(); User user = event.getUser(); @@ -140,7 +152,7 @@ public static AuditableRestAction of(GuildBanEvent event) /** * @return An attempt to ban them again */ - public static AuditableRestAction of(GuildBanEvent event, int delDays) + public static AuditableRestAction of(GuildUnbanEvent event, int delDays) { Guild guild = event.getGuild(); User user = event.getUser(); From 6fde8c9728b30805b3cb90fede472de9ab72ee6a Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Tue, 25 Aug 2020 09:33:44 -0500 Subject: [PATCH 23/29] Fixed reaction add inversion logic --- .../jagrosh/jdautilities/commons/utils/InverseAction.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 9ecbc052..32257e3f 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -575,7 +575,13 @@ public static ChannelManager of(TextChannelUpdateParentEvent event) */ public static RestAction of(MessageReactionAddEvent event) { - return event.getReaction().removeReaction(); + MessageReaction reaction = event.getReaction(); + User user = event.getUser(); + + if (user == null) + throw new InversionException("No cached user to remove reaction from"); + + return reaction.removeReaction(user); } /** From 95f9c909e1a5134de38a0516dc54e270fd3d90a2 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Tue, 25 Aug 2020 11:13:36 -0500 Subject: [PATCH 24/29] Docs --- .../jdautilities/commons/utils/InverseAction.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 32257e3f..3814422b 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -57,12 +57,14 @@ * A utility class meant to serve as a way to rollback certain events where it makes sense to. * *

- * All methods are overloaded static factory methods, always returning a {@link net.dv8tion.jda.api.requests.RestAction RestAction} + * All methods are overloaded static factory methods, always returning a {@link net.dv8tion.jda.api.requests.RestAction RestAction} * meant to "undo" the given event. Note that this will only be possible for events in which it makes sense. * In events where something is posted, the inverse would be another request to remove said post, for example. + *

+ *
*

* Also, since it's a RestAction that simply makes an attempt at the inverse, it's not always possible due to multiple - * factors, such as permissions, etc. For example, trying to invert a {@link net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent GuildMessageReceievedEvent} in a channel with no permission + * factors, such as permissions, etc. For example, trying to invert a {@link net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent GuildMessageReceivedEvent} in a channel with no permission * to remove messages will fail *

*
@@ -73,9 +75,11 @@ * Events fired for the deletion of something are a different story. Some cases are logical, but many are not, like the * removal of a text channel. Cases where the complete undoing of the event cannot be guaranteed are not implemented *

+ *
*

* Keep in mind that inverting the deletion of something requires for a new object to be created with the same values. - * But doing this can't possibly copy information such as the ID of the deleted object + * But doing this can't possibly copy information such as the ID of the deleted object or undo effects like everyone losing + * a role that is deleted * * @author HydroPage90 */ From d96dfedd9fdfa0ca23e409714dfbe448ec5f3a4e Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Tue, 25 Aug 2020 13:46:23 -0500 Subject: [PATCH 25/29] Removed guild ban event inverse that asks for prune context --- .../jdautilities/commons/utils/InverseAction.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 3814422b..7077e38b 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -153,17 +153,6 @@ public static AuditableRestAction of(GuildUnbanEvent event) return guild.ban(user, 0); } - /** - * @return An attempt to ban them again - */ - public static AuditableRestAction of(GuildUnbanEvent event, int delDays) - { - Guild guild = event.getGuild(); - User user = event.getUser(); - - return guild.ban(user, delDays); - } - /** * @return An attempt to take said roles away */ From cec03b10c6545501c3d2338bdb84c10d0e38261d Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Tue, 25 Aug 2020 14:04:29 -0500 Subject: [PATCH 26/29] That was a huge pain to type out. Jesus christ --- .../com/jagrosh/jdautilities/commons/utils/InverseAction.java | 1 + 1 file changed, 1 insertion(+) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 7077e38b..8d1f974d 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -2,6 +2,7 @@ import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.*; +import net.dv8tion.jda.api.events.GenericEvent; import net.dv8tion.jda.api.events.channel.category.CategoryCreateEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdateNameEvent; import net.dv8tion.jda.api.events.channel.category.update.CategoryUpdatePositionEvent; From a724882eb57c023de6c414fba56f33cb72565339 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Tue, 25 Aug 2020 14:05:11 -0500 Subject: [PATCH 27/29] There --- .../commons/utils/InverseAction.java | 391 +++++++++--------- 1 file changed, 198 insertions(+), 193 deletions(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 8d1f974d..afd8ae87 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -86,10 +86,157 @@ */ public final class InverseAction { - /** - * @return An attempt to change the category's position back - */ - public static ChannelManager of(CategoryUpdatePositionEvent event) + public static RestAction of(GenericEvent event) + { + if (event instanceof CategoryUpdatePositionEvent) + return inverse((CategoryUpdatePositionEvent) event); + + else if (event instanceof CategoryUpdateNameEvent) + return inverse((CategoryUpdateNameEvent) event); + + else if (event instanceof CategoryCreateEvent) + return inverse((CategoryCreateEvent) event); + + else if (event instanceof GuildInviteCreateEvent) + return inverse((GuildInviteCreateEvent) event); + + else if (event instanceof GuildJoinEvent) + return inverse((GuildJoinEvent) event); + + else if (event instanceof GuildBanEvent) + return inverse((GuildBanEvent) event); + + else if (event instanceof GuildUnbanEvent) + return inverse((GuildUnbanEvent) event); + + else if (event instanceof GuildMemberRoleAddEvent) + return inverse((GuildMemberRoleAddEvent) event); + + else if (event instanceof GuildMemberRoleRemoveEvent) + return inverse((GuildMemberRoleRemoveEvent) event); + + else if (event instanceof GuildMemberUpdateNicknameEvent) + return inverse((GuildMemberUpdateNicknameEvent) event); + + else if (event instanceof GuildMemberJoinEvent) + return inverse((GuildMemberJoinEvent) event); + + else if (event instanceof GuildVoiceGuildDeafenEvent) + return inverse((GuildVoiceGuildDeafenEvent) event); + + else if (event instanceof GuildVoiceJoinEvent) + return inverse((GuildVoiceJoinEvent) event); + + else if (event instanceof GuildVoiceMoveEvent) + return inverse((GuildVoiceMoveEvent) event); + + else if (event instanceof GuildVoiceGuildMuteEvent) + return inverse((GuildVoiceGuildMuteEvent) event); + + else if (event instanceof PermissionOverrideCreateEvent) + return inverse((PermissionOverrideCreateEvent) event); + + else if (event instanceof PermissionOverrideDeleteEvent) + return inverse((PermissionOverrideDeleteEvent) event); + + else if (event instanceof PermissionOverrideUpdateEvent) + return inverse((PermissionOverrideUpdateEvent) event); + + else if (event instanceof EmoteAddedEvent) + return inverse((EmoteAddedEvent) event); + + else if (event instanceof EmoteUpdateNameEvent) + return inverse((EmoteUpdateNameEvent) event); + + else if (event instanceof EmoteUpdateRolesEvent) + return inverse((EmoteUpdateRolesEvent) event); + + else if (event instanceof RoleCreateEvent) + return inverse((RoleCreateEvent) event); + + else if (event instanceof RoleDeleteEvent) + return inverse((RoleDeleteEvent) event); + + else if (event instanceof RoleUpdateMentionableEvent) + return inverse((RoleUpdateMentionableEvent) event); + + else if (event instanceof RoleUpdatePositionEvent) + return inverse((RoleUpdatePositionEvent) event); + + else if (event instanceof RoleUpdatePermissionsEvent) + return inverse((RoleUpdatePermissionsEvent) event); + + else if (event instanceof RoleUpdateNameEvent) + return inverse((RoleUpdateNameEvent) event); + + else if (event instanceof RoleUpdateColorEvent) + return inverse((RoleUpdateColorEvent) event); + + else if (event instanceof PrivateChannelCreateEvent) + return inverse((PrivateChannelCreateEvent) event); + + else if (event instanceof VoiceChannelDeleteEvent) + return inverse((VoiceChannelDeleteEvent) event); + + else if (event instanceof VoiceChannelCreateEvent) + return inverse((VoiceChannelCreateEvent) event); + + else if (event instanceof VoiceChannelUpdateNameEvent) + return inverse((VoiceChannelUpdateNameEvent) event); + + else if (event instanceof VoiceChannelUpdateParentEvent) + return inverse((VoiceChannelUpdateParentEvent) event); + + else if (event instanceof VoiceChannelUpdatePositionEvent) + return inverse((VoiceChannelUpdatePositionEvent) event); + + else if (event instanceof VoiceChannelUpdateBitrateEvent) + return inverse((VoiceChannelUpdateBitrateEvent) event); + + else if (event instanceof VoiceChannelUpdateUserLimitEvent) + return inverse((VoiceChannelUpdateUserLimitEvent) event); + + else if (event instanceof TextChannelCreateEvent) + return inverse((TextChannelCreateEvent) event); + + else if (event instanceof TextChannelUpdateTopicEvent) + return inverse((TextChannelUpdateTopicEvent) event); + + else if (event instanceof TextChannelUpdateNameEvent) + return inverse((TextChannelUpdateNameEvent) event); + + else if (event instanceof TextChannelUpdateSlowmodeEvent) + return inverse((TextChannelUpdateSlowmodeEvent) event); + + else if (event instanceof TextChannelUpdatePositionEvent) + return inverse((TextChannelUpdatePositionEvent) event); + + else if (event instanceof TextChannelUpdateNSFWEvent) + return inverse((TextChannelUpdateNSFWEvent) event); + + else if (event instanceof TextChannelUpdateParentEvent) + return inverse((TextChannelUpdateParentEvent) event); + + else if (event instanceof MessageReactionAddEvent) + return inverse((MessageReactionAddEvent) event); + + else if (event instanceof MessageReceivedEvent) + return inverse((MessageReceivedEvent) event); + + else if (event instanceof StoreChannelUpdatePositionEvent) + return inverse((StoreChannelUpdatePositionEvent) event); + + else if (event instanceof StoreChannelUpdateNameEvent) + return inverse((StoreChannelUpdateNameEvent) event); + + else if (event instanceof StoreChannelCreateEvent) + return inverse((StoreChannelCreateEvent) event); + + else + throw new InversionException("No possible inversion for event: " + event); + } + + private static ChannelManager inverse(CategoryUpdatePositionEvent event) { ChannelManager manager = event.getCategory().getManager(); int oldPosition = event.getOldPosition(); @@ -97,10 +244,7 @@ public static ChannelManager of(CategoryUpdatePositionEvent event) return manager.setPosition(oldPosition); } - /** - * @return An attempt to change the category's name back - */ - public static ChannelManager of(CategoryUpdateNameEvent event) + private static ChannelManager inverse(CategoryUpdateNameEvent event) { ChannelManager manager = event.getCategory().getManager(); String oldName = event.getOldName(); @@ -108,34 +252,22 @@ public static ChannelManager of(CategoryUpdateNameEvent event) return manager.setName(oldName); } - /** - * @return An attempt to remove said category - */ - public static AuditableRestAction of(CategoryCreateEvent event) + private static AuditableRestAction inverse(CategoryCreateEvent event) { return event.getCategory().delete(); } - /** - * @return An attempt to remove said invite - */ - public static AuditableRestAction of(GuildInviteCreateEvent event) + private static AuditableRestAction inverse(GuildInviteCreateEvent event) { return event.getInvite().delete(); } - /** - * @return An attempt to leave said guild - */ - public static RestAction of(GuildJoinEvent event) + private static RestAction inverse(GuildJoinEvent event) { return event.getGuild().leave(); } - /** - * @return An attempt to unban them - */ - public static RestAction of(GuildBanEvent event) + private static RestAction inverse(GuildBanEvent event) { Guild guild = event.getGuild(); User user = event.getUser(); @@ -143,10 +275,7 @@ public static RestAction of(GuildBanEvent event) return guild.unban(user); } - /** - * @return An attempt to ban them again (0 message deletion days will be assumed) - */ - public static AuditableRestAction of(GuildUnbanEvent event) + private static AuditableRestAction inverse(GuildUnbanEvent event) { Guild guild = event.getGuild(); User user = event.getUser(); @@ -154,10 +283,7 @@ public static AuditableRestAction of(GuildUnbanEvent event) return guild.ban(user, 0); } - /** - * @return An attempt to take said roles away - */ - public static AuditableRestAction of(GuildMemberRoleAddEvent event) + private static AuditableRestAction inverse(GuildMemberRoleAddEvent event) { Guild guild = event.getGuild(); Member member = event.getMember(); @@ -166,10 +292,7 @@ public static AuditableRestAction of(GuildMemberRoleAddEvent event) return guild.modifyMemberRoles(member, null, addedRoles); } - /** - * @return An attempt to give the member the roles back - */ - public static AuditableRestAction of(GuildMemberRoleRemoveEvent event) + private static AuditableRestAction inverse(GuildMemberRoleRemoveEvent event) { Guild guild = event.getGuild(); Member member = event.getMember(); @@ -178,10 +301,7 @@ public static AuditableRestAction of(GuildMemberRoleRemoveEvent event) return guild.modifyMemberRoles(member, rolesRemoved, null); } - /** - * @return An attempt to change the member's nickname back - */ - public static AuditableRestAction of(GuildMemberUpdateNicknameEvent event) + private static AuditableRestAction inverse(GuildMemberUpdateNicknameEvent event) { Member member = event.getMember(); String oldNick = event.getOldNickname(); @@ -191,26 +311,17 @@ public static AuditableRestAction of(GuildMemberUpdateNicknameEvent event) //TODO Look into all the GenericGuildUpdateEvents. There are a lot - /** - * @return An attempt to kick said member - */ - public static AuditableRestAction of(GuildMemberJoinEvent event) + private static AuditableRestAction inverse(GuildMemberJoinEvent event) { return event.getMember().kick(); } - /** - * @return An attempt to undeafen if they were deafened, or an attempt to deafen if they were undeafened - */ - public static RestAction of(GuildVoiceGuildDeafenEvent event) + private static RestAction inverse(GuildVoiceGuildDeafenEvent event) { return event.getGuild().leave(); } - /** - * @return An attempt to kick them from the channel - */ - public static RestAction of(GuildVoiceJoinEvent event) + private static RestAction inverse(GuildVoiceJoinEvent event) { Guild guild = event.getGuild(); Member member = event.getMember(); @@ -218,10 +329,7 @@ public static RestAction of(GuildVoiceJoinEvent event) return guild.kickVoiceMember(member); } - /** - * @return An attempt to move them back to where they just were - */ - public static RestAction of(GuildVoiceMoveEvent event) + private static RestAction inverse(GuildVoiceMoveEvent event) { Guild guild = event.getGuild(); Member member = event.getMember(); @@ -230,10 +338,7 @@ public static RestAction of(GuildVoiceMoveEvent event) return guild.moveVoiceMember(member, previous); } - /** - * @return An attempt to unmute if they were muted, or an attempt to mute if they were unmuted - */ - public static AuditableRestAction of(GuildVoiceGuildMuteEvent event) + private static AuditableRestAction inverse(GuildVoiceGuildMuteEvent event) { Member member = event.getMember(); boolean action = event.isGuildMuted(); @@ -241,19 +346,12 @@ public static AuditableRestAction of(GuildVoiceGuildMuteEvent event) return member.mute(!action); } - /** - * @return An attempt to remove said override - */ - public static AuditableRestAction of(PermissionOverrideCreateEvent event) + private static AuditableRestAction inverse(PermissionOverrideCreateEvent event) { return event.getPermissionOverride().delete(); } - /** - * @return An attempt to add the override back - * @throws com.jagrosh.jdautilities.commons.utils.InverseAction.InversionException If the override's permission holder isn't cached - */ - public static PermissionOverrideAction of(PermissionOverrideDeleteEvent event) + private static PermissionOverrideAction inverse(PermissionOverrideDeleteEvent event) { PermissionOverride deleted = event.getPermissionOverride(); IPermissionHolder holder = event.getPermissionHolder(); @@ -268,10 +366,7 @@ public static PermissionOverrideAction of(PermissionOverrideDeleteEvent event) .setPermissions(allowed, denied); } - /** - * @return An attempt to set rules to what they just were - */ - public static PermissionOverrideAction of(PermissionOverrideUpdateEvent event) + private static PermissionOverrideAction inverse(PermissionOverrideUpdateEvent event) { PermissionOverride updated = event.getPermissionOverride(); EnumSet allow = event.getOldAllow(); @@ -281,18 +376,12 @@ public static PermissionOverrideAction of(PermissionOverrideUpdateEvent event) .setAllow(allow).setDeny(deny); } - /** - * @return An attempt to remove said emote - */ - public static AuditableRestAction of(EmoteAddedEvent event) + private static AuditableRestAction inverse(EmoteAddedEvent event) { return event.getEmote().delete(); } - /** - * @return An attempt to change the name back to what it just was - */ - public static EmoteManager of(EmoteUpdateNameEvent event) + private static EmoteManager inverse(EmoteUpdateNameEvent event) { Emote emote = event.getEmote(); EmoteManager manager = emote.getManager(); @@ -301,10 +390,7 @@ public static EmoteManager of(EmoteUpdateNameEvent event) return manager.setName(oldName); } - /** - * @return An attempt to change the roles to what they just were - */ - public static EmoteManager of(EmoteUpdateRolesEvent event) + private static EmoteManager inverse(EmoteUpdateRolesEvent event) { Emote emote = event.getEmote(); EmoteManager manager = emote.getManager(); @@ -313,26 +399,17 @@ public static EmoteManager of(EmoteUpdateRolesEvent event) return manager.setRoles(oldRoles); } - /** - * @return An attempt to remove said role - */ - public static AuditableRestAction of(RoleCreateEvent event) + private static AuditableRestAction inverse(RoleCreateEvent event) { return event.getRole().delete(); } - /** - * @return An attempt to add the role back - */ - public static RoleAction of(RoleDeleteEvent event) + private static RoleAction inverse(RoleDeleteEvent event) { return event.getRole().createCopy(); } - /** - * @return An attempt to change the mentionable state back - */ - public static RoleManager of(RoleUpdateMentionableEvent event) + private static RoleManager inverse(RoleUpdateMentionableEvent event) { Role role = event.getRole(); RoleManager manager = role.getManager(); @@ -341,10 +418,7 @@ public static RoleManager of(RoleUpdateMentionableEvent event) return manager.setMentionable(oldState); } - /** - * @return An attempt to move the role back to where it just was - */ - public static OrderAction of(RoleUpdatePositionEvent event) + private static OrderAction inverse(RoleUpdatePositionEvent event) { Role role = event.getRole(); int oldPos = event.getOldPosition(); @@ -355,10 +429,7 @@ public static OrderAction of(RoleUpdatePositionEvent even .moveTo(oldPos); } - /** - * @return An attempt to change the role's permissions back - */ - public static RoleManager of(RoleUpdatePermissionsEvent event) + private static RoleManager inverse(RoleUpdatePermissionsEvent event) { Role role = event.getRole(); RoleManager manager = role.getManager(); @@ -367,10 +438,7 @@ public static RoleManager of(RoleUpdatePermissionsEvent event) return manager.setPermissions(oldPerms); } - /** - * @return An attempt to change the role's name back - */ - public static RoleManager of(RoleUpdateNameEvent event) + private static RoleManager inverse(RoleUpdateNameEvent event) { Role role = event.getRole(); RoleManager manager = role.getManager(); @@ -381,10 +449,7 @@ public static RoleManager of(RoleUpdateNameEvent event) //TODO What the hell is a hoisted role? Lmao, look at that later - /** - * @return An attempt to change the role's color back to what it just was - */ - public static RoleManager of(RoleUpdateColorEvent event) + private static RoleManager inverse(RoleUpdateColorEvent event) { Role role = event.getRole(); RoleManager manager = role.getManager(); @@ -393,18 +458,12 @@ public static RoleManager of(RoleUpdateColorEvent event) return manager.setColor(oldColor); } - /** - * @return An attempt to close said channel - */ - public static RestAction of(PrivateChannelCreateEvent event) + private static RestAction inverse(PrivateChannelCreateEvent event) { return event.getChannel().close(); } - /** - * @return An attempt to make the channel again - */ - public static ChannelAction of(VoiceChannelDeleteEvent event) + private static ChannelAction inverse(VoiceChannelDeleteEvent event) { Guild guild = event.getGuild(); VoiceChannel deleted = event.getChannel(); @@ -416,18 +475,12 @@ public static ChannelAction of(VoiceChannelDeleteEvent event) .setParent(deleted.getParent()); } - /** - * @return An attempt to remove said channel - */ - public static AuditableRestAction of(VoiceChannelCreateEvent event) + private static AuditableRestAction inverse(VoiceChannelCreateEvent event) { return event.getChannel().delete(); } - /** - * @return An attempt to change the voice channel's name back - */ - public static ChannelManager of(VoiceChannelUpdateNameEvent event) + private static ChannelManager inverse(VoiceChannelUpdateNameEvent event) { VoiceChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -436,10 +489,7 @@ public static ChannelManager of(VoiceChannelUpdateNameEvent event) return manager.setName(oldName); } - /** - * @return An attempt to change the voice channel's parent back - */ - public static ChannelManager of(VoiceChannelUpdateParentEvent event) + private static ChannelManager inverse(VoiceChannelUpdateParentEvent event) { VoiceChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -448,10 +498,7 @@ public static ChannelManager of(VoiceChannelUpdateParentEvent event) return manager.setParent(oldParent); } - /** - * @return An attempt to change the voice channel's position back - */ - public static ChannelManager of(VoiceChannelUpdatePositionEvent event) + private static ChannelManager inverse(VoiceChannelUpdatePositionEvent event) { VoiceChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -460,10 +507,7 @@ public static ChannelManager of(VoiceChannelUpdatePositionEvent event) return manager.setPosition(oldPos); } - /** - * @return An attempt to change the voice channel's bitrate back - */ - public static ChannelManager of(VoiceChannelUpdateBitrateEvent event) + private static ChannelManager inverse(VoiceChannelUpdateBitrateEvent event) { VoiceChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -472,10 +516,7 @@ public static ChannelManager of(VoiceChannelUpdateBitrateEvent event) return manager.setBitrate(oldBitrate); } - /** - * @return An attempt to change the voice channel's user limit back - */ - public static ChannelManager of(VoiceChannelUpdateUserLimitEvent event) + private static ChannelManager inverse(VoiceChannelUpdateUserLimitEvent event) { VoiceChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -484,18 +525,12 @@ public static ChannelManager of(VoiceChannelUpdateUserLimitEvent event) return manager.setUserLimit(oldLimit); } - /** - * @return An attempt to remove said channel - */ - public static AuditableRestAction of(TextChannelCreateEvent event) + private static AuditableRestAction inverse(TextChannelCreateEvent event) { return event.getChannel().delete(); } - /** - * @return An attempt to change the text channel's topic back - */ - public static ChannelManager of(TextChannelUpdateTopicEvent event) + private static ChannelManager inverse(TextChannelUpdateTopicEvent event) { TextChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -504,10 +539,7 @@ public static ChannelManager of(TextChannelUpdateTopicEvent event) return manager.setTopic(oldTopic); } - /** - * @return An attempt to change the text channel's name back - */ - public static ChannelManager of(TextChannelUpdateNameEvent event) + private static ChannelManager inverse(TextChannelUpdateNameEvent event) { TextChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -516,10 +548,7 @@ public static ChannelManager of(TextChannelUpdateNameEvent event) return manager.setName(oldName); } - /** - * @return An attempt to change the text channel's slowmode value back - */ - public static ChannelManager of(TextChannelUpdateSlowmodeEvent event) + private static ChannelManager inverse(TextChannelUpdateSlowmodeEvent event) { TextChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -528,10 +557,7 @@ public static ChannelManager of(TextChannelUpdateSlowmodeEvent event) return manager.setSlowmode(oldState); } - /** - * @return An attempt to move the text channel back - */ - public static ChannelManager of(TextChannelUpdatePositionEvent event) + private static ChannelManager inverse(TextChannelUpdatePositionEvent event) { TextChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -540,10 +566,7 @@ public static ChannelManager of(TextChannelUpdatePositionEvent event) return manager.setPosition(oldPos); } - /** - * @return An attempt to change the text channel's NSFW state back - */ - public static ChannelManager of(TextChannelUpdateNSFWEvent event) + private static ChannelManager inverse(TextChannelUpdateNSFWEvent event) { TextChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -552,10 +575,7 @@ public static ChannelManager of(TextChannelUpdateNSFWEvent event) return manager.setNSFW(oldState); } - /** - * @return An attempt to change the text channel's parent back - */ - public static ChannelManager of(TextChannelUpdateParentEvent event) + private static ChannelManager inverse(TextChannelUpdateParentEvent event) { TextChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -564,10 +584,7 @@ public static ChannelManager of(TextChannelUpdateParentEvent event) return manager.setParent(oldParent); } - /** - * @return An attempt to remove said reaction - */ - public static RestAction of(MessageReactionAddEvent event) + private static RestAction inverse(MessageReactionAddEvent event) { MessageReaction reaction = event.getReaction(); User user = event.getUser(); @@ -578,18 +595,12 @@ public static RestAction of(MessageReactionAddEvent event) return reaction.removeReaction(user); } - /** - * @return An attempt to remove said message - */ - public static AuditableRestAction of(MessageReceivedEvent event) + private static AuditableRestAction inverse(MessageReceivedEvent event) { return event.getMessage().delete(); } - /** - * @return An attempt to move the store channel back - */ - public static ChannelManager of(StoreChannelUpdatePositionEvent event) + private static ChannelManager inverse(StoreChannelUpdatePositionEvent event) { StoreChannel updated = event.getChannel(); ChannelManager manager = updated.getManager(); @@ -598,10 +609,7 @@ public static ChannelManager of(StoreChannelUpdatePositionEvent event) return manager.setPosition(oldPos); } - /** - * @return An attempt to change the store channel's name back - */ - public static ChannelManager of(StoreChannelUpdateNameEvent event) + private static ChannelManager inverse(StoreChannelUpdateNameEvent event) { StoreChannel update = event.getChannel(); ChannelManager manager = update.getManager(); @@ -610,10 +618,7 @@ public static ChannelManager of(StoreChannelUpdateNameEvent event) return manager.setName(oldName); } - /** - * @return An attempt to remove said store channel - */ - public static AuditableRestAction of(StoreChannelCreateEvent event) + private static AuditableRestAction inverse(StoreChannelCreateEvent event) { return event.getChannel().delete(); } From 7ea33028115be5a5014631a4956217b9ecc05929 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Tue, 25 Aug 2020 18:14:29 -0500 Subject: [PATCH 28/29] Implemented Guild Update events --- .../commons/utils/InverseAction.java | 135 +++++++++++++++++- 1 file changed, 134 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index afd8ae87..193cdd62 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -1,6 +1,7 @@ package com.jagrosh.jdautilities.commons.utils; import net.dv8tion.jda.api.Permission; +import net.dv8tion.jda.api.Region; import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.events.GenericEvent; import net.dv8tion.jda.api.events.channel.category.CategoryCreateEvent; @@ -29,6 +30,7 @@ import net.dv8tion.jda.api.events.guild.override.PermissionOverrideCreateEvent; import net.dv8tion.jda.api.events.guild.override.PermissionOverrideDeleteEvent; import net.dv8tion.jda.api.events.guild.override.PermissionOverrideUpdateEvent; +import net.dv8tion.jda.api.events.guild.update.*; import net.dv8tion.jda.api.events.guild.voice.GuildVoiceGuildDeafenEvent; import net.dv8tion.jda.api.events.guild.voice.GuildVoiceGuildMuteEvent; import net.dv8tion.jda.api.events.guild.voice.GuildVoiceJoinEvent; @@ -40,6 +42,7 @@ import net.dv8tion.jda.api.events.role.update.*; import net.dv8tion.jda.api.managers.ChannelManager; import net.dv8tion.jda.api.managers.EmoteManager; +import net.dv8tion.jda.api.managers.GuildManager; import net.dv8tion.jda.api.managers.RoleManager; import net.dv8tion.jda.api.requests.RestAction; import net.dv8tion.jda.api.requests.restaction.AuditableRestAction; @@ -118,6 +121,39 @@ else if (event instanceof GuildMemberRoleRemoveEvent) else if (event instanceof GuildMemberUpdateNicknameEvent) return inverse((GuildMemberUpdateNicknameEvent) event); + else if (event instanceof GuildUpdateVanityCodeEvent) + return inverse((GuildUpdateVanityCodeEvent) event); + + else if (event instanceof GuildUpdateMFALevelEvent) + return inverse((GuildUpdateMFALevelEvent) event); + + else if (event instanceof GuildUpdateSystemChannelEvent) + return inverse((GuildUpdateSystemChannelEvent) event); + + else if (event instanceof GuildUpdateRegionEvent) + return inverse((GuildUpdateRegionEvent) event); + + else if (event instanceof GuildUpdateNameEvent) + return inverse((GuildUpdateNameEvent) event); + + else if (event instanceof GuildUpdateDescriptionEvent ) + return inverse((GuildUpdateDescriptionEvent) event); + + else if (event instanceof GuildUpdateExplicitContentLevelEvent) + return inverse((GuildUpdateExplicitContentLevelEvent) event); + + else if (event instanceof GuildUpdateNotificationLevelEvent) + return inverse((GuildUpdateNotificationLevelEvent) event); + + else if (event instanceof GuildUpdateVerificationLevelEvent) + return inverse((GuildUpdateVerificationLevelEvent) event); + + else if (event instanceof GuildUpdateAfkTimeoutEvent) + return inverse((GuildUpdateAfkTimeoutEvent) event); + + else if (event instanceof GuildUpdateAfkChannelEvent) + return inverse((GuildUpdateAfkChannelEvent) event); + else if (event instanceof GuildMemberJoinEvent) return inverse((GuildMemberJoinEvent) event); @@ -309,7 +345,104 @@ private static AuditableRestAction inverse(GuildMemberUpdateNicknameEvent return member.modifyNickname(oldNick); } - //TODO Look into all the GenericGuildUpdateEvents. There are a lot + private static GuildManager inverse(GuildUpdateVanityCodeEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + String oldCode = event.getOldVanityCode(); + + return manager.setVanityCode(oldCode); + } + + private static GuildManager inverse(GuildUpdateMFALevelEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + Guild.MFALevel oldMFA = event.getOldMFALevel(); + + return manager.setRequiredMFALevel(oldMFA); + } + + private static GuildManager inverse(GuildUpdateSystemChannelEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + TextChannel oldChannel = event.getOldSystemChannel(); + + return manager.setSystemChannel(oldChannel); + } + + private static GuildManager inverse(GuildUpdateRegionEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + Region oldRegion = event.getOldRegion(); + + return manager.setRegion(oldRegion); + } + + private static GuildManager inverse(GuildUpdateNameEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + String oldName = event.getOldName(); + + return manager.setName(oldName); + } + + private static GuildManager inverse(GuildUpdateDescriptionEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + String oldDescription = event.getOldDescription(); + + return manager.setDescription(oldDescription); + } + + private static GuildManager inverse(GuildUpdateExplicitContentLevelEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + Guild.ExplicitContentLevel oldLevel = event.getOldValue(); + + return manager.setExplicitContentLevel(oldLevel); + } + + private static GuildManager inverse(GuildUpdateNotificationLevelEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + Guild.NotificationLevel oldLevel = event.getOldNotificationLevel(); + + return manager.setDefaultNotificationLevel(oldLevel); + } + + private static GuildManager inverse(GuildUpdateVerificationLevelEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + Guild.VerificationLevel oldLevel = event.getOldVerificationLevel(); + + return manager.setVerificationLevel(oldLevel); + } + + private static GuildManager inverse(GuildUpdateAfkTimeoutEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + Guild.Timeout oldTimeout = event.getOldAfkTimeout(); + + return manager.setAfkTimeout(oldTimeout); + } + + private static GuildManager inverse(GuildUpdateAfkChannelEvent event) + { + Guild guild = event.getGuild(); + GuildManager manager = guild.getManager(); + VoiceChannel oldChannel = event.getOldAfkChannel(); + + return manager.setAfkChannel(oldChannel); + } private static AuditableRestAction inverse(GuildMemberJoinEvent event) { From 61eacc3b2ebc1e1b0fc17b9694114a83ff81f703 Mon Sep 17 00:00:00 2001 From: HydroPage90 Date: Thu, 27 Aug 2020 09:22:44 -0500 Subject: [PATCH 29/29] Implemented hoisted role inversion. Thanks @canelex --- .../jdautilities/commons/utils/InverseAction.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java index 193cdd62..cf2f1adb 100644 --- a/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java +++ b/commons/src/main/java/com/jagrosh/jdautilities/commons/utils/InverseAction.java @@ -205,6 +205,9 @@ else if (event instanceof RoleUpdatePermissionsEvent) else if (event instanceof RoleUpdateNameEvent) return inverse((RoleUpdateNameEvent) event); + else if (event instanceof RoleUpdateHoistedEvent) + return inverse((RoleUpdateHoistedEvent) event); + else if (event instanceof RoleUpdateColorEvent) return inverse((RoleUpdateColorEvent) event); @@ -580,7 +583,14 @@ private static RoleManager inverse(RoleUpdateNameEvent event) return manager.setName(oldName); } - //TODO What the hell is a hoisted role? Lmao, look at that later + private static RoleManager inverse(RoleUpdateHoistedEvent event) + { + Role role = event.getRole(); + RoleManager manager = role.getManager(); + Boolean oldState = event.getOldValue(); + + return manager.setHoisted(oldState); + } private static RoleManager inverse(RoleUpdateColorEvent event) {