Java源码示例:net.dv8tion.jda.api.utils.cache.CacheFlag

示例1
public static void main(String[] args) throws LoginException
{
    if (args.length == 0)
    {
        System.err.println("Unable to start without token!");
        System.exit(1);
    }
    String token = args[0];

    // We only need 2 gateway intents enabled for this example:
    EnumSet<GatewayIntent> intents = EnumSet.of(
        // We need messages in guilds to accept commands from users
        GatewayIntent.GUILD_MESSAGES,
        // We need voice states to connect to the voice channel
        GatewayIntent.GUILD_VOICE_STATES
    );

    // Start the JDA session with light mode (minimal cache)
    JDABuilder.createLight(token, intents)           // Use provided token from command line arguments
         .addEventListeners(new AudioEchoExample())  // Start listening with this listener
         .setActivity(Activity.listening("to jams")) // Inform users that we are jammin' it out
         .setStatus(OnlineStatus.DO_NOT_DISTURB)     // Please don't disturb us while we're jammin'
         .enableCache(CacheFlag.VOICE_STATE)         // Enable the VOICE_STATE cache to find a user's connected voice channel
         .build();                                   // Login with these options
}
 
示例2
private void createGuildEmotePass(GuildImpl guildObj, DataArray array)
{
    if (!getJDA().isCacheFlagSet(CacheFlag.EMOTE))
        return;
    SnowflakeCacheViewImpl<Emote> emoteView = guildObj.getEmotesView();
    try (UnlockHook hook = emoteView.writeLock())
    {
        TLongObjectMap<Emote> emoteMap = emoteView.getMap();
        for (int i = 0; i < array.length(); i++)
        {
            DataObject object = array.getObject(i);
            if (object.isNull("id"))
            {
                LOG.error("Received GUILD_CREATE with an emoji with a null ID. JSON: {}", object);
                continue;
            }
            final long emoteId = object.getLong("id");
            emoteMap.put(emoteId, createEmote(guildObj, object, false));
        }
    }
}
 
示例3
@Nullable
public PermissionOverride createPermissionOverride(DataObject override, AbstractChannelImpl<?, ?> chan)
{
    String type = override.getString("type");
    final long id = override.getLong("id");
    boolean role = type.equals("role");
    if (role && chan.getGuild().getRoleById(id) == null)
        throw new NoSuchElementException("Attempted to create a PermissionOverride for a non-existent role! JSON: " + override);
    if (!role && !type.equals("member"))
        throw new IllegalArgumentException("Provided with an unknown PermissionOverride type! JSON: " + override);
    if (!role && id != api.getSelfUser().getIdLong() && !api.isCacheFlagSet(CacheFlag.MEMBER_OVERRIDES))
        return null;

    long allow = override.getLong("allow");
    long deny = override.getLong("deny");

    PermissionOverrideImpl permOverride = (PermissionOverrideImpl) chan.getOverrideMap().get(id);
    if (permOverride == null)
    {
        permOverride = new PermissionOverrideImpl(chan, id, role);
        chan.getOverrideMap().put(id, permOverride);
    }

    return permOverride.setAllow(allow).setDeny(deny);
}
 
示例4
private DefaultShardManagerBuilder applyDefault()
{
    return this.setMemberCachePolicy(MemberCachePolicy.DEFAULT)
               .setChunkingFilter(ChunkingFilter.NONE)
               .disableCache(CacheFlag.CLIENT_STATUS, CacheFlag.ACTIVITY)
               .setLargeThreshold(250);
}
 
示例5
private DefaultShardManagerBuilder applyLight()
{
    return this.setMemberCachePolicy(MemberCachePolicy.NONE)
               .setChunkingFilter(ChunkingFilter.NONE)
               .disableCache(EnumSet.allOf(CacheFlag.class))
               .setLargeThreshold(50);
}
 
示例6
private DefaultShardManagerBuilder applyIntents()
{
    EnumSet<CacheFlag> disabledCache = EnumSet.allOf(CacheFlag.class);
    for (CacheFlag flag : CacheFlag.values())
    {
        GatewayIntent requiredIntent = flag.getRequiredIntent();
        if (requiredIntent == null || (requiredIntent.getRawValue() & intents) != 0)
            disabledCache.remove(flag);
    }

    boolean enableMembers = (intents & GatewayIntent.GUILD_MEMBERS.getRawValue()) != 0;
    return setChunkingFilter(enableMembers ? ChunkingFilter.ALL : ChunkingFilter.NONE)
            .setMemberCachePolicy(enableMembers ? MemberCachePolicy.ALL : MemberCachePolicy.DEFAULT)
            .setDisabledCache(disabledCache);
}
 
