package cc.fascinated.bat.common; import cc.fascinated.bat.model.BatGuild; import lombok.experimental.UtilityClass; import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Role; import java.awt.*; import java.util.EnumSet; /** * @author Fascinated (fascinated7) */ @UtilityClass public class RoleUtils { /** * Checks if a member has permission to give the role to another member * * @param guild the guild to check * @param member the member to check * @param role the role to check * @return if the member has permission to give the role */ public static boolean hasPermissionToGiveRole(BatGuild guild, Member member, Role role) { return member.getRoles().stream().anyMatch(r -> r.getPosition() > role.getPosition()); } /** * Checks if a member has a higher role than the specified role * * @param member the member to check * @param targetMember the member to check against * @return if the member has a higher role */ public static boolean hasHigherRole(Member member, Member targetMember) { return member.getRoles().stream().anyMatch(r -> targetMember.getRoles().stream().anyMatch(tr -> tr.getPosition() < r.getPosition())); } /** * Gets the formatted permissions of a role * * @param role the role to get the formatted permissions of * @return the formatted permissions */ public String getFormattedPermissions(Role role) { StringBuilder formattedPermissions = new StringBuilder(); EnumSet permissions = role.getPermissions(); if (permissions.isEmpty()) { return "`None`"; } for (Permission permission : permissions) { formattedPermissions.append("`").append(permission.getName()).append("`, "); } return formattedPermissions.substring(0, formattedPermissions.length() - 2); } /** * Gets the formatted color of a role * * @param color the color string to get the formatted color of * @return the formatted color */ public String getFormattedColor(Color color) { if (color == null) { return "Default"; } String colorHex = HexColorUtils.colorToHex(color); return "`%s` *[(view)](%s)*".formatted( colorHex, "https://www.colorhexa.com/%s".formatted(colorHex.substring(1)) ); } /** * Gets the formatted color of a role * * @param role the role to get the formatted icon of * @return the formatted icon */ public String getFormattedColor(Role role) { return getFormattedColor(role.getColor()); } }