All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.dv8tion.jda.api.requests.restaction.PermissionOverrideAction Maven / Gradle / Ivy

Go to download

Java wrapper for the popular chat & VOIP service: Discord https://discord.com

The newest version!
/*
 * Copyright 2015 Austin Keener, Michael Ritter, Florian Spieß, and the JDA contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.dv8tion.jda.api.requests.restaction;

import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.entities.channel.attribute.IPermissionContainer;
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
import net.dv8tion.jda.internal.utils.Checks;

import javax.annotation.CheckReturnValue;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.EnumSet;
import java.util.concurrent.TimeUnit;
import java.util.function.BooleanSupplier;

/**
 * Extension of {@link net.dv8tion.jda.api.requests.restaction.AuditableRestAction AuditableRestAction} specifically
 * designed to create a {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride}
 * for a {@link GuildChannel GuildChannel}.
 * This extension allows setting properties before executing the action.
 *
 * @since  3.0
 *
 * @see    net.dv8tion.jda.api.entities.PermissionOverride#getManager()
 * @see    net.dv8tion.jda.api.entities.channel.attribute.IPermissionContainer#upsertPermissionOverride(IPermissionHolder)
 */
public interface PermissionOverrideAction extends AuditableRestAction
{
    @Nonnull
    @Override
    @CheckReturnValue
    PermissionOverrideAction setCheck(@Nullable BooleanSupplier checks);

    @Nonnull
    @Override
    @CheckReturnValue
    PermissionOverrideAction timeout(long timeout, @Nonnull TimeUnit unit);

    @Nonnull
    @Override
    @CheckReturnValue
    PermissionOverrideAction deadline(long timestamp);

