diff --git a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java index 93207b64..e672edc5 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java +++ b/src/main/java/com/diamondfire/helpbot/sys/tasks/impl/VIPStarTask.java @@ -28,24 +28,34 @@ public void run() { Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); Set vipIds = VIPRoleHandler.retrieveVIPs(); - guild.loadMembers((member) -> { + guild.loadMembers(member -> { Role role = VIPRoleHandler.getRole(member.getColorRaw()); if (role == null) { return; } + if (vipIds.contains(member.getIdLong()) && !member.getRoles().contains(role)) { guild.addRoleToMember(member, role) .reason("User has VIP Pass") .queue(); return; } + if (!vipIds.contains(member.getIdLong()) && member.getRoles().contains(role)) { guild.removeRoleFromMember(member, role) .reason("User's VIP Pass has expired") .queue(); } }); - + + for (Role role : guild.getRoles()) { + if (!VIPRoleHandler.isVipRole(role)) { + continue; + } + + if (guild.getMembersWithRoles(role).isEmpty()) { + VIPRoleHandler.deleteRole(role); + } + } } - } diff --git a/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java index 2743407f..b611c8aa 100644 --- a/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java +++ b/src/main/java/com/diamondfire/helpbot/sys/vip/VIPRoleHandler.java @@ -4,11 +4,13 @@ import com.diamondfire.helpbot.sys.database.impl.DatabaseQuery; import com.diamondfire.helpbot.sys.database.impl.queries.BasicQuery; import com.diamondfire.helpbot.sys.externalfile.ExternalFiles; +import com.diamondfire.helpbot.sys.tasks.TaskRegistry; import com.diamondfire.helpbot.util.StarUtil; import com.google.gson.*; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Icon; import net.dv8tion.jda.api.entities.Role; +import okhttp3.internal.concurrent.Task; import javax.imageio.ImageIO; import java.awt.*; @@ -28,30 +30,6 @@ public class VIPRoleHandler { static { try { cacheJson(); - - Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); - for (Role role : guild.getRoles()) { - int color = role.getColorRaw(); - if (color == Role.DEFAULT_COLOR_RAW) { - continue; - } - if (role.getIcon() != null) { - continue; - } - if (!COLOR_ROLE_MAP.containsKey(color)) { - // Create the coloured star and register it on discord. - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ImageIO.write(StarUtil.create(new Color(color)), "png", baos); - baos.flush(); - role = guild.createRole() - .setName(ROLE_NAME) - .setIcon(Icon.from(baos.toByteArray())) - .setPermissions(0L) - .complete(); - COLOR_ROLE_MAP.put(color, role.getIdLong()); - } - } - save(); } catch (IOException e) { e.printStackTrace(); } @@ -105,10 +83,41 @@ public static Role getRole(int color) { } Guild guild = HelpBotInstance.getJda().getGuildById(HelpBotInstance.DF_GUILD); if (!COLOR_ROLE_MAP.containsKey(color)) { - return null; + try { + // Create the coloured star and register it on discord. + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(StarUtil.create(new Color(color)), "png", baos); + baos.flush(); + Role role = guild.createRole() + .setName(ROLE_NAME) + .setIcon(Icon.from(baos.toByteArray())) + .setPermissions(0L) + .complete(); + COLOR_ROLE_MAP.put(color, role.getIdLong()); + save(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } } return guild.getRoleById(COLOR_ROLE_MAP.get(color)); } - + + public static boolean isVipRole(Role role) { + return COLOR_ROLE_MAP.containsValue(role.getIdLong()); + } + + public static void deleteRole(Role role) { + COLOR_ROLE_MAP.values().removeIf(id -> id == role.getIdLong()); + role.delete() + .reason("Noone with this vip role is currently on the discord") + .queue(); + + try { + save(); + } catch (IOException e) { + e.printStackTrace(); + } + } }