Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/discord-jda/JDA/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The JDABuilder class is the primary way to create and configure JDA instances. It uses the builder pattern to provide a fluent API for configuration.

Builder Presets

JDA provides three builder presets to match common use cases:

createDefault()

Recommended for most bots. Provides balanced caching and event access.
JDA jda = JDABuilder.createDefault(token)
    .addEventListeners(new MyListener())
    .build();
Configuration:
  • Uses GatewayIntent.DEFAULT intents
  • MemberCachePolicy.DEFAULT (caches voice members)
  • ChunkingFilter.NONE (no member chunking)
  • Disables CacheFlag.ACTIVITY and CacheFlag.CLIENT_STATUS

createLight()

Minimal caching and resource usage. Best for lightweight bots.
JDA jda = JDABuilder.createLight(token, EnumSet.of(
        GatewayIntent.GUILD_MESSAGES,
        GatewayIntent.MESSAGE_CONTENT
    ))
    .addEventListeners(new MyListener())
    .build();
Configuration:
  • You specify which intents to enable
  • MemberCachePolicy.NONE (no member caching)
  • ChunkingFilter.NONE
  • Disables all cache flags

create()

Maximum caching. Use when you need access to all guild members.
JDA jda = JDABuilder.create(token, EnumSet.of(
        GatewayIntent.GUILDS,
        GatewayIntent.GUILD_MEMBERS,
        GatewayIntent.GUILD_MESSAGES,
        GatewayIntent.MESSAGE_CONTENT
    ))
    .addEventListeners(new MyListener())
    .build();
Configuration:
  • You specify which intents to enable (typically all you need)
  • MemberCachePolicy.ALL (caches all members)
  • ChunkingFilter.ALL (requests all members)
  • Enables all cache flags
Using create() requires the privileged GUILD_MEMBERS intent to be enabled in your Discord Developer Portal.

Common Configuration

Event Listeners

Add event listeners to handle Discord events:
JDABuilder.createDefault(token)
    .addEventListeners(new MessageListener())
    .addEventListeners(new ReactionListener(), new VoiceListener())
    .build();

Gateway Intents

Control which events your bot receives:
JDABuilder.createDefault(token)
    // Enable additional intents
    .enableIntents(GatewayIntent.MESSAGE_CONTENT, GatewayIntent.GUILD_MEMBERS)
    // Disable intents you don't need
    .disableIntents(GatewayIntent.GUILD_MESSAGE_TYPING)
    .build();

Cache Configuration

Control what JDA caches in memory:
JDABuilder.createDefault(token)
    // Enable specific cache flags
    .enableCache(CacheFlag.VOICE_STATE, CacheFlag.EMOJI)
    // Disable flags you don't need
    .disableCache(CacheFlag.ACTIVITY, CacheFlag.CLIENT_STATUS)
    // Set member cache policy
    .setMemberCachePolicy(MemberCachePolicy.VOICE)
    .build();

Presence and Status

Set your bot’s presence:
JDABuilder.createDefault(token)
    .setActivity(Activity.playing("with Java"))
    .setStatus(OnlineStatus.ONLINE)
    .build();

Thread Pools

Customize thread pool configuration for advanced use cases:
ScheduledExecutorService pool = Executors.newScheduledThreadPool(10);

JDABuilder.createDefault(token)
    .setCallbackPool(pool)
    .setGatewayPool(pool)
    .build();

Complete Example

import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Activity;
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 java.util.EnumSet;

public class MyBot {
    public static void main(String[] args) throws InterruptedException {
        String token = System.getenv("BOT_TOKEN");
        
        JDA jda = JDABuilder.createDefault(token)
            // Enable intents
            .enableIntents(
                GatewayIntent.MESSAGE_CONTENT,
                GatewayIntent.GUILD_MEMBERS
            )
            // Configure caching
            .setMemberCachePolicy(MemberCachePolicy.ALL)
            .setChunkingFilter(ChunkingFilter.ALL)
            .enableCache(CacheFlag.VOICE_STATE)
            // Set presence
            .setActivity(Activity.playing("with JDA"))
            // Add listeners
            .addEventListeners(new MyEventListener())
            // Build
            .build();
        
        // Wait for JDA to be ready
        jda.awaitReady();
        
        System.out.println("Bot is ready!");
    }
}

Build docs developers (and LLMs) love