From 9744eddd354b21dcebd27c2e3b08f4934fd81480 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Mon, 20 Sep 2021 04:03:44 +0200 Subject: [PATCH] Fixed some minor syncing issues --- .../com/alttd/proxydiscordlink/bot/Bot.java | 40 ++++++++++++------- .../proxydiscordlink/bot/DiscordCommand.java | 6 +-- .../bot/api/DiscordModifyRole.java | 8 +++- .../bot/commands/DiscordLinkCommand.java | 1 + .../bot/commands/DiscordNick.java | 4 ++ .../bot/listeners/DiscordRoleListener.java | 1 + .../proxydiscordlink/util/Utilities.java | 22 ++++++++-- 7 files changed, 58 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/alttd/proxydiscordlink/bot/Bot.java b/src/main/java/com/alttd/proxydiscordlink/bot/Bot.java index 0bccd6c..9224a1d 100644 --- a/src/main/java/com/alttd/proxydiscordlink/bot/Bot.java +++ b/src/main/java/com/alttd/proxydiscordlink/bot/Bot.java @@ -87,7 +87,7 @@ public class Bot { if (embedBuilder.isEmpty()) return; try { - if (secondsTillDelete < 0){ + if (secondsTillDelete < 0) { channel.sendMessage(embedBuilder.build()).queue(); } else { channel.sendMessage(embedBuilder.build()).queue(message -> message.delete().queueAfter(secondsTillDelete, TimeUnit.SECONDS)); @@ -97,32 +97,42 @@ public class Bot { } } - public boolean addRole(long userId, long roleId, long guildId) { + public void addRole(long userId, long roleId, long guildId) { Guild guild = jda.getGuildById(guildId); if (guild == null) - return false; + return; Role role = guild.getRoleById(roleId); if (role == null) - return false; + return; Member member = guild.getMemberById(userId); - if (member == null) - return false; - guild.addRoleToMember(member, role).queue(); - return true; + if (member == null) { + guild.retrieveMemberById(userId).queue(m -> addRole(guild, m, role)); + return; + } + addRole(guild, member, role); } - public boolean removeRole(long userId, long roleId, long guildId) { + private void addRole(Guild guild, Member member, Role role) { + guild.addRoleToMember(member, role).queue(); + } + + public void removeRole(long userId, long roleId, long guildId) { Guild guild = jda.getGuildById(guildId); if (guild == null) - return false; + return; Role role = guild.getRoleById(roleId); if (role == null) - return false; + return; Member member = guild.getMemberById(userId); - if (member == null) - return false; + if (member == null) { + guild.retrieveMemberById(userId).queue(m -> removeRole(guild, m, role)); + return; + } + removeRole(guild, member, role); + } + + private void removeRole(Guild guild, Member member, Role role) { guild.removeRoleFromMember(member, role).queue(); - return true; } public boolean changeNick(long guildId, long userId, String nickname) { @@ -134,7 +144,7 @@ public class Bot { return false; try { guild.modifyNickname(member, nickname).queue(); - } catch (HierarchyException ignored){ + } catch (HierarchyException ignored) { ALogger.warn("I can't modify the nickname of those above me."); return false; } diff --git a/src/main/java/com/alttd/proxydiscordlink/bot/DiscordCommand.java b/src/main/java/com/alttd/proxydiscordlink/bot/DiscordCommand.java index 7363ae0..232f4e8 100644 --- a/src/main/java/com/alttd/proxydiscordlink/bot/DiscordCommand.java +++ b/src/main/java/com/alttd/proxydiscordlink/bot/DiscordCommand.java @@ -21,11 +21,11 @@ public abstract class DiscordCommand { public static void loadCommands() { commands = new ArrayList<>(); - loadCommand(new DiscordStaffList(), - new DiscordServerList(), - new DiscordLinkCommand(), + loadCommand(new DiscordLinkCommand(), new DiscordUnlink(), new DiscordNick() +// new DiscordStaffList(), +// new DiscordServerList(), ); } diff --git a/src/main/java/com/alttd/proxydiscordlink/bot/api/DiscordModifyRole.java b/src/main/java/com/alttd/proxydiscordlink/bot/api/DiscordModifyRole.java index e7b45e0..7f192a2 100644 --- a/src/main/java/com/alttd/proxydiscordlink/bot/api/DiscordModifyRole.java +++ b/src/main/java/com/alttd/proxydiscordlink/bot/api/DiscordModifyRole.java @@ -4,8 +4,12 @@ import com.alttd.proxydiscordlink.DiscordLink; public class DiscordModifyRole { - public static boolean discordAddRole(long userId, long roleId, long guildId) { - return DiscordLink.getPlugin().getBot().addRole(userId, roleId, guildId); + public static void discordAddRole(long userId, long roleId, long guildId) { + DiscordLink.getPlugin().getBot().addRole(userId, roleId, guildId); + } + + public static void discordRemoveRole(long userId, long roleId, long guildId) { + DiscordLink.getPlugin().getBot().removeRole(userId, roleId, guildId); } } diff --git a/src/main/java/com/alttd/proxydiscordlink/bot/commands/DiscordLinkCommand.java b/src/main/java/com/alttd/proxydiscordlink/bot/commands/DiscordLinkCommand.java index 3f6654b..0223db4 100644 --- a/src/main/java/com/alttd/proxydiscordlink/bot/commands/DiscordLinkCommand.java +++ b/src/main/java/com/alttd/proxydiscordlink/bot/commands/DiscordLinkCommand.java @@ -50,6 +50,7 @@ public class DiscordLinkCommand extends DiscordCommand { return; List discordRoles = Utilities.getDiscordRolesForUser(uuid, member); + List minecraftRanks = Utilities.getMinecraftRolesForUser(uuid); if (discordRoles == null) return; diff --git a/src/main/java/com/alttd/proxydiscordlink/bot/commands/DiscordNick.java b/src/main/java/com/alttd/proxydiscordlink/bot/commands/DiscordNick.java index 1960303..b5e4746 100644 --- a/src/main/java/com/alttd/proxydiscordlink/bot/commands/DiscordNick.java +++ b/src/main/java/com/alttd/proxydiscordlink/bot/commands/DiscordNick.java @@ -50,6 +50,8 @@ public class DiscordNick extends DiscordCommand { case "username" -> { member.modifyNickname(discordLinkPlayer.getUsername()).queue(); channel.sendMessage("Your nickname has been set to `" + discordLinkPlayer.getUsername() + "`.").queue(); + discordLinkPlayer.setNick(false); + DiscordLink.getPlugin().getDatabase().syncPlayer(discordLinkPlayer); } case "nickname" -> { String nick = DiscordLink.getPlugin().getDatabase().getNick(discordLinkPlayer.getUuid()); @@ -57,6 +59,8 @@ public class DiscordNick extends DiscordCommand { nick = discordLinkPlayer.getUsername(); member.modifyNickname(nick).queue(); channel.sendMessage("Your nickname has been set to `" + nick + "`.").queue(); + discordLinkPlayer.setNick(true); + DiscordLink.getPlugin().getDatabase().syncPlayer(discordLinkPlayer); } default -> channel.sendMessage("The correct syntax is: `" + BotConfig.prefixMap.get(message.getGuild().getIdLong()) + diff --git a/src/main/java/com/alttd/proxydiscordlink/bot/listeners/DiscordRoleListener.java b/src/main/java/com/alttd/proxydiscordlink/bot/listeners/DiscordRoleListener.java index 13a70b1..f4ae041 100644 --- a/src/main/java/com/alttd/proxydiscordlink/bot/listeners/DiscordRoleListener.java +++ b/src/main/java/com/alttd/proxydiscordlink/bot/listeners/DiscordRoleListener.java @@ -34,6 +34,7 @@ public class DiscordRoleListener extends ListenerAdapter { @Override public void onGuildMemberRoleAdd(@NotNull GuildMemberRoleAddEvent event) { List added_roles = DiscordRole.getDiscordRoles().stream() + .filter(DiscordRole::isUpdateToMinecraft) .filter(discordRole -> event.getRoles().stream() .anyMatch(role -> role.getIdLong() == discordRole.getId())) .collect(Collectors.toList()); diff --git a/src/main/java/com/alttd/proxydiscordlink/util/Utilities.java b/src/main/java/com/alttd/proxydiscordlink/util/Utilities.java index 5b7450c..d34ee27 100644 --- a/src/main/java/com/alttd/proxydiscordlink/util/Utilities.java +++ b/src/main/java/com/alttd/proxydiscordlink/util/Utilities.java @@ -14,10 +14,7 @@ import net.luckperms.api.model.user.User; import net.luckperms.api.node.NodeType; import net.luckperms.api.node.types.InheritanceNode; -import java.util.List; -import java.util.Random; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; public class Utilities { @@ -131,4 +128,21 @@ public class Utilities { }) .collect(Collectors.toList()); } + + public static List getMinecraftRolesForUser(UUID uuid) { + User user = getLuckPerms().getUserManager().getUser(uuid); + List roles = new ArrayList<>(); + if (user == null) + return roles; + + user.getNodes().stream() + .filter(node -> node instanceof InheritanceNode) + .map(node -> ((InheritanceNode) node).getGroupName()) + .collect(Collectors.toList()) + .forEach(lpName -> DiscordRole.getDiscordRoles().stream() + .filter(discordRole -> discordRole.getLuckpermsName().equals(lpName)) + .findFirst() + .ifPresent(roles::add)); + return roles; + } }