/
IPermissionContainer.java
135 lines (126 loc) · 6.52 KB
/
IPermissionContainer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
* 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.entities.channel.attribute;
import net.dv8tion.jda.api.entities.IPermissionHolder;
import net.dv8tion.jda.api.entities.PermissionOverride;
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
import net.dv8tion.jda.api.managers.channel.attribute.IPermissionContainerManager;
import net.dv8tion.jda.api.requests.restaction.PermissionOverrideAction;
import javax.annotation.CheckReturnValue;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* Represents a {@link GuildChannel} that uses {@link net.dv8tion.jda.api.entities.PermissionOverride Permission Overrides}.
*
* <p>Channels that implement this interface can override permissions for specific users or roles.
*
* @see net.dv8tion.jda.api.entities.PermissionOverride
*/
public interface IPermissionContainer extends GuildChannel
{
@Override
@Nonnull
IPermissionContainerManager<?, ?> getManager();
/**
* The {@link net.dv8tion.jda.api.entities.PermissionOverride} relating to the specified {@link net.dv8tion.jda.api.entities.Member Member} or {@link net.dv8tion.jda.api.entities.Role Role}.
* If there is no {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride} for this {@link GuildChannel GuildChannel}
* relating to the provided Member or Role, then this returns {@code null}.
*
* @param permissionHolder
* The {@link net.dv8tion.jda.api.entities.Member Member} or {@link net.dv8tion.jda.api.entities.Role Role} whose
* {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride} is requested.
*
* @throws IllegalArgumentException
* If the provided permission holder is null, or from a different guild
*
* @return Possibly-null {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverride}
* relating to the provided Member or Role.
*/
@Nullable
PermissionOverride getPermissionOverride(@Nonnull IPermissionHolder permissionHolder);
/**
* Gets all of the {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverrides} that are part
* of this {@link GuildChannel GuildChannel}.
* <br>This combines {@link net.dv8tion.jda.api.entities.Member Member} and {@link net.dv8tion.jda.api.entities.Role Role} overrides.
* If you would like only {@link net.dv8tion.jda.api.entities.Member Member} overrides or only {@link net.dv8tion.jda.api.entities.Role Role}
* overrides, use {@link #getMemberPermissionOverrides()} or {@link #getRolePermissionOverrides()} respectively.
*
* <p>This requires {@link net.dv8tion.jda.api.utils.cache.CacheFlag#MEMBER_OVERRIDES CacheFlag.MEMBER_OVERRIDES} to be enabled!
* Without that CacheFlag, this list will only contain overrides for the currently logged in account and roles.
*
* @return Possibly-empty immutable list of all {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverrides}
* for this {@link GuildChannel GuildChannel}.
*/
@Nonnull
List<PermissionOverride> getPermissionOverrides();
/**
* Gets all of the {@link net.dv8tion.jda.api.entities.Member Member} {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverrides}
* that are part of this {@link GuildChannel GuildChannel}.
*
* <p>This requires {@link net.dv8tion.jda.api.utils.cache.CacheFlag#MEMBER_OVERRIDES CacheFlag.MEMBER_OVERRIDES} to be enabled!
*
* @return Possibly-empty immutable list of all {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverrides}
* for {@link net.dv8tion.jda.api.entities.Member Member}
* for this {@link GuildChannel GuildChannel}.
*/
@Nonnull
default List<PermissionOverride> getMemberPermissionOverrides()
{
return Collections.unmodifiableList(getPermissionOverrides().stream()
.filter(PermissionOverride::isMemberOverride)
.collect(Collectors.toList()));
}
/**
* Gets all of the {@link net.dv8tion.jda.api.entities.Role Role} {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverrides}
* that are part of this {@link GuildChannel GuildChannel}.
*
* @return Possibly-empty immutable list of all {@link net.dv8tion.jda.api.entities.PermissionOverride PermissionOverrides}
* for {@link net.dv8tion.jda.api.entities.Role Roles}
* for this {@link GuildChannel GuildChannel}.
*/
@Nonnull
default List<PermissionOverride> getRolePermissionOverrides()
{
return Collections.unmodifiableList(getPermissionOverrides().stream()
.filter(PermissionOverride::isRoleOverride)
.collect(Collectors.toList()));
}
/**
* Creates a new override or updates an existing one.
* <br>This is similar to calling {@link PermissionOverride#getManager()} if an override exists.
*
* @param permissionHolder
* The Member/Role for the override
*
* @throws net.dv8tion.jda.api.exceptions.InsufficientPermissionException
* If we don't have the permission to {@link net.dv8tion.jda.api.Permission#MANAGE_PERMISSIONS MANAGE_PERMISSIONS}
* @throws java.lang.IllegalArgumentException
* If the provided permission holder is null or not from this guild
*
* @return {@link net.dv8tion.jda.api.requests.restaction.PermissionOverrideAction}
* <br>With the current settings of an existing override or a fresh override with no permissions set
*
* @see PermissionOverrideAction#clear(long)
* @see PermissionOverrideAction#grant(long)
* @see PermissionOverrideAction#deny(long)
*/
@Nonnull
@CheckReturnValue
PermissionOverrideAction upsertPermissionOverride(@Nonnull IPermissionHolder permissionHolder);
}