Skip to content

Commit 9c1d2c2

Browse files
committed
Read requirement annotations
1 parent 99b7a0d commit 9c1d2c2

File tree

3 files changed

+104
-51
lines changed

3 files changed

+104
-51
lines changed

src/main/java/net/dv8tion/jda/api/Permission.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@
1515
*/
1616
package net.dv8tion.jda.api;
1717

18+
import net.dv8tion.jda.api.events.GenericEvent;
19+
import net.dv8tion.jda.api.events.annotations.RequiredPermissions;
1820
import net.dv8tion.jda.internal.utils.Checks;
1921

2022
import javax.annotation.Nonnull;
23+
import java.util.Arrays;
2124
import java.util.Collection;
25+
import java.util.Collections;
2226
import java.util.EnumSet;
2327

2428
/**
@@ -257,4 +261,48 @@ public static long getRaw(@Nonnull Collection<Permission> permissions)
257261

258262
return getRaw(permissions.toArray(EMPTY_PERMISSIONS));
259263
}
264+
265+
/**
266+
* Parse the required permissions from the provided {@link GenericEvent Event Types}.
267+
*
268+
* @param events
269+
* The event types
270+
*
271+
* @throws IllegalArgumentException
272+
* If provided with null
273+
*
274+
* @return {@link EnumSet} for the required permissions
275+
*/
276+
@Nonnull
277+
@SafeVarargs
278+
public static EnumSet<Permission> fromEvents(@Nonnull Class<? extends GenericEvent>... events)
279+
{
280+
Checks.noneNull(events, "Event");
281+
return fromEvents(Arrays.asList(events));
282+
}
283+
284+
/**
285+
* Parse the required permissions from the provided {@link GenericEvent Event Types}.
286+
*
287+
* @param events
288+
* The event types
289+
*
290+
* @throws IllegalArgumentException
291+
* If provided with null
292+
*
293+
* @return {@link EnumSet} for the required permissions
294+
*/
295+
@Nonnull
296+
public static EnumSet<Permission> fromEvents(@Nonnull Collection<Class<? extends GenericEvent>> events)
297+
{
298+
Checks.noneNull(events, "Events");
299+
EnumSet<Permission> flags = EnumSet.noneOf(Permission.class);
300+
for (Class<? extends GenericEvent> event : events)
301+
{
302+
final RequiredPermissions requiredPermissions = event.getDeclaredAnnotation(RequiredPermissions.class);
303+
if (requiredPermissions != null)
304+
Collections.addAll(flags, requiredPermissions.always());
305+
}
306+
return flags;
307+
}
260308
}

src/main/java/net/dv8tion/jda/api/requests/GatewayIntent.java

Lines changed: 6 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,8 @@
2121
import net.dv8tion.jda.api.entities.Member;
2222
import net.dv8tion.jda.api.entities.Message;
2323
import net.dv8tion.jda.api.events.GenericEvent;
24-
import net.dv8tion.jda.api.events.automod.AutoModExecutionEvent;
25-
import net.dv8tion.jda.api.events.automod.GenericAutoModRuleEvent;
26-
import net.dv8tion.jda.api.events.emoji.GenericEmojiEvent;
27-
import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
28-
import net.dv8tion.jda.api.events.guild.GuildBanEvent;
29-
import net.dv8tion.jda.api.events.guild.GuildUnbanEvent;
30-
import net.dv8tion.jda.api.events.guild.invite.GenericGuildInviteEvent;
31-
import net.dv8tion.jda.api.events.guild.member.GenericGuildMemberEvent;
32-
import net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent;
33-
import net.dv8tion.jda.api.events.guild.scheduledevent.update.GenericScheduledEventUpdateEvent;
34-
import net.dv8tion.jda.api.events.guild.voice.GenericGuildVoiceEvent;
24+
import net.dv8tion.jda.api.events.annotations.RequiredIntents;
3525
import net.dv8tion.jda.api.events.message.GenericMessageEvent;
36-
import net.dv8tion.jda.api.events.message.MessageBulkDeleteEvent;
37-
import net.dv8tion.jda.api.events.message.react.GenericMessageReactionEvent;
38-
import net.dv8tion.jda.api.events.sticker.GenericGuildStickerEvent;
39-
import net.dv8tion.jda.api.events.user.UserTypingEvent;
40-
import net.dv8tion.jda.api.events.user.update.GenericUserPresenceEvent;
41-
import net.dv8tion.jda.api.events.user.update.GenericUserUpdateEvent;
4226
import net.dv8tion.jda.api.utils.cache.CacheFlag;
4327
import net.dv8tion.jda.internal.utils.Checks;
4428