示例7
private void checkIntents()
{
    boolean membersIntent = (intents & GatewayIntent.GUILD_MEMBERS.getRawValue()) != 0;
    if (!membersIntent && memberCachePolicy == MemberCachePolicy.ALL)
        throw new IllegalStateException("Cannot use MemberCachePolicy.ALL without GatewayIntent.GUILD_MEMBERS enabled!");
    else if (!membersIntent && chunkingFilter != ChunkingFilter.NONE)
        DefaultShardManager.LOG.warn("Member chunking is disabled due to missing GUILD_MEMBERS intent.");

    if (!automaticallyDisabled.isEmpty())
    {
        JDAImpl.LOG.warn("Automatically disabled CacheFlags due to missing intents");
        // List each missing intent
        automaticallyDisabled.stream()
            .map(it -> "Disabled CacheFlag." + it + " (missing GatewayIntent." + it.getRequiredIntent() + ")")
            .forEach(JDAImpl.LOG::warn);

        // Tell user how to disable this warning
        JDAImpl.LOG.warn("You can manually disable these flags to remove this warning by using disableCache({}) on your DefaultShardManagerBuilder",
            automaticallyDisabled.stream()
                    .map(it -> "CacheFlag." + it)
                    .collect(Collectors.joining(", ")));
        // Only print this warning once
        automaticallyDisabled.clear();
    }

    if (cacheFlags.isEmpty())
        return;

    EnumSet<GatewayIntent> providedIntents = GatewayIntent.getIntents(intents);
    for (CacheFlag flag : cacheFlags)
    {
        GatewayIntent intent = flag.getRequiredIntent();
        if (intent != null && !providedIntents.contains(intent))
            throw new IllegalArgumentException("Cannot use CacheFlag." + flag + " without GatewayIntent." + intent + "!");
    }
}
 
示例8
private JDABuilder applyDefault()
{
    return this.setMemberCachePolicy(MemberCachePolicy.DEFAULT)
               .setChunkingFilter(ChunkingFilter.NONE)
               .disableCache(CacheFlag.CLIENT_STATUS, CacheFlag.ACTIVITY)
               .setLargeThreshold(250);
}
 
示例9
private JDABuilder applyLight()
{
    return this.setMemberCachePolicy(MemberCachePolicy.NONE)
               .setChunkingFilter(ChunkingFilter.NONE)
               .disableCache(EnumSet.allOf(CacheFlag.class))
               .setLargeThreshold(50);
}
 
示例10
private JDABuilder applyIntents()
{
    EnumSet<CacheFlag> disabledCache = EnumSet.allOf(CacheFlag.class);
    for (CacheFlag flag : CacheFlag.values())
    {
        GatewayIntent requiredIntent = flag.getRequiredIntent();
        if (requiredIntent == null || (requiredIntent.getRawValue() & intents) != 0)
            disabledCache.remove(flag);
    }

    boolean enableMembers = (intents & GatewayIntent.GUILD_MEMBERS.getRawValue()) != 0;
    return setChunkingFilter(enableMembers ? ChunkingFilter.ALL : ChunkingFilter.NONE)
            .setMemberCachePolicy(enableMembers ? MemberCachePolicy.ALL : MemberCachePolicy.DEFAULT)
            .setDisabledCache(disabledCache);
}
 
