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)
{