@@ -405,44 +389,15 @@ public static EnumSet<GatewayIntent> fromEvents(@Nonnull Class<? extends Generic
405389
@Nonnull
406390
public static EnumSet<GatewayIntent> fromEvents(@Nonnull Collection<Class<? extends GenericEvent>> events)
407391
{
392+
Checks.noneNull(events, "Events");
408393
EnumSet<GatewayIntent> intents = EnumSet.noneOf(GatewayIntent.class);
409394
for (Class<? extends GenericEvent> event : events)
410395
{
411-
Checks.notNull(event, "Event");
412-
413-
if (GenericUserPresenceEvent.class.isAssignableFrom(event))
414-
intents.add(GUILD_PRESENCES);
415-
else if (GenericUserUpdateEvent.class.isAssignableFrom(event) || GenericGuildMemberEvent.class.isAssignableFrom(event) || GuildMemberRemoveEvent.class.isAssignableFrom(event))
416-
intents.add(GUILD_MEMBERS);
417-
418-
else if (GuildBanEvent.class.isAssignableFrom(event) || GuildUnbanEvent.class.isAssignableFrom(event) || GuildAuditLogEntryCreateEvent.class.isAssignableFrom(event))
419-
intents.add(GUILD_MODERATION);
420-
else if (GenericEmojiEvent.class.isAssignableFrom(event) || GenericGuildStickerEvent.class.isAssignableFrom(event))
421-
intents.add(GUILD_EXPRESSIONS);
422-
else if (GenericScheduledEventUpdateEvent.class.isAssignableFrom(event))
423-
intents.add(SCHEDULED_EVENTS);
424-
else if (GenericGuildInviteEvent.class.isAssignableFrom(event))
425-
intents.add(GUILD_INVITES);
426-
else if (GenericGuildVoiceEvent.class.isAssignableFrom(event))
427-
intents.add(GUILD_VOICE_STATES);
428-
429-
else if (MessageBulkDeleteEvent.class.isAssignableFrom(event))
430-
intents.add(GUILD_MESSAGES);
431-
432-
else if (GenericMessageReactionEvent.class.isAssignableFrom(event))
433-
Collections.addAll(intents, GUILD_MESSAGE_REACTIONS, DIRECT_MESSAGE_REACTIONS);
434-
435-
else if (GenericMessageEvent.class.isAssignableFrom(event))
436-
Collections.addAll(intents, GUILD_MESSAGES, DIRECT_MESSAGES);
437-
438-
else if (UserTypingEvent.class.isAssignableFrom(event))
439-
Collections.addAll(intents, GUILD_MESSAGE_TYPING, DIRECT_MESSAGE_TYPING);
440-
441-
else if (AutoModExecutionEvent.class.isAssignableFrom(event))
442-
intents.add(AUTO_MODERATION_EXECUTION);
443-
else if (GenericAutoModRuleEvent.class.isAssignableFrom(event))
444-
intents.add(AUTO_MODERATION_CONFIGURATION);
396+
final RequiredIntents requiredIntents = event.getDeclaredAnnotation(RequiredIntents.class);
397+
if (requiredIntents != null)
398+
Collections.addAll(intents, requiredIntents.always());
445399
}
400+
446401
return intents;
447402
}
448403

src/main/java/net/dv8tion/jda/api/utils/cache/CacheFlag.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,16 @@
2121
import net.dv8tion.jda.api.entities.Role;
2222
import net.dv8tion.jda.api.entities.channel.attribute.IPostContainer;
2323
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
24+
import net.dv8tion.jda.api.events.GenericEvent;
25+
import net.dv8tion.jda.api.events.annotations.RequiredCacheFlags;
2426
import net.dv8tion.jda.api.requests.GatewayIntent;
27+
import net.dv8tion.jda.internal.utils.Checks;
2528

2629
import javax.annotation.Nonnull;
2730
import javax.annotation.Nullable;
31+
import java.util.Arrays;
32+
import java.util.Collection;
33+
import java.util.Collections;
2834
import java.util.EnumSet;
2935

3036
/**
@@ -137,4 +143,48 @@ public static EnumSet<CacheFlag> getPrivileged()
137143
{
138144
return EnumSet.copyOf(privileged);
139145
}
146+
147+
/**
148+
* Parse the required cache flags from the provided {@link GenericEvent Event Types}.
149+
*
150+
* @param events
151+
* The event types
152+
*
153+
* @throws IllegalArgumentException
154+
* If provided with null
155+
*
156+
* @return {@link EnumSet} for the required cache flags
157+
*/
158+
@Nonnull
159+
@SafeVarargs
160+
public static EnumSet<CacheFlag> fromEvents(@Nonnull Class<? extends GenericEvent>... events)
161+
{
162+
Checks.noneNull(events, "Event");
163+
return fromEvents(Arrays.asList(events));
164+
}
165+
166+
/**
167+
* Parse the required cache flags from the provided {@link GenericEvent Event Types}.
168+
*
169+
* @param events
170+
* The event types
171+
*
172+
* @throws IllegalArgumentException
173+
* If provided with null
174+
*
175+
* @return {@link EnumSet} for the required cache flags
176+
*/
177+
@Nonnull
178+
public static EnumSet<CacheFlag> fromEvents(@Nonnull Collection<Class<? extends GenericEvent>> events)
179+
{
180+
Checks.noneNull(events, "Events");
181+
EnumSet<CacheFlag> flags = EnumSet.noneOf(CacheFlag.class);
182+
for (Class<? extends GenericEvent> event : events)
183+
{
184+
final RequiredCacheFlags requiredCacheFlags = event.getDeclaredAnnotation(RequiredCacheFlags.class);
185+
if (requiredCacheFlags != null)
186+
Collections.addAll(flags, requiredCacheFlags.always());
187+
}
188+
return flags;
189+
}
140190
}

0 commit comments

Comments
 (0)