示例11
private void checkIntents()
{
    boolean membersIntent = (intents & GatewayIntent.GUILD_MEMBERS.getRawValue()) != 0;
    if (!membersIntent && memberCachePolicy == MemberCachePolicy.ALL)
        throw new IllegalStateException("Cannot use MemberCachePolicy.ALL without GatewayIntent.GUILD_MEMBERS enabled!");
    else if (!membersIntent && chunkingFilter != ChunkingFilter.NONE)
        JDAImpl.LOG.warn("Member chunking is disabled due to missing GUILD_MEMBERS intent.");

    if (!automaticallyDisabled.isEmpty())
    {
        JDAImpl.LOG.warn("Automatically disabled CacheFlags due to missing intents");
        // List each missing intent
        automaticallyDisabled.stream()
            .map(it -> "Disabled CacheFlag." + it + " (missing GatewayIntent." + it.getRequiredIntent() + ")")
            .forEach(JDAImpl.LOG::warn);

        // Tell user how to disable this warning
        JDAImpl.LOG.warn("You can manually disable these flags to remove this warning by using disableCache({}) on your JDABuilder",
            automaticallyDisabled.stream()
                .map(it -> "CacheFlag." + it)
                .collect(Collectors.joining(", ")));
        // Only print this warning once
        automaticallyDisabled.clear();
    }

    if (cacheFlags.isEmpty())
        return;

    EnumSet<GatewayIntent> providedIntents = GatewayIntent.getIntents(intents);
    for (CacheFlag flag : cacheFlags)
    {
        GatewayIntent intent = flag.getRequiredIntent();
        if (intent != null && !providedIntents.contains(intent))
            throw new IllegalArgumentException("Cannot use CacheFlag." + flag + " without GatewayIntent." + intent + "!");
    }
}
 
示例12
public MetaConfig(
        int maxBufferSize,
        @Nullable ConcurrentMap<String, String> mdcContextMap,
        @Nullable EnumSet<CacheFlag> cacheFlags, EnumSet<ConfigFlag> flags)
{
    this.maxBufferSize = maxBufferSize;
    this.cacheFlags = cacheFlags == null ? EnumSet.allOf(CacheFlag.class) : cacheFlags;
    this.enableMDC = flags.contains(ConfigFlag.MDC_CONTEXT);
    if (enableMDC)
        this.mdcContextMap = mdcContextMap == null ? new ConcurrentHashMap<>() : null;
    else
        this.mdcContextMap = null;
    this.useShutdownHook = flags.contains(ConfigFlag.SHUTDOWN_HOOK);
}
 
示例13
public ShardingMetaConfig(
    int maxBufferSize,
    @Nullable IntFunction<? extends ConcurrentMap<String, String>> contextProvider,
    @Nullable EnumSet<CacheFlag> cacheFlags, EnumSet<ConfigFlag> flags, Compression compression)
{
    super(maxBufferSize, null, cacheFlags, flags);

    this.compression = compression;
    this.contextProvider = contextProvider;
}
 
示例14
public MemberImpl(GuildImpl guild, User user)
{
    this.api = (JDAImpl) user.getJDA();
    this.guild = new SnowflakeReference<>(guild, api::getGuildById);
    this.user = user;
    this.joinDate = 0;
    boolean cacheState = api.isCacheFlagSet(CacheFlag.VOICE_STATE) || user.equals(api.getSelfUser());
    boolean cacheOnline = api.isCacheFlagSet(CacheFlag.CLIENT_STATUS);
    this.voiceState = cacheState ? new GuildVoiceStateImpl(this) : null;
    this.clientStatus = cacheOnline ? Collections.synchronizedMap(new EnumMap<>(ClientType.class)) : null;
}
 
