v5.0.0-alpha.18 | Message Rework
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:
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
- Add support for setting voice region on channel creation/copy by @CheesyGamer77 in #2209
- Implement gateway resume url handling by @MinnDevelopment in #2203
- Implement
GuildChannel#getJumpUrl
by @DynxstyGIT in #2204 - Add ApplicationInfo#getFlags by @MinnDevelopment in #2202
- Add sticker features for audit logs by @DxsSucuk in #2198
- Add some missing interaction features by @MinnDevelopment in #2195
Changes
- Message Rework by @MinnDevelopment in #2187
- Improve usage of cache in Guild#retrieveMemberById by @MinnDevelopment in #2200
Bug Fixes
- Fix CommandAutoCompleteInteraction#getChannel by @MinnDevelopment in #2211
- Fix ban pagination by @MinnDevelopment in #2201
Full Changelog: 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>