Skip to content

Releases: discord-jda/JDA

v6.5.0 | Message Search API

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 05 Jul 16:59
d89f24a

Overview

This release adds support for the Message Search API, which allows bots to search messages in a guild. See Guild#searchMessages and MessageSearchAction for detailed documentation.

Example:

guild.searchMessages()
     .attachmentFilenames("cat.png")
     .includeAuthorTypes(MessageSearchAction.AuthorType.USER)
     .queue(response -> {
         if (response.isNotReady()) {
             int retryAfter = response.asNotReady().getRetryAfter();
             event.reply("The server is still indexing messages, try again later").queue();
             return;
         }

         List<Message> messages = response.asResults().getMessages();
         event.reply("Found %s messages of cats!".formatted(messages.size())).queue();
     });

Additionally, we made a minor change in the handling for received messages. For messages received in guilds JDA now handles events with missing member objects, which is necessary to handle messages that arrive shortly after a user is banned from the guild. These messages will contain members which are not added to cache and have no roles.

New Features

Changes

Full Changelog: v6.4.2...v6.5.0

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.5.0")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.5.0</version> 
</dependency>

v6.4.2

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 06 Jun 11:58
559e5ac

New Features

  • Add attachment flags, embed flags and fields, and, media flags by @freya022 in #3081
  • Add missing NO_MUTUAL_GUILDS ErrorResponse by @srnyx in #3083
  • Add ErrorResponse#CANNOT_FORWARD_UNREADABLE_MESSAGE by @freya022 in #3087

Changes

  • Improve error messages caused by entities relying on the cache to find themselves by @freya022 in #3067
  • Component options: Prevent setting an out-of-range number of default values by @freya022 in #3068
  • Fix deserialization of components without unfurled media by @freya022 in #3078

Bug Fixes

Full Changelog: v6.4.1...v6.4.2

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.4.2")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.4.2</version> 
</dependency>

v6.4.1

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 02 Apr 19:06
2cda370

Bug Fixes

  • Fixed CheckboxGroup.Builder.setRequiredRange() incorrectly setting min and max by @replaceitem in #3065
  • Fix getCommandType reading value of interaction type instead of command type by @freya022 in #3074

Full Changelog: v6.4.0...v6.4.1

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.4.1")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.4.1</version> 
</dependency>

v6.4.0 | Checkboxes

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 28 Mar 15:00
7c09b43

Overview

This release adds support for new checkbox and radio groups in modals as well as support for voice channel effects and soundboards.

Warning

All animated assets now use .webp by default instead of .gif.

