From 52ceb2206d34e4fb76114241839c92e4d9cd9964 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Tue, 6 Jun 2023 12:49:43 -0400 Subject: [PATCH 1/4] Fix discord link data being rewritten when no data was changed --- .../essentialsx/discordlink/AccountStorage.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountStorage.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountStorage.java index 68bf0552ad2..f7d95b582be 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountStorage.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountStorage.java @@ -39,7 +39,6 @@ public AccountStorage(final EssentialsDiscordLink plugin) throws IOException { throw new IOException("Unable to create account file!"); } try (final Reader reader = new FileReader(accountFile)) { - //noinspection UnstableApiUsage final Map map = gson.fromJson(reader, new TypeToken>() {}.getType()); uuidToDiscordIdMap = map == null ? Maps.synchronizedBiMap(HashBiMap.create()) : Maps.synchronizedBiMap(HashBiMap.create(map)); } @@ -74,15 +73,19 @@ public void add(final UUID uuid, final String discordId) { } public boolean remove(final UUID uuid) { - final boolean success = uuidToDiscordIdMap.remove(uuid.toString()) != null; - queueSave(); - return success; + if (uuidToDiscordIdMap.remove(uuid.toString()) != null) { + queueSave(); + return true; + } + return false; } public boolean remove(final String discordId) { - final boolean success = uuidToDiscordIdMap.values().removeIf(discordId::equals); - queueSave(); - return success; + if (uuidToDiscordIdMap.values().removeIf(discordId::equals)) { + queueSave(); + return true; + } + return false; } public UUID getUUID(final String discordId) { From ad581d48af5aabb2e33aac0ec74336f7f81914ce Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 8 Jun 2023 18:24:03 -0400 Subject: [PATCH 2/4] Use removeAccount return value for AccountLinkManager#unlinkAccount --- .../net/essentialsx/discordlink/AccountLinkManager.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java index 10b33d9d513..a0ddfb9d1c4 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java @@ -68,12 +68,7 @@ public UUID getUUID(final String discordId) { public boolean unlinkAccount(InteractionMember member) { Preconditions.checkNotNull(member, "member cannot be null"); - if (!isLinked(member.getId())) { - return false; - } - - removeAccount(member, DiscordLinkStatusChangeEvent.Cause.UNSYNC_API); - return true; + return isLinked(member.getId()) && removeAccount(member, DiscordLinkStatusChangeEvent.Cause.UNSYNC_API); } public boolean removeAccount(final InteractionMember member, final DiscordLinkStatusChangeEvent.Cause cause) { From 670bb87961ec652ec19a38b0669416f4b1a72dca Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 8 Jun 2023 18:50:53 -0400 Subject: [PATCH 3/4] Clean up link policy code Also error when new link policy types are added so we remember to write out the behavior here --- .../listeners/LinkBukkitListener.java | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java index 4ea071ff67e..10651d90769 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java @@ -138,20 +138,21 @@ public void onDiscordMessage(final DiscordMessageEvent event) { @EventHandler public void onUserLinkStatusChange(final DiscordLinkStatusChangeEvent event) { - if (event.isLinked()) { + if (event.isLinked() || ess.getSettings().getLinkPolicy() == DiscordLinkSettings.LinkPolicy.NONE) { event.getUser().setFreeze(false); return; } + String code; + try { + code = ess.getLinkManager().createCode(event.getUser().getBase().getUniqueId()); + } catch (IllegalArgumentException e) { + code = e.getMessage(); + } + final String finalCode = code; + switch (ess.getSettings().getLinkPolicy()) { case KICK: { - String code; - try { - code = ess.getLinkManager().createCode(event.getUser().getBase().getUniqueId()); - } catch (IllegalArgumentException e) { - code = e.getMessage(); - } - final String finalCode = code; final Runnable kickTask = () -> event.getUser().getBase().kickPlayer(tl("discordLinkLoginKick", "/link " + finalCode, ess.getApi().getInviteUrl())); if (Bukkit.isPrimaryThread()) { kickTask.run(); @@ -161,18 +162,12 @@ public void onUserLinkStatusChange(final DiscordLinkStatusChangeEvent event) { break; } case FREEZE: { - String code; - try { - code = ess.getLinkManager().createCode(event.getUser().getBase().getUniqueId()); - } catch (IllegalArgumentException e) { - code = e.getMessage(); - } event.getUser().sendMessage(tl("discordLinkLoginPrompt", "/link " + code, ess.getApi().getInviteUrl())); event.getUser().setFreeze(true); break; } default: { - break; + throw new IllegalStateException(); } } } From b7b44908e926f07f55fb065dc939b68173c3c0e1 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 8 Jun 2023 19:45:12 -0400 Subject: [PATCH 4/4] Fix roles/groups not being removed instantly upon unlink --- .../net/essentialsx/discordlink/AccountLinkManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java index a0ddfb9d1c4..982a3756244 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/AccountLinkManager.java @@ -77,10 +77,11 @@ public boolean removeAccount(final InteractionMember member, final DiscordLinkSt ensureAsync(() -> { final IUser user = ess.getEss().getUser(uuid); ensureSync(() -> ess.getServer().getPluginManager().callEvent(new DiscordLinkStatusChangeEvent(user, member, member.getId(), false, cause))); + + roleSyncManager.unSync(uuid, member.getId()); }); return true; } - ensureAsync(() -> roleSyncManager.unSync(uuid, member.getId())); return false; } @@ -101,9 +102,10 @@ public boolean removeAccount(final IUser user, final DiscordLinkStatusChangeEven if (storage.remove(user.getBase().getUniqueId())) { ess.getApi().getMemberById(id).thenAccept(member -> ensureSync(() -> ess.getServer().getPluginManager().callEvent(new DiscordLinkStatusChangeEvent(user, member, id, false, cause)))); + + ensureAsync(() -> roleSyncManager.unSync(user.getBase().getUniqueId(), id)); return true; } - ensureAsync(() -> roleSyncManager.unSync(user.getBase().getUniqueId(), id)); return false; }