示例15
private SkyBot() throws Exception {
        // Set our animated emotes as default reactions
        MessageUtils.setErrorReaction("a:_no:577795484060483584");
        MessageUtils.setSuccessReaction("a:_yes:577795293546938369");

        // Load in our container
        final Variables variables = new Variables();
        final DunctebotConfig config = variables.getConfig();
        final CommandManager commandManager = variables.getCommandManager();
        final Logger logger = LoggerFactory.getLogger(SkyBot.class);

        // Set the user-agent of the bot
        WebUtils.setUserAgent("Mozilla/5.0 (compatible; SkyBot/" + Settings.VERSION + "; +https://dunctebot.com;)");
        EmbedUtils.setEmbedBuilder(
            () -> new EmbedBuilder()
                .setColor(Settings.DEFAULT_COLOUR)
//                .setFooter("DuncteBot", Settings.DEFAULT_ICON)
//                .setTimestamp(Instant.now())
        );

        Settings.PREFIX = config.discord.prefix;

        // Set some defaults for rest-actions
        RestAction.setPassContext(true);
        RestAction.setDefaultFailure(ignore(UNKNOWN_MESSAGE));
        // If any rest-action doesn't get executed within 2 minutes we will mark it as failed
        RestAction.setDefaultTimeout(2L, TimeUnit.MINUTES);

        if (variables.useApi()) {
            logger.info(TextColor.GREEN + "Using api for all connections" + TextColor.RESET);
        } else {
            logger.warn("Using SQLite as the database");
            logger.warn("Please note that is is not recommended for production");
        }

        //Load the settings before loading the bot
        GuildSettingsUtils.loadAllSettings(variables);

        //Set the token to a string
        final String token = config.discord.token;

        //But this time we are going to shard it
        final int totalShards = config.discord.totalShards;

        this.activityProvider = (shardId) -> Activity.playing(
            config.discord.prefix + "help | Shard " + (shardId + 1)
        );

        final LongLongPair commandCount = commandManager.getCommandCount();

        logger.info("{} commands with {} aliases loaded.", commandCount.getFirst(), commandCount.getSecond());
        LavalinkManager.ins.start(config, variables.getAudioUtils());

        final EventManager eventManager = new EventManager(variables);
        // Build our shard manager
        final DefaultShardManagerBuilder builder = DefaultShardManagerBuilder.create(
            GatewayIntent.GUILD_MEMBERS,
            GatewayIntent.GUILD_BANS,
            GatewayIntent.GUILD_EMOJIS,
            GatewayIntent.GUILD_VOICE_STATES,
            GatewayIntent.GUILD_MESSAGES
        )
            .setToken(token)
            .setShardsTotal(totalShards)
            .setActivityProvider(this.activityProvider)
            .setBulkDeleteSplittingEnabled(false)
            .setEventManagerProvider((id) -> eventManager)
            // Keep guild owners, voice members and patrons in cache
            .setMemberCachePolicy(MemberCachePolicy.DEFAULT.or(PATRON_POLICY))
//            .setMemberCachePolicy(MemberCachePolicy.NONE)
            // Enable lazy loading
            .setChunkingFilter(ChunkingFilter.NONE)
            // Enable lazy loading for guilds other than our own
//            .setChunkingFilter((guildId) -> guildId == Settings.SUPPORT_GUILD_ID)
            .enableCache(CacheFlag.VOICE_STATE, CacheFlag.EMOTE, CacheFlag.MEMBER_OVERRIDES)
            .disableCache(CacheFlag.ACTIVITY, CacheFlag.CLIENT_STATUS)
            .setHttpClientBuilder(
                new OkHttpClient.Builder()
                    .connectTimeout(30L, TimeUnit.SECONDS)
                    .readTimeout(30L, TimeUnit.SECONDS)
                    .writeTimeout(30L, TimeUnit.SECONDS)
            );

        this.startGameTimer();

        // If lavalink is enabled we will hook it into jda
        if (LavalinkManager.ins.isEnabled()) {
            builder.setVoiceDispatchInterceptor(LavalinkManager.ins.getLavalink().getVoiceInterceptor());
        }

        this.shardManager = builder.build();

        HelpEmbeds.init(commandManager);

        // Load the web server if we are not running "locally"
        // TODO: change this config value to "web_server" or something
        if (!config.discord.local) {
            webRouter = new WebRouter(shardManager, variables);
        }
    }
 
示例16
private DefaultShardManagerBuilder setDisabledCache(EnumSet<CacheFlag> flags)
{
    this.disableCache(flags);
    this.automaticallyDisabled.addAll(flags);
    return this;
}
 
示例17
private JDABuilder setDisabledCache(EnumSet<CacheFlag> flags)
{
    disableCache(flags);
    this.automaticallyDisabled.addAll(flags);
    return this;
}
 
示例18
@Override
protected Long handleInternally(DataObject content)
{
    // Ignore events for relationships, presences are guild only to us
    if (content.isNull("guild_id"))
    {
        log.debug("Received PRESENCE_UPDATE without guild_id. Ignoring event.");
        return null;
    }

    //Do a pre-check to see if this is for a Guild, and if it is, if the guild is currently locked or not cached.
    final long guildId = content.getLong("guild_id");
    if (getJDA().getGuildSetupController().isLocked(guildId))
        return guildId;
    GuildImpl guild = (GuildImpl) getJDA().getGuildById(guildId);
    if (guild == null)
    {
        getJDA().getEventCache().cache(EventCache.Type.GUILD, guildId, responseNumber, allContent, this::handle);
        EventCache.LOG.debug("Received a PRESENCE_UPDATE for a guild that is not yet cached! GuildId:{} UserId: {}",
                             guildId, content.getObject("user").get("id"));
        return null;
    }

    DataObject jsonUser = content.getObject("user");
    final long userId = jsonUser.getLong("id");
    UserImpl user = (UserImpl) getJDA().getUsersView().get(userId);

    // The user is not yet known to us, maybe due to lazy loading. Try creating it.
    if (user == null)
    {
        // If this presence update doesn't have a user or the status is offline we ignore it
        if (jsonUser.isNull("username") || "offline".equals(content.get("status")))
            return null;
        // We should have somewhat enough information to create this member, so lets do it!
        user = (UserImpl) createMember(content, guildId, guild, jsonUser).getUser();
    }

    if (jsonUser.hasKey("username"))
    {
        // username implies this is an update to a user - fire events and update properties
        getJDA().getEntityBuilder().updateUser(user, jsonUser);
    }

    //Now that we've update the User's info, lets see if we need to set the specific Presence information.
    // This is stored in the Member objects.
    //We set the activities to null to prevent parsing if the cache was disabled
    final DataArray activityArray = !getJDA().isCacheFlagSet(CacheFlag.ACTIVITY) || content.isNull("activities") ? null : content.getArray("activities");
    List<Activity> newActivities = new ArrayList<>();
    boolean parsedActivity = parseActivities(userId, activityArray, newActivities);

    MemberImpl member = (MemberImpl) guild.getMember(user);
    //Create member from presence if not offline
    if (member == null)
    {
        if (jsonUser.isNull("username") || "offline".equals(content.get("status")))
        {
            log.trace("Ignoring incomplete PRESENCE_UPDATE for member with id {} in guild with id {}", userId, guildId);
            return null;
        }
        member = createMember(content, guildId, guild, jsonUser);
    }

    if (getJDA().isCacheFlagSet(CacheFlag.CLIENT_STATUS) && !content.isNull("client_status"))
        handleClientStatus(content, member);

    // Check if activities changed
    if (parsedActivity)
        handleActivities(newActivities, member);

    //The member is already cached, so modify the presence values and fire events as needed.
    OnlineStatus status = OnlineStatus.fromKey(content.getString("status"));
    if (!member.getOnlineStatus().equals(status))
    {
        OnlineStatus oldStatus = member.getOnlineStatus();
        member.setOnlineStatus(status);
        getJDA().getEntityBuilder().updateMemberCache(member);
        getJDA().handleEvent(
            new UserUpdateOnlineStatusEvent(
                getJDA(), responseNumber,
                member, oldStatus));
    }
    return null;
}
 
示例19
public boolean isCacheFlagSet(CacheFlag flag)
{
    return metaConfig.getCacheFlags().contains(flag);
}
 
示例20
@Nonnull
public EnumSet<CacheFlag> getCacheFlags()
{
    return cacheFlags;
}
 
示例21
public void createPresence(MemberImpl member, DataObject presenceJson)
{
    if (member == null)
        throw new NullPointerException("Provided member was null!");
    boolean cacheGame = getJDA().isCacheFlagSet(CacheFlag.ACTIVITY);
    boolean cacheStatus = getJDA().isCacheFlagSet(CacheFlag.CLIENT_STATUS);

    DataArray activityArray = !cacheGame || presenceJson.isNull("activities") ? null : presenceJson.getArray("activities");
    DataObject clientStatusJson = !cacheStatus || presenceJson.isNull("client_status") ? null : presenceJson.getObject("client_status");
    OnlineStatus onlineStatus = OnlineStatus.fromKey(presenceJson.getString("status"));
    List<Activity> activities = new ArrayList<>();
    boolean parsedActivity = false;

    if (cacheGame && activityArray != null)
    {
        for (int i = 0; i < activityArray.length(); i++)
        {
            try
            {
                activities.add(createActivity(activityArray.getObject(i)));
                parsedActivity = true;
            }
            catch (Exception ex)
            {
                String userId;
                userId = member.getUser().getId();
                if (LOG.isDebugEnabled())
                    LOG.warn("Encountered exception trying to parse a presence! UserId: {} JSON: {}", userId, activityArray, ex);
                else
                    LOG.warn("Encountered exception trying to parse a presence! UserId: {} Message: {} Enable debug for details", userId, ex.getMessage());
            }
        }
    }
    if (cacheGame && parsedActivity)
        member.setActivities(activities);
    member.setOnlineStatus(onlineStatus);
    if (clientStatusJson != null)
    {
        for (String key : clientStatusJson.keys())
        {
            ClientType type = ClientType.fromKey(key);
            OnlineStatus status = OnlineStatus.fromKey(clientStatusJson.getString(key));
            member.setOnlineStatus(type, status);
        }
    }
}
 
示例22
/**
 * Flags used to enable parts of the JDA cache to reduce the runtime memory footprint.
 * <br><b>It is highly recommended to use {@link #setDisabledCacheFlags(EnumSet)} instead
 * for backwards compatibility</b>. We might add more flags in the future which you then effectively disable
 * when updating and not changing your setting here.
 *
 * @param  flags
 *         EnumSet containing the flags for cache services that should be <b>enabled</b>
 *
 * @return The DefaultShardManagerBuilder instance. Useful for chaining.
 *
 * @deprecated We add CacheFlags to the enum over time which will be disabled when using this method.
 *             This introduces breaking changes due to the way the setter works.
 *             You should use {@link #enableCache(Collection)} and {@link #disableCache(Collection)} instead,
 *             to disable and enable cache flags without side-effects that may break in future versions.
 */
@Nonnull
@Deprecated
@ReplaceWith("enableCache(flags) and disableCache(flags)")
@DeprecatedSince("4.2.0")
public DefaultShardManagerBuilder setEnabledCacheFlags(@Nullable EnumSet<CacheFlag> flags)
{
    this.cacheFlags = flags == null ? EnumSet.noneOf(CacheFlag.class) : EnumSet.copyOf(flags);
    return this;
}
 
示例23
/**
 * Enable specific cache flags.
 * <br>This will not disable any currently set cache flags.
 *
 * @param  flags
 *         The {@link CacheFlag CacheFlags} to enable
 *
 * @throws IllegalArgumentException
 *         If provided with null
 *
 * @return The DefaultShardManagerBuilder instance. Useful for chaining.
 *
 * @see    #enableCache(CacheFlag, CacheFlag...)
 * @see    #disableCache(Collection)
 */
@Nonnull
public DefaultShardManagerBuilder enableCache(@Nonnull Collection<CacheFlag> flags)
{
    Checks.noneNull(flags, "CacheFlags");
    cacheFlags.addAll(flags);
    return this;
}
 
示例24
/**
 * Enable specific cache flags.
 * <br>This will not disable any currently set cache flags.
 *
 * @param  flag
 *         {@link CacheFlag} to enable
 * @param  flags
 *         Other flags to enable
 *
 * @throws IllegalArgumentException
 *         If provided with null
 *
 * @return The DefaultShardManagerBuilder instance. Useful for chaining.
 *
 * @see    #enableCache(Collection)
 * @see    #disableCache(CacheFlag, CacheFlag...)
 */
@Nonnull
public DefaultShardManagerBuilder enableCache(@Nonnull CacheFlag flag, @Nonnull CacheFlag... flags)
{
    Checks.notNull(flag, "CacheFlag");
    Checks.noneNull(flags, "CacheFlag");
    cacheFlags.addAll(EnumSet.of(flag, flags));
    return this;
}
 
示例25
/**
 * Flags used to disable parts of the JDA cache to reduce the runtime memory footprint.
 * <br>Shortcut for {@code setEnabledCacheFlags(EnumSet.complementOf(flags))}
 *
 * @param  flags
 *         EnumSet containing the flags for cache services that should be <b>disabled</b>
 *
 * @return The DefaultShardManagerBuilder instance. Useful for chaining.
 *
 * @deprecated We add CacheFlags to the enum over time which will be disabled when using this method.
 *             This introduces breaking changes due to the way the setter works.
 *             You should use {@link #enableCache(Collection)} and {@link #disableCache(Collection)} instead,
 *             to disable and enable cache flags without side-effects that may break in future versions.
 */
@Nonnull
@Deprecated
@ReplaceWith("enableCache(flags) and disableCache(flags)")
@DeprecatedSince("4.2.0")
public DefaultShardManagerBuilder setDisabledCacheFlags(@Nullable EnumSet<CacheFlag> flags)
{
    return setEnabledCacheFlags(flags == null ? EnumSet.allOf(CacheFlag.class) : EnumSet.complementOf(flags));
}
 
示例26
/**
 * Disable specific cache flags.
 * <br>This will not enable any currently unset cache flags.
 *
 * @param  flags
 *         The {@link CacheFlag CacheFlags} to disable
 *
 * @throws IllegalArgumentException
 *         If provided with null
 *
 * @return The DefaultShardManagerBuilder instance. Useful for chaining.
 *
 * @see    #disableCache(CacheFlag, CacheFlag...)
 * @see    #enableCache(Collection)
 */
@Nonnull
public DefaultShardManagerBuilder disableCache(@Nonnull Collection<CacheFlag> flags)
{
    Checks.noneNull(flags, "CacheFlags");
    automaticallyDisabled.removeAll(flags);
    cacheFlags.removeAll(flags);
    return this;
}
 
示例27
/**
 * Disable specific cache flags.
 * <br>This will not enable any currently unset cache flags.
 *
 * @param  flag
 *         {@link CacheFlag} to disable
 * @param  flags
 *         Other flags to disable
 *
 * @throws IllegalArgumentException
 *         If provided with null
 *
 * @return The DefaultShardManagerBuilder instance. Useful for chaining.
 *
 * @see    #disableCache(Collection)
 * @see    #enableCache(CacheFlag, CacheFlag...)
 */
@Nonnull
public DefaultShardManagerBuilder disableCache(@Nonnull CacheFlag flag, @Nonnull CacheFlag... flags)
{
    Checks.notNull(flag, "CacheFlag");
    Checks.noneNull(flags, "CacheFlag");
    return disableCache(EnumSet.of(flag, flags));
}
 
示例28
/**
 * Flags used to enable selective parts of the JDA cache to reduce the runtime memory footprint.
 * <br><b>It is highly recommended to use {@link #setDisabledCacheFlags(EnumSet)} instead
 * for backwards compatibility</b>. We might add more flags in the future which you then effectively disable
 * when updating and not changing your setting here.
 *
 * @param  flags
 *         EnumSet containing the flags for cache services that should be <b>enabled</b>
 *
 * @return The JDABuilder instance. Useful for chaining.
 *
 * @see    #setDisabledCacheFlags(EnumSet)
 *
 * @deprecated We add CacheFlags to the enum over time which will be disabled when using this method.
 *             This introduces breaking changes due to the way the setter works.
 *             You should use {@link #enableCache(Collection)} and {@link #disableCache(Collection)} instead,
 *             to disable and enable cache flags without side-effects that may break in future versions.
 */
@Nonnull
@Deprecated
@ReplaceWith("enableCache(flags) and disableCache(flags)")
@DeprecatedSince("4.2.0")
public JDABuilder setEnabledCacheFlags(@Nullable EnumSet<CacheFlag> flags)
{
    this.cacheFlags = flags == null ? EnumSet.noneOf(CacheFlag.class) : EnumSet.copyOf(flags);
    return this;
}
 
示例29
/**
 * Enable specific cache flags.
 * <br>This will not disable any currently set cache flags.
 *
 * @param  flags
 *         The {@link CacheFlag CacheFlags} to enable
 *
 * @throws IllegalArgumentException
 *         If provided with null
 *
 * @return The JDABuilder instance. Useful for chaining.
 *
 * @see    #enableCache(CacheFlag, CacheFlag...) 
 * @see    #disableCache(Collection)
 */
@Nonnull
public JDABuilder enableCache(@Nonnull Collection<CacheFlag> flags)
{
    Checks.noneNull(flags, "CacheFlags");
    cacheFlags.addAll(flags);
    return this;
}
 
示例30
/**
 * Enable specific cache flags.
 * <br>This will not disable any currently set cache flags.
 *
 * @param  flag
 *         {@link CacheFlag} to enable
 * @param  flags
 *         Other flags to enable
 *
 * @throws IllegalArgumentException
 *         If provided with null
 *
 * @return The JDABuilder instance. Useful for chaining.
 *
 * @see    #enableCache(Collection) 
 * @see    #disableCache(CacheFlag, CacheFlag...)
 */
@Nonnull
public JDABuilder enableCache(@Nonnull CacheFlag flag, @Nonnull CacheFlag... flags)
{
    Checks.notNull(flag, "CacheFlag");
    Checks.noneNull(flags, "CacheFlag");
    cacheFlags.addAll(EnumSet.of(flag, flags));
    return this;
}