Class PermissionUtil

java.lang.Object
net.dv8tion.jda.internal.utils.PermissionUtil

public class PermissionUtil extends Object
  • Constructor Details

    • PermissionUtil

      public PermissionUtil()
  • Method Details

    • 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:
      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:
      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:
      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, RichCustomEmoji emoji)
      Check whether the provided Member can use the specified Emoji.

      If the specified Member is not in the emoji's guild or the emoji provided is from a message this will return false. Otherwise, it will check if the emoji is restricted to any roles and if that is the case if the Member has one of these.
      Note: This is not checking if the issuer owns the Guild or not.

      Parameters:
      issuer - The member that tries to interact with the Emoji
      emoji - The emoji that is the target interaction
      Returns:
      True, if the issuer can interact with the emoji
      Throws:
      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, RichCustomEmoji emoji, MessageChannel channel, boolean botOverride)
      Checks whether the specified Emoji can be used by the provided User in the MessageChannel.
      Parameters:
      issuer - The user that tries to interact with the emoji
      emoji - The emoji that is the target interaction
      channel - The MessageChannel this emoji should be interacted within
      botOverride - Whether bots can use non-managed emojis in other guilds
      Returns:
      True, if the issuer can interact with the emoji within the specified MessageChannel
      Throws:
      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, RichCustomEmoji emoji, MessageChannel channel)
      Checks whether the specified RichCustomEmoji can be used by the provided User in the MessageChannel.
      Parameters:
      issuer - The user that tries to interact with the emoji
      emoji - The emoji that is the target interaction
      channel - The MessageChannel this emoji should be interacted within
      Returns:
      True, if the issuer can interact with the emoji within the specified MessageChannel
      Throws:
      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:
      IllegalArgumentException - if any of the provided parameters is null
    • checkPermission

      public static boolean checkPermission(IPermissionContainer channel, Member member, Permission... permissions)
      Checks to see if the Member has the specified Permissions in the specified GuildChannel. 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_SEND in every channel.

      Parameters:
      channel - The GuildChannel being checked.
      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:
      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:
      IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      DetachedEntityException - If the provided member is in a guild the bot is not a member of
    • getEffectivePermission

      public static long getEffectivePermission(GuildChannel channel, Member member)
      Gets the long representation of the effective permissions allowed for this Member in this GuildChannel. 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 GuildChannel.
      This functions very similarly to how Role.getPermissionsRaw().
      Parameters:
      channel - The GuildChannel being checked.
      member - The Member whose permissions are being checked.
      Returns:
      The long representation of the effective permissions that this Member has in this GuildChannel.
      Throws:
      IllegalArgumentException - if any of the provided parameters is null or the provided entities are not from the same guild
      DetachedEntityException - If the provided member is in a guild the bot is not a member of
    • getEffectivePermission

      public static long getEffectivePermission(GuildChannel channel, Role role)
      Gets the long representation of the effective permissions allowed for this Role in this GuildChannel. 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 GuildChannel.
      Parameters:
      channel - The GuildChannel 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 GuildChannel
      Throws:
      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:
      IllegalArgumentException - If the specified member is null
      DetachedEntityException - If the provided member is in a guild the bot is not a member of
      Since:
      3.1
    • getExplicitPermission

      public static long getExplicitPermission(GuildChannel channel, Member member)
      Retrieves the explicit permissions of the specified Member in its hosting Guild and specific GuildChannel.
      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:
      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(GuildChannel channel, Member member, boolean includeRoles)
      Retrieves the explicit permissions of the specified Member in its hosting Guild and specific GuildChannel.
      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
      includeRoles - Whether the base role permissions should be included
      Returns:
      Primitive (unsigned) long value with the implicit permissions of the specified member in the specified channel
      Throws:
      IllegalArgumentException - If any of the arguments is null or the specified entities are not from the same Guild
      DetachedEntityException - If the provided member is in a guild the bot is not a member of
      Since:
      3.1
    • getExplicitPermission

      public static long getExplicitPermission(GuildChannel channel, Role role)
      Retrieves the explicit permissions of the specified Role in its hosting Guild and specific GuildChannel.
      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:
      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(GuildChannel channel, Role role, boolean includeRoles)
      Retrieves the explicit permissions of the specified Role in its hosting Guild and specific GuildChannel.
      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
      includeRoles - Whether the base role permissions should be included
      Returns:
      Primitive (unsigned) long value with the implicit permissions of the specified role in the specified channel
      Throws:
      IllegalArgumentException - If any of the arguments is null or the specified entities are not from the same Guild
      DetachedEntityException - If the provided role is in a guild the bot is not a member of
      Since:
      3.1