Class PermissionUtil


  • public class PermissionUtil
    extends java.lang.Object
    • Constructor Detail

      • PermissionUtil

        public PermissionUtil()
    • Method Detail

      • canInteract

        public static boolean canInteract​(Member issuer,
                                          Member target)
        Checks if one given Member can interact with a 2nd given Member - in a permission sense (kick/ban/modify perms). This only checks the Role-Position and does not check the actual permission (kick/ban/manage_role/...)
        Parameters:
        issuer - The member that tries to interact with 2nd member
        target - The member that is the target of the interaction
        Returns:
        True, if issuer can interact with target in guild
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • canInteract

        public static boolean canInteract​(Member issuer,
                                          Role target)
        Checks if a given Member can interact with a given Role - in a permission sense (kick/ban/modify perms). This only checks the Role-Position and does not check the actual permission (kick/ban/manage_role/...)
        Parameters:
        issuer - The member that tries to interact with the role
        target - The role that is the target of the interaction
        Returns:
        True, if issuer can interact with target
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • canInteract

        public static boolean canInteract​(Role issuer,
                                          Role target)
        Checks if one given Role can interact with a 2nd given Role - in a permission sense (kick/ban/modify perms). This only checks the Role-Position and does not check the actual permission (kick/ban/manage_role/...)
        Parameters:
        issuer - The role that tries to interact with 2nd role
        target - The role that is the target of the interaction
        Returns:
        True, if issuer can interact with target
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • canInteract

        public static boolean canInteract​(Member issuer,
                                          Emote emote)
        Check whether the provided Member can use the specified Emote.

        If the specified Member is not in the emote's guild or the emote provided is fake this will return false. Otherwise it will check if the emote is restricted to any roles and if that is the case if the Member has one of these.

        In the case of an animated Emote, this will check if the issuer is the currently logged in account, and then check if the account has nitro, and return false if it doesn't.
        For other accounts, this method will not take into account whether the emote is animated, as there is no real way to check if the Member can interact with them.
        Note: This is not checking if the issuer owns the Guild or not.

        Parameters:
        issuer - The member that tries to interact with the Emote
        emote - The emote that is the target interaction
        Returns:
        True, if the issuer can interact with the emote
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • canInteract

        public static boolean canInteract​(User issuer,
                                          Emote emote,
                                          MessageChannel channel,
                                          boolean botOverride)
        Checks whether the specified Emote can be used by the provided User in the MessageChannel.
        Parameters:
        issuer - The user that tries to interact with the Emote
        emote - The emote that is the target interaction
        channel - The MessageChannel this emote should be interacted within
        botOverride - Whether bots can use non-managed emotes in other guilds
        Returns:
        True, if the issuer can interact with the emote within the specified MessageChannel
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • canInteract

        public static boolean canInteract​(User issuer,
                                          Emote emote,
                                          MessageChannel channel)
        Checks whether the specified Emote can be used by the provided User in the MessageChannel.
        Parameters:
        issuer - The user that tries to interact with the Emote
        emote - The emote that is the target interaction
        channel - The MessageChannel this emote should be interacted within
        Returns:
        True, if the issuer can interact with the emote within the specified MessageChannel
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • checkPermission

        public static boolean checkPermission​(Member member,
                                              Permission... permissions)
        Checks to see if the Member has the specified Permissions in the specified Guild. This method properly deals with Owner status.

        Note: this is based on effective permissions, not literal permissions. If a member has permissions that would enable them to do something without the literal permission to do it, this will still return true.
        Example: If a member has the Permission.ADMINISTRATOR permission, they will be able to Permission.MANAGE_SERVER as well, even without the literal permissions.

        Parameters:
        member - The Member whose permissions are being checked.
        permissions - The Permissions being checked for.
        Returns:
        True - if the Member effectively has the specified Permissions.
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null
      • checkPermission

        public static boolean checkPermission​(Channel channel,
                                              Member member,
                                              Permission... permissions)
        Checks to see if the Member has the specified Permissions in the specified Channel. This method properly deals with PermissionOverrides and Owner status.

        Note: this is based on effective permissions, not literal permissions. If a member has permissions that would enable them to do something without the literal permission to do it, this will still return true.
        Example: If a member has the Permission.ADMINISTRATOR permission, they will be able to Permission.MESSAGE_WRITE in every channel.

        Parameters:
        member - The Member whose permissions are being checked.
        channel - The Channel being checked.
        permissions - The Permissions being checked for.
        Returns:
        True - if the Member effectively has the specified Permissions.
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • getEffectivePermission

        public static long getEffectivePermission​(Member member)
        Gets the long representation of the effective permissions allowed for this Member in this Guild. This can be used in conjunction with Permission.getPermissions(int) to easily get a list of all Permissions that this member has in this Guild.

        This only returns the Guild-level permissions!

        Parameters:
        member - The Member whose permissions are being checked.
        Returns:
        The long representation of the literal permissions that this Member has in this Guild.
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • getEffectivePermission

        public static long getEffectivePermission​(Channel channel,
                                                  Member member)
        Gets the long representation of the effective permissions allowed for this Member in this Channel. This can be used in conjunction with Permission.getPermissions(long) to easily get a list of all Permissions that this member can use in this Channel.
        This functions very similarly to how Role.getPermissionsRaw().
        Parameters:
        channel - The Channel being checked.
        member - The Member whose permissions are being checked.
        Returns:
        The long representation of the effective permissions that this Member has in this Channel.
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • getEffectivePermission

        public static long getEffectivePermission​(Channel channel,
                                                  Role role)
        Gets the long representation of the effective permissions allowed for this Role in this Channel. This can be used in conjunction with Permission.getPermissions(long) to easily get a list of all Permissions that this role can use in this Channel.
        Parameters:
        channel - The Channel in which permissions are being checked.
        role - The Role whose permissions are being checked.
        Returns:
        The long representation of the effective permissions that this Role has in this Channel
        Throws:
        java.lang.IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      • getExplicitPermission

        public static long getExplicitPermission​(Member member)
        Retrieves the explicit permissions of the specified Member in its hosting Guild.
        This method does not calculate the owner in.

        All permissions returned are explicitly granted to this Member via its Roles.
        Permissions like Permission.ADMINISTRATOR do not grant other permissions in this value.

        Parameters:
        member - The non-null Member for which to get implicit permissions
        Returns:
        Primitive (unsigned) long value with the implicit permissions of the specified member
        Throws:
        java.lang.IllegalArgumentException - If the specified member is null
        Since:
        3.1
      • getExplicitPermission

        public static long getExplicitPermission​(Channel channel,
                                                 Member member)
        Retrieves the explicit permissions of the specified Member in its hosting Guild and specific Channel.
        This method does not calculate the owner in. Allowed permissions override denied permissions of PermissionOverrides!

        All permissions returned are explicitly granted to this Member via its Roles.
        Permissions like Permission.ADMINISTRATOR do not grant other permissions in this value.

        This factor in all PermissionOverrides that affect this member and only grants the ones that are explicitly given.

        Parameters:
        channel - The target channel of which to check PermissionOverrides
        member - The non-null Member for which to get implicit permissions
        Returns:
        Primitive (unsigned) long value with the implicit permissions of the specified member in the specified channel
        Throws:
        java.lang.IllegalArgumentException - If any of the arguments is null or the specified entities are not from the same Guild
        Since:
        3.1
      • getExplicitPermission

        public static long getExplicitPermission​(Channel channel,
                                                 Role role)
        Retrieves the explicit permissions of the specified Role in its hosting Guild and specific Channel.
        Allowed permissions override denied permissions of PermissionOverrides!

        All permissions returned are explicitly granted to this Role.
        Permissions like Permission.ADMINISTRATOR do not grant other permissions in this value.

        This factor in existing PermissionOverrides if possible.

        Parameters:
        channel - The target channel of which to check PermissionOverrides
        role - The non-null Role for which to get implicit permissions
        Returns:
        Primitive (unsigned) long value with the implicit permissions of the specified role in the specified channel
        Throws:
        java.lang.IllegalArgumentException - If any of the arguments is null or the specified entities are not from the same Guild
        Since:
        3.1