Checkboxes and Radio Groups (#3010)

You can now include checkboxes and radio groups in your modals:

Modal.create("modal", "Welcome Screening")
        .addComponents(
                Label.of(
                        "How did you find this server?",
                        RadioGroup.create("radio")
                                .addOption("I was told by a friend", "friend")
                                .addOption("I found it online", "online")
                                .addOption("Other", "other")
                                .build()),
                Label.of(
                        "Server Rules",
                        CheckboxGroup.create("checkbox-group")
                                .addOption(
                                        "I've read the server rules and agree to follow them.", "rule-checkbox")
                                .setMinValues(1)
                                .build()))
        .build();
image

When a user submits a modal with a checkbox group, the selected values can be accessed in the ModalInteractionEvent with getValue(groupId).getAsStringList() and radio groups using getValue(groupId).getAsString().

New Features

Changes

  • Use ANIMATED_WEBP for all animated assets by @freya022 in #3036
  • Alternatively check for CREATE_* permissions when managing/deleting our own events/emojis/stickers by @freya022 in #3061
  • Prevent warning about message content intent if message contains content by @freya022 in #3053

Full Changelog: v6.3.2...v6.4.0

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.4.0")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.4.0</version> 
</dependency>

v6.3.2

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 15 Mar 11:15
47c95bc

Overview

Small bug fix release.

Changes

Bug Fixes

  • Helpers.appendCause: Add special case for circular causes by @freya022 in #3041

Full Changelog: v6.3.1...v6.3.2

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.3.2")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.3.2</version> 
</dependency>

v6.3.1

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 15 Feb 13:18
132149c

Overview

This is primarily a bug fix release, but also includes a minor breaking change for emojis.

Enable users to choose the requested format of assets (#3009)

Most methods, that previously returned ImageProxy or an image URL, now support passing ImageFormat to choose a different format. This enables users to easily switch from PNG to WEBP or other formats.

Additionally, most of the template strings used to create image URLs, such as User.AVATAR_URL, have been deprecated in favor of the new DiscordAssets utility class. You can use DiscordAssets.userAvatar(ImageFormat.PNG, userId, avatarId) to get an ImageProxy instance and use ImageProxy#getUrl to get the respective URL.

Warning

Breaking Changes

  • CustomEmoji#getImage and CustomEmoji#getImageUrl will now use webp format by default. This is due to API changes which make the gif format unreliable. See #2999 for details. You can use CustomEmoji#getImage(ImageFormat) to choose a different format, like ImageFormat.PNG or ImageFormat.GIF.

New Features

Bug Fixes

  • Fix unique id not being copied in SelectMenus by @Kaktushose in #3013
  • Use Locale.ROOT in AudioEncryption for consistent string handling by @arif-banai in #3024

Deprecations

Full Changelog: v6.3.0...v6.3.1

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.3.1")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.3.1</version> 
</dependency>

v6.3.0 | DAVE Protocol Support

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 11 Jan 14:50
7a456b2

Overview

This release adds initial support for the DAVE Protocol.

Important

Audio connections without the DAVE Protocol will stop working on March 1st, 2026. If you use JDA to connect to voice channels or stage channels, you will have to update to this release and add the required DAVE Protocol implementation.

Setting up DAVE Protocol in JDA

Since the implementation for DAVE requires native library dependencies, it is not included by default by JDA. We've decided that dependencies related to audio features will no longer be included by default in the future.

Starting with JDA 6.3.0, audio features require additional setup in your JDABuilder or DefaultShardManagerBuilder. Once you have added a dependency that implements DaveSessionFactory, you can configure it in your builder using setAudioModuleConfig:

builder.setAudioModuleConfig(
  new AudioModuleConfig()
    .withDaveSessionFactory(daveSessionFactory)
)

You can use JDAVE, which provides an implementation for this interface. Note that this library requires Java 25 and only supports a few platforms for now. Read the README for setup instructions.

Warning

This library is still in its early stages and might have some issues. However, I wanted to get this released as soon as possible to allow people to test and report issues, since the deadline is only a few weeks away. I recommend to test this thoroughly before going into production.

There are other libraries still in development that will add support for older java versions, such as libdave-jvm which uses JNI instead of the modern FFM API.

New Features

Full Changelog: v6.2.1...v6.3.0

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.3.0")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.3.0</version> 
</dependency>

v6.2.1

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 01 Jan 14:44
95da188

Overview

In this release, we have added new compliance tests that automatically validate some of our enums against the Official Discord OpenAPI Specification. This allows us to easily verify the completeness of our enums, which is why we added a lot of new enum constants. In the future, we might use this spec for serialization / deserialization internally, or even expand it to a public REST-only module.

Important

Important Announcement: Changes to Audio Connections in March 2026

Discord has announced in their Changelog: Deprecating Non-E2EE Voice Calls, that all voice connections will require End-to-End-Encryption starting March 1st, 2026.

Support for this in JDA has been blocked by Discord's slow release of their library libdave. However, they have finally released a usable C-interface 2 weeks ago. The next feature release of JDA will add a new opt-in interface to support the DAVE protocol and will log warnings and errors if this interface is not implemented. The development for this has started in my pull request: Add support for libdave #2988.

On March 1st, 2026, all JDA audio connections will require an implementation of DAVE. Users of JDA are responsible to choose or provide their own implementation of this protocol. There are already some work-in-progress implementations that directly use libdave, such as JDAVE (requires Java 25) and libdave-jvm (requires Java 8).

If you are affected by this change, you should start migrating to JDA 6 as soon as possible.

New Features

  • Support retrieving available SKUs via /applications/{application.id}/skus by @rainbowdashlabs in #2828
  • Adds new locales: DiscordLocale.ARABIC, DiscordLocale.HEBREW
  • Adds new audit log action types:
    • ActionType.SOUNDBOARD_SOUND_CREATE, ActionType.SOUNDBOARD_SOUND_UPDATE, ActionType.SOUNDBOARD_SOUND_DELETE
    • ActionType.AUTO_MODERATION_QUARANTINE_USER
    • ActionType.CREATOR_MONETIZATION_REQUEST_CREATED, ActionType.CREATOR_MONETIZATION_TERMS_ACCEPTED
    • ActionType.ONBOARDING_PROMPT_CREATE, ActionType.ONBOARDING_PROMPT_UPDATE, ActionType.ONBOARDING_PROMPT_DELETE
    • ActionType.ONBOARDING_CREATE, ActionType.ONBOARDING_UPDATE
    • ActionType.HOME_SETTINGS_CREATE, ActionType.HOME_SETTINGS_UPDATE, ActionType.GUILD_PROFILE_UPDATE
  • Adds AuditLogKey.GUILD_BRAND_COLOR_PRIMARY
  • Adds new audit log target types:
    • TargetType.SOUNDBOARD_SOUND
    • TargetType.ONBOARDING_PROMPT_STRUCTURE
    • TargetType.ONBOARDING
  • Adds ChannelType.GUILD_DIRECTORY

Changes

Full Changelog: v6.2.0...v6.2.1

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.2.1")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.2.1</version> 
</dependency>

v6.2.0

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 14 Dec 15:27
6355712

Overview

This release includes a permission change that will go into effect on February 26th, 2026. Any versions older than this will not have the correct permission checks for the new rules, or only partially support the new rules.

Permission Changes (#2967)

After the deadline of February 26th, 2026, some permissions will lose capabilities in favor of new permissions.

  • MESSAGE_MANAGE will no longer allow users to Pin/Unpin Messages or Bypass Slowmode. Instead, the new BYPASS_SLOWMODE and PIN_MESSAGES permissions have been added.
  • MANAGE_GUILD_EXPRESSIONS will no longer allow users to Create Emojis/Stickers. Instead, the new CREATE_GUILD_EXPRESSIONS permission has been added.
  • MANAGE_EVENTS will no longer allow users to Create Scheduled Events. Instead, the new CREATE_SCHEDULED_EVENTS permission has been added.

See the Discord Changelog for details.

Retrieve Role Member Counts (#2973)

The guild role member count can now be retrieved with Guild#retrieveRoleMemberCounts.

Example:

guild.retrieveRoleMemberCounts().queue(counts -> {
    int boostRoleMemberCount = counts.get(guild.getBoostRole());

    IO.println("This guild has " + boostRoleMemberCount + " boosters!");
});

Enhanced Role Colors (#2975)

You can now access and modify the Gradient or Holographic role colors, a feature unlocked through boosting a guild.

Example:

guild.createRole()
     .setName("Gradient Role")
     .setGradientColors(0x0000FF, 0x00FF00)
     .queue(role -> {
         IO.println("Is role a gradient? " + role.getColors().isGradient());
         IO.println("Primary: %X".formatted(role.getColors().getPrimaryRaw()));
         IO.println("Secondary: %X".formatted(role.getColors().getSecondaryRaw()));
     });

New Features

Changes

  • Update permission checks with the Feb 23 2026 deadline by @freya022 in #2967

Full Changelog: v6.1.3...v6.2.0

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.2.0")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.2.0</version> 
</dependency>

v6.1.3

Choose a tag to compare

@MinnDevelopment MinnDevelopment released this 09 Dec 11:10
f15c0f6

Bug Fixes

Full Changelog: v6.1.2...v6.1.3

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:6.1.3")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>6.1.3</version> 
</dependency>