JDA

Java wrapper for the popular chat & VOIP service: Discord https://discord.com

APACHE-2.0 License

Stars
4.2K
Committers
165

Bot releases are hidden (Show)

JDA - v5.0.0-beta.4 | Audit Log Events and Silent Messages

Published by MinnDevelopment over 1 year ago

Overview

This release adds support for recent Discord features, such as linked roles and silent messages. We also improved the user experience for shutting down, which should come in handy for anyone building reloadable plugins.

Add GuildAuditLogEntryCreateEvent (#2380)

Discord has finally introduced an event for new audit log entries. This can be used for keeping track of all kinds of moderation relevant activity in a guild. However, to receive this event you must have the View Audit Logs permission and enable the GUILD_MODERATION intent (formerly GUILD_BANS).

Silent Messages (#2392)

You can now send and receive messages which do not trigger desktop and mobile push notifications. This is done in the client by prefixing a message with @silent. In JDA you can use setSuppressedNotifications(true) to achieve the same. Note that @silent is not the correct way to create these messages with a bot, as it is a client only feature.

You can check the release pull request for more information: discord/discord-api-docs#5910

Await Shutdown (#2269)

The shutdown logic has adapted to allow more consistent behavior. We've introduced jda.awaitShutdown() as a way to allow blocking until all JDA subsystems reach completion. Note that this might take a long time, depending on how long your RestAction queue is at the time.

The recommended way to gracefully shutdown is to define a maximum wait threshold and use it to cancel requests after some time:

// Initating the shutdown, this closes the gateway connection and subsequently closes the requester queue
jda.shutdown();
// Allow at most 10 seconds for remaining requests to finish
if (!jda.awaitShutdown(Duration.ofSeconds(10))) { // returns true if shutdown is graceful, false if timeout exceeded
    jda.shutdownNow(); // Cancel all remaining requests, and stop thread-pools
    jda.awaitShutdown(); // Wait until shutdown is complete (indefinitely)
}

In order to save CPU time, we make use of conditional variables for all of our wait loops internally. This is much more efficient than using sleep polling, like suggested in the past.

New Features

Changes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-beta.3...v5.0.0-beta.4

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-beta.4")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-beta.4</version> 
</dependency>
JDA - v5.0.0-beta.3

Published by MinnDevelopment almost 2 years ago

Overview

Small release to fix a few bugs and introduce support for new API features.

GIF Sticker Support

Discord is adding support to create stickers with GIFs in the future. This release already covers support for receiving and creating them in advance of the rollout. Note that it will currently not work since the API for GIF stickers has not yet been deployed, in the meantime you will receive an invalid asset error.

Reverse Audit-Log Iteration

You can now use PaginationAction#reverse on Guild#retrieveAuditLogs. This allows you to iterate from the oldest entry to the newest one.

Removing Options/Subcommands from SlashCommands

You can now use conditional remove operations on SlashCommandData to remove options and slash commands.

Example:

SlashCommandData command = SlashCommandData.fromData(json); // parsing an existing command from json
command.removeOptions(o -> o.isRequired()); // Removing all required options

Note: You still have to pass this updated command to discord using upsertCommand or updateCommands!

New Features

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-beta.2...v5.0.0-beta.3

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-beta.3")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-beta.3</version> 
</dependency>
JDA - v5.0.0-beta.2

Published by MinnDevelopment almost 2 years ago

Overview

Small release to fix a few bugs and typing issues.

Support for Welcome Screens (#2264 / #1989)

You can now retrieve and manage the welcome screen of a guild. To modify a welcome screen, you can use Guild#modifyWelcomeScreen:

TextChannel rules = guild.getTextChannelsByName("rules", true).get(0);
ForumChannel help =  guild.getForumChannelsByName("help-forum", true).get(0);
guild.modifyWelcomeScreen()
       .setDescription("Welcome to our cool guild!")
       .setWelcomeChannels(
              GuildWelcomeScreen.Channel.of(rules, "Read our rules"),
              GuildWelcomeScreen.Channel.of(help, "Ask for help in our forum", Emoji.fromUnicode("U+1F4AC"))
       )
       .queue();

New Features

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-beta.1...v5.0.0-beta.2

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-beta.2")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-beta.2</version> 
</dependency>
JDA - v5.0.0-beta.1 | Time to update

Published by MinnDevelopment almost 2 years ago

Overview

We finally made it 🎉 BETA 🎉 ! This concludes the major rewrites and large breaking changes of JDA version 5. With this release, we feel confident that people can rely on updates no longer requiring major rewrites of their codebases in the foreseeable future (praying to the API gods).

There will likely be some effort made to provide a full migration guide for anyone still stuck on version 4. It is recommended to update to version 5 as soon as possible. Version 4 is officially reaching EOL in the first quarter of 2023, and will stop working soon after due to the gateway version 8 being discontinued.

You can join our discord server, where we have a channel called #jda5-changes with a brief changelog for all the breaking changes.

We've also started accepting donations via Open Collective. Any donation are greatly appreciated.

Age-Restricted Commands (#2325)

You can now create NSFW (or age-restricted) commands, which are only usable in age-restricted channels.

Commands.slash("nsfw", "Something nsfw").setNSFW(true)

Channel Ordering (#2320)

The implementation for GuildChannel#compareTo has been adjusted to support comparing channels of different types. This can be used to figure out the order of channels within the channel list. For instance, if you compare a channel to the category it is in, it will be ordered lower than the category.

This also extends to Guild#getChannels, which now uses the updated compareTo implementation for ordering. As such, you can also order a sublist of all channels yourself, by using list.sort(). This even works with thread channels.

New Features

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.22...v5.0.0-beta.1

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-beta.1")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-beta.1</version> 
</dependency>
JDA - v5.0.0-alpha.22

Published by MinnDevelopment almost 2 years ago

Overview

This is most likely the final alpha release. The current plan is to merge a few more breaking changes, and address some remaining TODOs before finally bumping to beta! Stay tuned.

Implement new select menus (#2287)

Discord has introduced new select menu component types, which support selecting mentionable entities like User/Role/Channel. With this release we are introducing a small breaking change to the SelectMenu type:

  • StringSelectMenu is the old select menu, used for custom string choices
  • EntitySelectMenu is the new select menu, used for mentionable entities

And you use the StringSelectInteractionEvent and EntitySelectInteractionEvent to handle them.

Ability to disable/pause invites of a guild (#2222)

Recently, Discord added a new moderation feature to pause the invites of a guild, including vanity invites. This is usually done using the Pause Invites button in the guild settings.

You can now do this using the GuildManager via setInvitesDisabled(true).

Scheduled Events (#2047)

This is rather late, but you can now handle and create scheduled events. To create a scheduled event you can use one of the createScheduledEvent overloads in Guild:

  • Use createScheduledEvent(name, channel, time) to create a local event to take place in a specific voice or stage channel
  • Use createScheduledEvent(name, location, startTime, endTime) to create an external event, such as a concert or similar

New Features

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.21...v5.0.0-alpha.22

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.22")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.22</version> 
</dependency>
JDA - v5.0.0-alpha.21 | Small Event Changes

Published by MinnDevelopment about 2 years ago

Overview

Almost ready for beta. This release changes a few event names and introduces a new interface GenericSessionEvent. With this, almost every breaking change that we had planned is completed. There will likely only be one more alpha release before bumping to beta.

Event Changes (#1952)

Events related to the active gateway session / main socket now have a common abstraction called GenericSessionEvent. We also changed a few event names for better clarity:

Old New
DisconnectEvent SessionDisconnectEvent
ReconnectedEvent SessionRecreateEvent
ResumedEvent SessionResumeEvent

All the session related events are now in a common package at net.dv8tion.jda.api.events.session, this also includes some breaking package changes for a few commonly used events like ReadyEvent.

Additionally, events for voice channels of guild members have been changed slightly. Previously, we provided 3 separate voice channel update events:

  • GuildVoiceJoinEvent
  • GuildVoiceLeaveEvent
  • GuildVoiceMoveEvent

Due to the confusing nature of these events, we have decided to instead only provide a single GuildVoiceUpdateEvent. This new event provides the old and new channel, which can each be null to indicate either a leave (null new channel) or join (null old channel).

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.20...v5.0.0-alpha.21

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.21")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.21</version> 
</dependency>
JDA - v5.0.0-alpha.20 | Forum channel support

Published by MinnDevelopment about 2 years ago

Overview

Discord is currently rolling out forums to all community guilds. This release adds support for these channels in JDA.

Forum support (#2184)

To use a forum channel, you must create a forum post. Posts are simply public ThreadChannels with a starter message. To create a post, instead of using the usual createThreadChannel, you must use createForumPost:

forum.createForumPost("Post Title Here", new MessageCreateBuilder()
  .addContent("# Header\n")
  .addContent("This is my first forum post!")
  .build()
).queue(post -> {
  Message message = post.getMessage();
  ThreadChannel thread = post.getThreadChannel();
  thread.sendMessage("Followup message").queue();
});

To create such a post, the bot must have Permission.MESSAGE_SEND in the forum channel. The client refers to this permission as Create Posts.

AudioChannel improvements (#2252)

As of this release, AudioChannel extends StandardGuildChannel instead of GuildChannel. This allows for a lot more features directly on the abstract interface, rather than having to cast down to voice or stage channels.

  • Invites
  • Category getter
  • Permissions
  • Positions
  • Copying

New Features

Changes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.19...v5.0.0-alpha.20

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.20")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.20</version> 
</dependency>
JDA - v5.0.0-alpha.19 | Channel Package, OrderAction, and Ban Precision

Published by MinnDevelopment about 2 years ago

Overview

With this release, we are changing a few packages, so you will have to update your imports. There are also a few more breaking changes, some of which are only relevant at runtime!

Seconds precision on bans (#2229)

Discord now supports deleting messages with seconds precision. Allowing you to delete messages which are less than a day old. To update your code, simply add a TimeUnit.DAYS.

Old:

guild.ban(member, 7, reason).queue();

New:

guild.ban(member, 7, TimeUnit.DAYS).reason(reason).queue();

Role Ordering (#2136)

The default ordering of guild.modifyRolePositions() has been reversed to align with the order of guild.getRoles() (descending position). We also added moveBelow and moveAbove to allow moving relative to a pivot element.

guild.modifyRolePositions()
  .selectPosition(guild.getRoleByBot(guild.getSelfMember())) // select bot role
  .moveAbove(modRole) // move it above the mod role
  .queue();

You can also now set the parent category of a channel using this feature:

guild.modifyTextChannelPositions()
  .selectPosition(channel)
  .setCategory(category)
  .moveBelow(otherChannel)
  .queue();

Channel Packages (#2180)

The new channel package layout is introduced to help reduce clutter of the entities package. You can find the updated package at net.dv8tion.jda.api.entities.channel. I've written a shell script to help rename packages in your sources:

Usage

To update packages of all .java source files in the src directory, you can use find and apply the script on each file:

find src -iname "*.java" -exec ./rename.sh {} \; -print

New Features

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.18...v5.0.0-alpha.19

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.19")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.19</version> 
</dependency>
JDA - v5.0.0-alpha.18 | Message Rework

Published by MinnDevelopment about 2 years ago

Overview

With this release, we are getting very close to the beta release. The big and long awaited message rework introduces a high consistency between all message create and edit endpoints, which means you no longer have to decide between setActionRow and addActionRow depending on the specific flavor of endpoint you are using!

Message Rework (#2187)

The message rework introduces a consistent interface for message requests. We are splitting message edit requests and message create requests into 2 interfaces with different functionality. The new type hierarchy can be seen in this figure:

image

This results in a few breaking changes.

Renames

  • setActionRows/addActionRows -> setComponents/addComponents
  • MessageAction -> MessageCreateAction
  • MessageAction#tts -> MessageCreateAction#setTTS
  • allowedMentions(...) -> setAllowedMentions(...)
  • addFile -> setFiles/addFiles/setAttachments
  • sendFile/replyFile -> sendFiles/replyFiles
  • override(true) -> setReplace(true)

Code Migration

You will likely only have to adjust code if you used MessageBuilder. In this rework, we split this into MessageCreateBuilder and MessageEditBuilder, which produce either MessageCreateData or MessageEditData. And you will have to provide these data instances instead of Message instances from now on.

The old approach of having a MessageBuilder which returns a Message instance was flawed, in that it would offer a lot of methods which are unusable. Instead, we now separate this by making data classes for each request. Now the types are consistently representing a specific feature set:

Type Meaning
Message Existing messages on discord with an ID
MessageCreateData The data used for a message creation request (HTTP POST)
MessageEditData The data used for a message edit request (HTTP PATCH)

This allows for a higher level of consistency and clarity. The edit builder by default will only update the fields which are explicitly set. For example, doing new MessageEditBuilder().setContent("hello").build() will only update the content and leave any embeds or files untouched.

More details are provided in #2187. You can also ask questions in the release discussion.

Gateway Resume URL Handling (#2203)

In an upcoming change to the gateway logic (which is used to receive events), Discord is introducing a new gateway resume url. This new resume URL will be used to move your bot connection to a new zone, allowing for less reconnects and potentially lower ping.

Bots on older version of JDA may run into more reconnects due to the missing handling of this new resume url. Anyone using some kind of proxy gateway, should make sure to also handle this accordingly.

New Features

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.17...v5.0.0-alpha.18

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.18")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.18</version> 
</dependency>
JDA - v5.0.0-alpha.17 | Hotfix for some file sending issues

Published by MinnDevelopment about 2 years ago

Fixes some issues regarding the handling of file attachments on messages.

  • Fix to properly clean up resources in MessageAction, which would otherwise cause unwanted warnings
  • Fix issue with interaction replies that make use of files
  • Fix issue with retainFiles on interaction message edits

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.17")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.17</version> 
</dependency>
JDA - v5.0.0-alpha.16 | Hotfix editMessage on components

Published by MinnDevelopment about 2 years ago

This fixes an issue where IMessageEditCallback#editMessage would not properly send the request to edit the message, and instead defer the edit.

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.16")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.16</version> 
</dependency>
JDA - v5.0.0-alpha.15 | Hotfix for cast exception in ChannelUpdateHandler

Published by MinnDevelopment over 2 years ago

This fixes the ClassCastException when a voice channel updated.

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.15")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.15</version> 
</dependency>
JDA - v5.0.0-alpha.14 | Text in Voice and Upgrade to API v10

Published by MinnDevelopment over 2 years ago

Overview

Breaking changes and text messages in voice channels!

Text in Voice (#2072)

This release introduces the long awaited Text in Voice feature. Now you can use all your message related features in voice channels as well! Automatically works with interactions, messages, reactions, and all other features you could want!

Command Localization (#2090)

Using command localization, you can provide customized translations for all your commands. Check the example: LocalizationExample

API v10 (#2165)

Since the v9 API will be discontinued at the end of 2022, we have upgraded to the newer version 10. This comes with a few breaking changes:

  • All edit requests with addFile calls (such as message.editMessage(...).addFile(...)), will now remove all current attachments on the message. To retain existing attachments, you are now required to also use retainFiles(...) with the existing attachments on the message.
  • The introduction of GatewayIntent.MESSAGE_CONTENT. In order to use certain user-generated content in messages, you will now be required to explicitly enable this privileged intent. This includes:
    • getContentRaw, getContentDisplay, getContentStripped, and getMentions().getCustomEmojis()
    • getActionRows, and getButtons
    • getAttachments
    • getEmbeds

You will be presented with a warning, if you try using any of those methods without having the required intent enabled.

Attempting to access message content without GatewayIntent.MESSAGE_CONTENT.
Discord now requires to explicitly enable access to this using the MESSAGE_CONTENT intent.
Useful resources to learn more:
	- https://support-dev.discord.com/hc/en-us/articles/4404772028055-Message-Content-Privileged-Intent-FAQ
	- https://jda.wiki/using-jda/gateway-intents-and-member-cache-policy/
	- https://jda.wiki/using-jda/troubleshooting/#im-getting-closecode4014-disallowed-intents
Or suppress this warning if this is intentional with Message.suppressContentIntentWarning()

Channel Unions (#2138)

We had a lot of repeated concrete type specializations, such as getTextChannel(), all over library. To address this duplication and to make the interface more consitent, we are introducing the concept of channel unions.

These channel unions, are abstracted types, which provide the same features as their respective name would suggest, while also allowing simple specialization using conversion methods.

An example union would be MessageChannelUnion, which is used by Message.getChannel(). This type provides all the methods a normal MessageChannel would, but also allows you to convert it to a more concrete type:

public void onMessageReceived(MessageReceivedEvent event) {
  MessageChannelUnion channel = event.getChannel();
  // Use normal message channel features
  channel.sendMessage("Hello, I received your message!").queue();
  // Specialized handling on concrete types
  if (channel.getType() == ChannelType.VOICE) {
    VoiceChannel vc = channel.asVoiceChannel(); // easy type conversion, just like casting, but with clear type information
    vc.getGuild().getAudioManager().openAudioConnection(vc);
  }
}

New Features

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.13...v5.0.0-alpha.14

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.14")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.14</version> 
</dependency>
JDA - v5.0.0-alpha.13

Published by MinnDevelopment over 2 years ago

Overview

In this release, we have taken some time to rework the handling of Emoji and Stickers! This comes with a lot of breaking changes.

Guild Emote Renamed (#2117)

Previously, all custom emoji were called Emote in JDA. This has been changed to be more consistent with the API naming convention of Custom Emoji. In that sense, we renamed Emote to RichCustomEmoji and made various changes all over the API to rename all occurrences of Emote with Emoji.

This also comes with some compatibility improvements! With this change, we now have a uniform representation of all emoji in the library. Every emoji now implements the Emoji interface and can be used interchangeably as such. For instance, the reactions used to have a specific type called ReactionEmote, which is now just replaced with Emoji allowing you to use them in buttons!

public void onMessageReactionAdd(MessageReactionAddEvent event) {
  event.getChannel().sendMessage("User reacted")
    .setActionRow(Button.primary("buttonid", event.getEmoji())) // <- replacement for getReactionEmote()
    .queue();
}

Stickers (#2104)

In addition to the changes for emoji, we now have a full support for stickers! Bots can send up to 3 guild stickers in a message (but not in interactions). However, this is limited to only stickers from the same guild, so likely not useful to most bots.

This comes with support for:

  • Creating/Updating/Deleting guild stickers
  • Getting and sending stickers with messages
  • Access to nitro sticker packs (not sending though)
  • Full sticker event support

ChunkingFilter Breaking Change (#2053)

Previously, when you did setChunkingFilter(ChunkingFilter.ALL), we would always cache every member of the guild for the full runtime. This has been changed now, allowing you to further configure the member cache policy in addition to chunking. Now, to chunk and cache all members of a guild, you can use setChunkingFilter(ChunkingFilter.ALL).setMemberCachePolicy(MemberCachePolicy.ALL).

This is a breaking change and affects anyone using ChunkingFilter.

Command Permissions (#2113)

Discord made breaking changes to command permissions (aka Privileges). This means you can no longer configure the privileges of a command on a guild, without using oauth. Consequently, we updated our interface with breaking changes to address this.

Instead of using setDefaultEnabled(..) on your command and configuring a whitelist/blacklist of roles and users, you now have the ability to configure allowed permissions using setDefaultPermissions(...) and you can tell discord that a command is guild only with setGuildOnly(true).

However, you cannot configure this for individual subcommands, due to the way discord designed them.

Check out the SlashBotExample for some useful examples on how this works!

New Features

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.12...v5.0.0-alpha.13

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.13")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.13</version> 
</dependency>
JDA - v5.0.0-alpha.12

Published by MinnDevelopment over 2 years ago

Overview

This release contains a few tiny changes to improve the codebase, such as:

  • FileProxy for downloading images and files from discord (replacing Message.Attachments#download)
  • FileUpload for uploading images and files to discord (will be used for Message and Sticker creation)
  • Message#getMentions to replace all the mention handling in message and interactions. (Such as Message#getMentionedUsers)

Example Mentions Changes

Old:

List<TextChannel> channels = message.getMentionedChannels(); // only handles TextChannel mentions
List<User> users = message.getMentionedUsers();

New:

List<GuildChannel> channels = message.getMentions().getChannels(); // handles all channel mentions
List<MessageChannel> messageChannels = message.getMentions().getChannels(MessageChannel.class); // filter by class type
List<User> users = message.getMentions().getUsers();

New Features

Changes

Bug Fixes

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.11...v5.0.0-alpha.12

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.12")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.12</version> 
</dependency>
JDA - v5.0.0-alpha.11 | Modals

Published by DV8FromTheWorld over 2 years ago

Overview

This release finally brings out modals! This includes a variety of constructs, but the key ones to be immediately aware of are:

  • Modal
  • TextInput
  • ModalInteraction
  • ModalInteractionEvent
  • IModalCallback (replyModal(modal))

Modal Example

@Override
public void onSlashCommandInteraction(@Nonnull SlashCommandInteractionEvent event) {
    if (event.getName().equals("support")) {
        TextInput email = TextInput.create("email", "Email", TextInputStyle.SHORT)
                .setPlaceholder("Enter your E-mail")
                .setMinLength(10)
                .setMaxLength(100) // or setRequiredRange(10, 100)
                .build();

        TextInput body = TextInput.create("body", "Body", TextInputStyle.PARAGRAPH)
                .setPlaceholder("Your concerns go here")
                .setMinLength(30)
                .setMaxLength(1000)
                .build();

        Modal modal = Modal.create("support", "Support")
                .addActionRows(ActionRow.of(email), ActionRow.of(body))
                .build();

        event.replyModal(modal).queue();
    }
}
@Override
public void onModalInteraction(@Nonnull ModalInteractionEvent event) {
    if (event.getModalId().equals("support")) {
        String email = event.getValue("email").getAsString();
        String body = event.getValue("body").getAsString();

        createSupportTicket(email, body);

        event.reply("Thanks for your request!").setEphemeral(true).queue();
    }
}

New Features

Changes

Bug Fixes

Removed

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.10...v5.0.0-alpha.11

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.11")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.11</version> 
</dependency>
JDA - v5.0.0-alpha.10

Published by DV8FromTheWorld over 2 years ago

Overview

UserSnowflake

We changed User.fromId to now return UserSnowflake instead of User. This is done to prevent users from attempting code such as User.fromId(123).openPrivateChannel() which would never work.

With this we also changed some methods to no longer accept raw IDs as long and String. Instead you can now use method(User.fromId(long/String)), ie. ban(User.fromId(1234)).

Removed Methods:

  • Guild#ban(long/String), Guild#ban(long/String, int), Guild#ban(long/String, int, String)
  • Guild#kick(long/String), Guild#kick(long/String, String)
  • Guild#unban(long/String)
  • Guild#retrieveBanById(long/String)
  • Guild#addMember(String, long/String)
  • Guild#timeoutForById(long/String, Duration)
  • Guild#timeoutUntilById(long/String, TemporalAccessor)
  • Guild#removeTimeoutById(long/String)
  • Guild#addRoleToMember(long/String, Role)
  • Guild#removeRoleFromMember(long/String, Role)
  • AuditLogPaginationAction#user(long/String)

New Features

Changes

Bug Fixes

Removed

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.9...v5.0.0-alpha.10

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.10")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.10</version> 
</dependency>
JDA - v5.0.0-alpha.9

Published by DV8FromTheWorld over 2 years ago

Changelog

This release is a follow up hotfix release for 5.0.0-alpha.6 that fixes issues caused by a bug in Discord (https://github.com/discord/discord-api-docs/issues/4557). We felt it was faster to put out a baindaid than to wait for the fix from Discord's side.

Check out the patch notes on 5.0.0-alpha.6 for the cool new stuff.

New Features

N/A

Changes

Removed

  • Technically receiving ephemeral messages via MESSAGE_CREATE (Thus MessageReceivedEvent) is now no longer supported.
    • To be clear, this would be receiving a MessageReceivedEvent for an ephemeral message that the bot itself sent.

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.8...v5.0.0-alpha.9

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.9")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.9</version> 
</dependency>
JDA - v5.0.0-alpha.8 | alpha.6 Hotfix 2: Electric Boogaloo

Published by DV8FromTheWorld over 2 years ago

Changelog

This release is a follow up hotfix release for 5.0.0-alpha.6 that wasn't completely mitigated by the 5.0.0-alpha.7 hotfix.

Check out the patch notes on 5.0.0-alpha.6 for the cool new stuff.

New Features

N/A

Changes

Removed

N/A

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.7...v5.0.0-alpha.8

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.8")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.8</version> 
</dependency>
JDA - v5.0.0-alpha.7 | Hotfix for alpha.6

Published by DV8FromTheWorld over 2 years ago

Changelog

This release is a hotfix release for 5.0.0-alpha.6. Check out the patch notes on that version for the cool stuff.

New Features

N/A

Changes

Removed

N/A

Full Changelog: https://github.com/DV8FromTheWorld/JDA/compare/v5.0.0-alpha.6...v5.0.0-alpha.7

Installation

Gradle

repositories {
    mavenCentral()
}
dependencies {
    implementation("net.dv8tion:JDA:5.0.0-alpha.7")
}

Maven

<dependency>
    <groupId>net.dv8tion</groupId>
    <artifactId>JDA</artifactId>
    <version>5.0.0-alpha.7</version> 
</dependency>
Package Rankings
Top 4.05% on Repo1.maven.org
Badges
Extracted from project README's
maven-central jitpack jenkins-shield license-shield discord-shield faq-shield docs-shield troubleshooting-shield migration-shield maven-central jitpack
Related Projects