Skip to content

v5.0.0-alpha.18 | Message Rework

Compare
Choose a tag to compare
@MinnDevelopment MinnDevelopment released this 21 Aug 19:57
· 321 commits to master since this release
3889412

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: 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>