    /**
     * Shortcut for {@code resetAllow().resetDeny()}.
     * 
The permission override will be empty after this operation * * @return The current PermissionOverrideAction for chaining convenience */ @Nonnull @CheckReturnValue default PermissionOverrideAction reset() { return resetAllow().resetDeny(); } /** * Resets the allowed permissions to the current original value. *
For a new override this will just be 0. * * @return The current PermissionOverrideAction for chaining convenience */ @Nonnull @CheckReturnValue PermissionOverrideAction resetAllow(); /** * Resets the denied permissions to the current original value. *
For a new override this will just be 0. * * @return The current PermissionOverrideAction for chaining convenience */ @Nonnull @CheckReturnValue PermissionOverrideAction resetDeny(); /** * The {@link IPermissionContainer} this will be created in * * @return The channel */ @Nonnull IPermissionContainer getChannel(); /** * The {@link Role} for this override * * @return The role, or null if this is a member override */ @Nullable Role getRole(); /** * The {@link Member} for this override * * @return The member, or null if this is a role override */ @Nullable Member getMember(); /** * The {@link Guild} for this override * * @return The guild */ @Nonnull default Guild getGuild() { return getChannel().getGuild(); } /** * The currently set of allowed permission bits. *
This value represents all granted permissions * in the raw bitwise representation. * *

Use {@link #getAllowedPermissions()} to retrieve a {@link java.util.List List} * with {@link net.dv8tion.jda.api.Permission Permissions} for this value * * @return long value of granted permissions */ long getAllowed(); /** * Set of {@link net.dv8tion.jda.api.Permission Permissions} * that would be granted by the PermissionOverride that is created by this action. *
Changes to the returned set do not affect this entity directly. * * @return set of granted {@link net.dv8tion.jda.api.Permission Permissions} */ @Nonnull default EnumSet getAllowedPermissions() { return Permission.getPermissions(getAllowed()); } /** * The currently set of denied permission bits. *
This value represents all denied permissions * in the raw bitwise representation. * *

Use {@link #getDeniedPermissions()} to retrieve a {@link java.util.List List} * with {@link net.dv8tion.jda.api.Permission Permissions} for this value * * @return long value of denied permissions */ long getDenied(); /** * Set of {@link net.dv8tion.jda.api.Permission Permissions} * that would be denied by the PermissionOverride that is created by this action. *
Changes to the returned set do not affect this entity directly. * * @return set of denied {@link net.dv8tion.jda.api.Permission Permissions} */ @Nonnull default EnumSet getDeniedPermissions() { return Permission.getPermissions(getDenied()); } /** * The currently set of inherited permission bits. *
This value represents all permissions that are not explicitly allowed or denied * in their raw bitwise representation. *
Inherited Permissions are permissions that are defined by other rules * from maybe other PermissionOverrides or a Role. * *

Use {@link #getInheritedPermissions()} to retrieve a {@link java.util.List List} * with {@link net.dv8tion.jda.api.Permission Permissions} for this value * * @return long value of inherited permissions */ long getInherited(); /** * Set of {@link net.dv8tion.jda.api.Permission Permissions} * that would be inherited from other permission holders. *
Permissions returned are not explicitly granted or denied! *
Changes to the returned set do not affect this entity directly. * * @return set of inherited {@link net.dv8tion.jda.api.Permission Permissions} * * @see #getInherited() */ @Nonnull default EnumSet getInheritedPermissions() { return Permission.getPermissions(getInherited()); } /** * Whether this Action will * create a {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride} * for a {@link net.dv8tion.jda.api.entities.Member Member} or not * * @return True, if this is targeting a Member * If this is {@code false} it is targeting a {@link net.dv8tion.jda.api.entities.Role Role}. ({@link #isRole()}) */ boolean isMember(); /** * Whether this Action will * create a {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride} * for a {@link net.dv8tion.jda.api.entities.Role Role} or not * * @return True, if this is targeting a Role. * If this is {@code false} it is targeting a {@link net.dv8tion.jda.api.entities.Member Member}. ({@link #isMember()}) */ boolean isRole(); /** * Sets the value of explicitly granted permissions * using the bitwise representation of a set of {@link net.dv8tion.jda.api.Permission Permissions}. *
This value can be retrieved through {@link net.dv8tion.jda.api.Permission#getRaw(net.dv8tion.jda.api.Permission...) Permissions.getRaw(Permission...)}! *
Note: Permissions not marked as {@link net.dv8tion.jda.api.Permission#isChannel() isChannel()} will have no affect! * *

All newly granted permissions will be removed from the currently set denied permissions. *
{@code allow = allowBits; deny = deny & ~allowBits;} * * @param allowBits * The positive bits representing the granted * permissions for the new PermissionOverride * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience * * @see #setAllowed(java.util.Collection) setAllow(Collection) * @see #setAllowed(net.dv8tion.jda.api.Permission...) setAllow(Permission...) */ @Nonnull @CheckReturnValue PermissionOverrideAction setAllowed(long allowBits); /** * Sets the value of explicitly granted permissions * using a Collection of {@link net.dv8tion.jda.api.Permission Permissions}. *
Note: Permissions not marked as {@link net.dv8tion.jda.api.Permission#isChannel() isChannel()} will have no affect! * *

Example: {@code setAllow(EnumSet.of(Permission.VIEW_CHANNEL))}

* * @param permissions * The Collection of Permissions representing the granted * permissions for the new PermissionOverride. *
If the provided value is {@code null} the permissions are reset to the default of none * * @throws java.lang.IllegalArgumentException * If the any of the specified Permissions is {@code null} * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience * * @see java.util.EnumSet EnumSet * @see #setAllowed(net.dv8tion.jda.api.Permission...) setAllow(Permission...) */ @Nonnull @CheckReturnValue default PermissionOverrideAction setAllowed(@Nullable Collection permissions) { if (permissions == null || permissions.isEmpty()) return setAllowed(0); Checks.noneNull(permissions, "Permissions"); return setAllowed(Permission.getRaw(permissions)); } /** * Sets the value of explicitly granted permissions * using a set of {@link net.dv8tion.jda.api.Permission Permissions}. *
Note: Permissions not marked as {@link net.dv8tion.jda.api.Permission#isChannel() isChannel()} will have no affect! * * @param permissions * The Permissions representing the granted * permissions for the new PermissionOverride. *
If the provided value is {@code null} the permissions are reset to the default of none * * @throws java.lang.IllegalArgumentException * If the any of the specified Permissions is {@code null} * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue default PermissionOverrideAction setAllowed(@Nullable Permission... permissions) { if (permissions == null || permissions.length == 0) return setAllowed(0); Checks.noneNull(permissions, "Permissions"); return setAllowed(Permission.getRaw(permissions)); } /** * Grants the specified permissions. *
This does not override already granted permissions. * * @param allowBits * The permissions to grant, in addition to already allowed permissions * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue PermissionOverrideAction grant(long allowBits); /** * Grants the specified permissions. *
This does not override already granted permissions. * * @param permissions * The permissions to grant, in addition to already allowed permissions * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * @throws IllegalArgumentException * If any provided argument is null * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue default PermissionOverrideAction grant(@Nonnull Collection permissions) { return grant(Permission.getRaw(permissions)); } /** * Grants the specified permissions. *
This does not override already granted permissions. * * @param permissions * The permissions to grant, in addition to already allowed permissions * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * @throws IllegalArgumentException * If any provided argument is null * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue default PermissionOverrideAction grant(@Nonnull Permission... permissions) { return grant(Permission.getRaw(permissions)); } /** * Sets the value of explicitly denied permissions * using the bitwise representation of a set of {@link net.dv8tion.jda.api.Permission Permissions}. *
This value can be retrieved through {@link net.dv8tion.jda.api.Permission#getRaw(net.dv8tion.jda.api.Permission...) Permissions.getRaw(Permission...)}! *
Note: Permissions not marked as {@link net.dv8tion.jda.api.Permission#isChannel() isChannel()} will have no affect! * *

All newly denied permissions will be removed from the currently set allowed permissions. *
{@code deny = denyBits; allow = allow & ~denyBits;} * * @param denyBits * The positive bits representing the denied * permissions for the new PermissionOverride * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience * * @see #setDenied(java.util.Collection) setDeny(Collection) * @see #setDenied(net.dv8tion.jda.api.Permission...) setDeny(Permission...) */ @Nonnull @CheckReturnValue PermissionOverrideAction setDenied(long denyBits); /** * Sets the value of explicitly denied permissions * using a Collection of {@link net.dv8tion.jda.api.Permission Permissions}. *
Note: Permissions not marked as {@link net.dv8tion.jda.api.Permission#isChannel() isChannel()} will have no affect! * *

Example: {@code setDeny(EnumSet.of(Permission.MESSAGE_SEND, Permission.MESSAGE_EXT_EMOJI))}

* * @param permissions * The Collection of Permissions representing the denied * permissions for the new PermissionOverride. *
If the provided value is {@code null} the permissions are reset to the default of none * * @throws java.lang.IllegalArgumentException * If the any of the specified Permissions is {@code null} * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience * * @see java.util.EnumSet EnumSet * @see #setDenied(net.dv8tion.jda.api.Permission...) setDeny(Permission...) */ @Nonnull @CheckReturnValue default PermissionOverrideAction setDenied(@Nullable Collection permissions) { if (permissions == null || permissions.isEmpty()) return setDenied(0); Checks.noneNull(permissions, "Permissions"); return setDenied(Permission.getRaw(permissions)); } /** * Sets the value of explicitly denied permissions * using a set of {@link net.dv8tion.jda.api.Permission Permissions}. *
Note: Permissions not marked as {@link net.dv8tion.jda.api.Permission#isChannel() isChannel()} will have no affect! * * @param permissions * The Permissions representing the denied * permissions for the new PermissionOverride. *
If the provided value is {@code null} the permissions are reset to the default of none * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * @throws java.lang.IllegalArgumentException * If the any of the specified Permissions is {@code null} * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue default PermissionOverrideAction setDenied(@Nullable Permission... permissions) { if (permissions == null || permissions.length == 0) return setDenied(0); Checks.noneNull(permissions, "Permissions"); return setDenied(Permission.getRaw(permissions)); } /** * Denies the specified permissions. *
This does not override already denied permissions. * * @param denyBits * The permissions to deny, in addition to already denied permissions * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue PermissionOverrideAction deny(long denyBits); /** * Denies the specified permissions. *
This does not override already denied permissions. * * @param permissions * The permissions to deny, in addition to already denied permissions * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * @throws IllegalArgumentException * If any provided argument is null * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue default PermissionOverrideAction deny(@Nonnull Collection permissions) { return deny(Permission.getRaw(permissions)); } /** * Denies the specified permissions. *
This does not override already denied permissions. * * @param permissions * The permissions to deny, in addition to already denied permissions * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * @throws IllegalArgumentException * If any provided argument is null * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue default PermissionOverrideAction deny(@Nonnull Permission... permissions) { return deny(Permission.getRaw(permissions)); } /** * Clears the provided {@link net.dv8tion.jda.api.Permission Permissions} bits * from the {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride}. *
This will cause the provided Permissions to be inherited from other overrides or roles. * * @param inheritedBits * The permissions to clear from the {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride} * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue PermissionOverrideAction clear(long inheritedBits); /** * Clears the provided {@link net.dv8tion.jda.api.Permission Permissions} bits * from the {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride}. *
This will cause the provided Permissions to be inherited * * @param permissions * The permissions to clear from the {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride} * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * @throws IllegalArgumentException * If any provided argument is null * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue default PermissionOverrideAction clear(@Nonnull Collection permissions) { return clear(Permission.getRaw(permissions)); } /** * Clears the provided {@link net.dv8tion.jda.api.Permission Permissions} bits * from the {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride}. *
This will cause the provided Permissions to be inherited * * @param permissions * The permissions to clear from the {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride} * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * @throws IllegalArgumentException * If any provided argument is null * * @return The current PermissionOverrideAction - for chaining convenience */ @Nonnull @CheckReturnValue default PermissionOverrideAction clear(@Nonnull Permission... permissions) { return clear(Permission.getRaw(permissions)); } /** * Combination of {@link #setAllowed(long)} and {@link #setDenied(long)} *
First sets the allow bits and then the deny bits. * * @param allowBits * An unsigned bitwise representation * of granted Permissions * @param denyBits * An unsigned bitwise representation * of denied Permissions * * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience * * @see #setPermissions(java.util.Collection, java.util.Collection) * @see net.dv8tion.jda.api.Permission#getRaw(net.dv8tion.jda.api.Permission...) Permission.getRaw(Permission...) * @see net.dv8tion.jda.api.Permission#getRaw(java.util.Collection) Permission.getRaw(Collection) */ @Nonnull @CheckReturnValue PermissionOverrideAction setPermissions(long allowBits, long denyBits); /** * Combination of {@link #setAllowed(java.util.Collection)} and {@link #setDenied(java.util.Collection)} *
First sets the granted permissions and then the denied permissions. *
If a passed collection is {@code null} it resets the represented value to {@code 0} - no permission specifics. * *

Example: {@code setPermissions(EnumSet.of(Permission.VIEW_CHANNEL), EnumSet.of(Permission.MESSAGE_SEND, Permission.MESSAGE_EXT_EMOJI))} * * @param grantPermissions * A Collection of {@link net.dv8tion.jda.api.Permission Permissions} * representing all explicitly granted Permissions for the PermissionOverride * @param denyPermissions * A Collection of {@link net.dv8tion.jda.api.Permission Permissions} * representing all explicitly denied Permissions for the PermissionOverride * * @throws java.lang.IllegalArgumentException * If the any of the specified Permissions is {@code null} * @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException * If the currently logged in account does not have {@link Permission#MANAGE_PERMISSIONS Permission.MANAGE_PERMISSIONS} * on the channel and tries to set permissions it does not have in the channel * * @return The current PermissionOverrideAction - for chaining convenience * * @see java.util.EnumSet EnumSet * @see net.dv8tion.jda.api.Permission#getRaw(java.util.Collection) Permission.getRaw(Collection) */ @Nonnull @CheckReturnValue default PermissionOverrideAction setPermissions(@Nullable Collection grantPermissions, @Nullable Collection denyPermissions) { return setAllowed(grantPermissions).setDenied(denyPermissions); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy