[AB-xxx] making intents, cache policies, and cache flags configurable

This commit is contained in:
Sheldan
2024-05-18 18:22:04 +02:00
parent c5136a1808
commit 4991ad8f1c

View File

@@ -6,20 +6,24 @@ import dev.sheldan.abstracto.core.models.SystemInfo;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.requests.GatewayIntent;
import net.dv8tion.jda.api.utils.ChunkingFilter;
import net.dv8tion.jda.api.utils.MemberCachePolicy;
import net.dv8tion.jda.api.utils.cache.CacheFlag;
import net.dv8tion.jda.internal.utils.IOUtil;
import okhttp3.OkHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.time.Duration;
import java.time.Instant;
import static net.dv8tion.jda.api.requests.GatewayIntent.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
@@ -33,20 +37,50 @@ public class BotServiceBean implements BotService {
@Autowired
private OkHttpLogger okHttpLogger;
@Value("${abstracto.intents:GUILD_VOICE_STATES,GUILD_MODERATION,MESSAGE_CONTENT,GUILD_EMOJIS_AND_STICKERS,GUILD_MEMBERS,GUILD_MESSAGES,GUILD_MESSAGE_REACTIONS,DIRECT_MESSAGES,GUILD_PRESENCES}")
private String[] intents;
@Value("${abstracto.cacheFlags:ACTIVITY,ONLINE_STATUS,VOICE_STATE}")
private String[] cacheFlags;
@Value("${abstracto.memberCachePolicy:ALL}")
private String memberCachePolicy;
private static final Map<String, MemberCachePolicy> POSSIBLE_MEMBER_CACHE_POLICIES = new HashMap<>();
static {
POSSIBLE_MEMBER_CACHE_POLICIES.put("ALL", MemberCachePolicy.ALL);
POSSIBLE_MEMBER_CACHE_POLICIES.put("NONE", MemberCachePolicy.NONE);
POSSIBLE_MEMBER_CACHE_POLICIES.put("OWNER", MemberCachePolicy.OWNER);
POSSIBLE_MEMBER_CACHE_POLICIES.put("ONLINE", MemberCachePolicy.ONLINE);
POSSIBLE_MEMBER_CACHE_POLICIES.put("VOICE", MemberCachePolicy.VOICE);
POSSIBLE_MEMBER_CACHE_POLICIES.put("BOOSTER", MemberCachePolicy.BOOSTER);
POSSIBLE_MEMBER_CACHE_POLICIES.put("PENDING", MemberCachePolicy.PENDING);
POSSIBLE_MEMBER_CACHE_POLICIES.put("DEFAULT", MemberCachePolicy.DEFAULT);
}
@Override
public void login() {
JDABuilder builder = JDABuilder.createDefault(System.getenv("TOKEN"));
builder.enableIntents(GUILD_VOICE_STATES, GUILD_BANS, MESSAGE_CONTENT,
GUILD_EMOJIS_AND_STICKERS, GUILD_MEMBERS, GUILD_MESSAGES,
GUILD_MESSAGE_REACTIONS, DIRECT_MESSAGES, GUILD_PRESENCES);
builder.enableCache(CacheFlag.ACTIVITY);
builder.enableCache(CacheFlag.ONLINE_STATUS);
builder.enableCache(CacheFlag.VOICE_STATE);
List<GatewayIntent> intentsToEnable = Arrays.stream(intents)
.map(GatewayIntent::valueOf)
.toList();
builder.enableIntents(intentsToEnable);
List<CacheFlag> cacheFlagsToUse = Arrays.stream(cacheFlags)
.map(CacheFlag::valueOf)
.toList();
builder.enableCache(cacheFlagsToUse);
MemberCachePolicy chosenMemberCachePolicy = POSSIBLE_MEMBER_CACHE_POLICIES.get(memberCachePolicy);
builder.setMemberCachePolicy(chosenMemberCachePolicy);
builder.setChunkingFilter(ChunkingFilter.ALL);
builder.setBulkDeleteSplittingEnabled(false);
builder.setMemberCachePolicy(MemberCachePolicy.ALL);
OkHttpClient.Builder defaultBuilder = IOUtil.newHttpClientBuilder();
defaultBuilder.addInterceptor(okHttpMetrics);
defaultBuilder.addInterceptor(okHttpLogger);