Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added ability to edit message with message builder #810

Merged
merged 1 commit into from Aug 4, 2021
Merged

Added ability to edit message with message builder #810

merged 1 commit into from Aug 4, 2021

Conversation

Morazzer
Copy link
Contributor

@Morazzer Morazzer commented Jul 9, 2021

Added ability to edit messages with the message builder.

Issue: #575

@felldo felldo linked an issue Jul 14, 2021 that may be closed by this pull request
@bassner
Copy link
Member

bassner commented Aug 2, 2021

Since it seems like the original author isn't coming back to this (and I need this myself actually), I've changed this to remove the boolean flags and check for the content field to be filled at all.
@KILLEliteMaste Please lmk fi this makes sense for you now. :)

Comment on lines 572 to 589
public CompletableFuture<Message> edit(Message message, boolean updateContent,
boolean updateEmbeds, boolean updateComponents) {
public CompletableFuture<Message> edit(Message message) {
ObjectNode body = JsonNodeFactory.instance.objectNode();

if (updateContent) {
body.put("content", strBuilder.toString());
String newContent = strBuilder.toString().trim();
if (!newContent.isEmpty()) {
body.put("content", newContent);
}

if (updateEmbeds) {
if (embeds.size() != 0) {
// Discord now supports multiple embeds for Discord bots.
ArrayNode embedsNode = JsonNodeFactory.instance.objectNode().arrayNode();
for (int i = 0; i < embeds.size() && i < 10; i++) {
embedsNode.add(((EmbedBuilderDelegateImpl) embeds.get(i).getDelegate()).toJsonNode());
}
body.set("embeds", embedsNode);
if (embeds.size() != 0) {
// Discord now supports multiple embeds for Discord bots.
ArrayNode embedsNode = JsonNodeFactory.instance.objectNode().arrayNode();
for (int i = 0; i < embeds.size() && i < 10; i++) {
embedsNode.add(((EmbedBuilderDelegateImpl) embeds.get(i).getDelegate()).toJsonNode());
}
body.set("embeds", embedsNode);
}

if (updateComponents) {
prepareComponents(body);
}
prepareComponents(body);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can reuse nearly everything from #send(TextChannel) for this. There are also a lot of things missing like the allowed mentions, flags... See https://discord.com/developers/docs/resources/channel#edit-message-jsonform-params

If for some reason you do not reuse the code from the #send method you should also remove the check to update the message content as it is not possible atm to remove it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For flags: We currently do not support flags at all, do we? I mean any of those: https://discord.com/developers/docs/resources/channel#message-object-message-flags

So all that's missing is allowed mentions and files/attachments.

you should also remove the check to update the message content

I don't understand this one. I've intentionally added the check. All requests trying to patch in an empty content will either fail (completely empty message won't work) or produce unexpected results (e.g. it'd remove content from a message that also contains an embed although this is not wanted), so we need to exclude it from the request if the content is empty / unset, right? This is important for requests where we e.g. only want to patch in some components:

Message m = ...;
new MessageBuilder().addComponents(...).edit(m);

We do not use Message#toMessageBuilder() since we don't want to change anything else than components in this case, so we create a new one (like you suggested in your complaint about the boolean flags)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All requests trying to patch in an empty content will either fail (completely empty message won't work) or produce unexpected results (e.g. it'd remove content from a message that also contains an embed although this is not wanted), so we need to exclude it from the request if the content is empty / unset, right?

But how else should you be able to edit a message which contains a content and embed to only having an embed?

For flags: We currently do not support flags at all, do we? I mean any of those:

We do: EPHEMERAL for example as this was the only Message flag available back this time we implemented it.

And taking your example

Message m = ...;
new MessageBuilder().addComponents(...).edit(m);

You example assumes that we patch in the new stuff. I was thinking more about we replace the message with the the new MessageBuilder

Copy link
Member

@bassner bassner Aug 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But how else should you be able to edit a message which contains a content and embed to only having an embed?

Yeah, that is a problem. But we should really avoid to send the entire message in the patch request, even tho we only change the components (for example) ... So how would we do it? We could compare everything against the Message object passed in as parameter to edit() and only send differences ... in theory ...

the only Message flag available back this time we implemented it.

I think you're confusing https://discord.com/developers/docs/interactions/slash-commands#interaction-response-object-interaction-application-command-callback-data-flags with the link I sent above; those are a different set of flags and existed for a long time already when we added support for ephemeral interaction responses, didn't they?
Also, the only thing we can change through the flags field is the SUPPRESS_EMBEDS thing ... everything else will be ignored anyways, so does it matter at all?

I was thinking more about we replace the message with the the new MessageBuilder

Yeah we could do that as well, but it would need to inlcude the difference checking stuff I mentioned above.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively to the difference chec which would be complex to do, we could track wether or not any of the methods affect content have been called on the MessageBuilder, and send an empty content field if they have been intentionally set to be empty.

Second alternative would be to have a new interface MessageUpdater, similar to ServerUpdater, to make the intention more clear. I agree that having a MessageBuilder with edit would imply that all fields of the builder are applied, even if empty (and thus replace the message).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you're confusing...

Prorbably yeah. But since these are 2 different Enums our current implementation for setFlags in InteractionMessageBuilderBase and maybe some other places is wrong as this assumes MessageFlag which is then something different than the Interaction Application Command Callback Data Flags.

I think introducing a message updater is a good idea. This clearly differenciates the MessageBuilder which sends a message to updating a message. And this also allows us to have different updating methods like updateSetFields and replaceMessage without cluttering everything in the MessageBuilder and it makes it clear how you are updating the message.

Copy link
Member

@bassner bassner Aug 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

our current implementation for setFlags ... is wrong

I don't think so. EPHEMERAL is indeed to only flag that can be set when sending interaction responses. Offering anything else would currently be misleading.
We could have another enum to represent the flags of an already sent message, maybe, for example to know wether or not a message has been crossposted or not, but I wouldn't consider that high priority. Might deserve an issue, though. Also, except for the SUPPRESS_EMBEDS flags nothing is updateable, so we could just have a method like Message#suppressEmbeds() to set the flag to true. That would be the same thing as the little "X" that appear on the top right of embeds in the UI.

I think introducing a message updater is a good idea.

I'll create a new pull request for that approach. I'll update this PR. I also like it better than having an .edit() on the builder. I don't know wether or not we should make a difference between "UpdateSetFields" and "ReplaceMessage", though. The first one is how an updater usually works

Copy link
Member

@felldo felldo Aug 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think so. EPHEMERAL is indeed to only flag that can be set when sending interaction responses. Offering anything else would currently be misleading.

Because exactly of this the current implementation is not correct as MessageFlag also contains i.e. SUPPRESS_EMBEDS. So we have to create a 2nd enum which contains only the valid flags repsonding to an interaction.

The first one is how an updater usually works

Yes, but I think there are actually more use cases for replacing a message than just adding e.g. a component to a message. It's also more clear what the message will actually look like after when replacing it.

@bassner bassner requested a review from felldo August 2, 2021 21:01
@bassner bassner requested a review from felldo August 3, 2021 23:24
fix allowed mentions


checkstyle


Fixes


add fixes
@bassner bassner merged commit 385d779 into Javacord:development Aug 4, 2021
@Vampire Vampire added this to the Next Version milestone Nov 17, 2021
Citymonstret pushed a commit to Incendo/cloud-discord that referenced this pull request Jan 15, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [org.javacord:javacord](https://javacord.org)
([source](https://togithub.com/Javacord/Javacord)) | `3.1.1` -> `3.8.0`
|
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.javacord:javacord/3.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.javacord:javacord/3.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.javacord:javacord/3.1.1/3.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.javacord:javacord/3.1.1/3.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>Javacord/Javacord (org.javacord:javacord)</summary>

###
[`v3.8.0`](https://togithub.com/Javacord/Javacord/releases/tag/v3.8.0)

**‼️ Java Update in SOON™ ‼️**

*Starting in early 2023, support for Java 8 will be discontinued and
Java 11 will be the new minimum requirement for using Javacord.
If you are not yet running Java 11+, we strongly recommend that you
upgrade before the end of this year.*

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.8.0' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.8.0</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.8.0")
```

<!--

#### Manually

The `javacord-3.8.0-shaded.jar` file contains Javacord and all its
dependencies.

-->

### 📋 Changelog

#### Improvements

- Added support for text in Voice
([https://github.com/Javacord/Javacord/pull/1014](https://togithub.com/Javacord/Javacord/pull/1014))
by [@&#8203;felldo](https://togithub.com/felldo)
- Added `TextableRegularServerChannel` which contains shared methods for
text related functionality of RegularServerChannels
([https://github.com/Javacord/Javacord/pull/1014](https://togithub.com/Javacord/Javacord/pull/1014))
by [@&#8203;felldo](https://togithub.com/felldo)
- Internal: Change generate changelog gradle task to mention the author
next to the changelog instead of the dedicated contributors section
([https://github.com/Javacord/Javacord/pull/1192](https://togithub.com/Javacord/Javacord/pull/1192))
by [@&#8203;felldo](https://togithub.com/felldo)
- Added ability to set a command as nsfw
([https://github.com/Javacord/Javacord/pull/1193](https://togithub.com/Javacord/Javacord/pull/1193))
by [@&#8203;RealYusufIsmail](https://togithub.com/RealYusufIsmail)
- Updated jackson-databind to version 2.12.7.1 in response to multiple
CVEs.
([https://github.com/Javacord/Javacord/pull/1207](https://togithub.com/Javacord/Javacord/pull/1207))
by [@&#8203;Saladoc](https://togithub.com/Saladoc)
- Added convenience methods to check timeout permissions.
([https://github.com/Javacord/Javacord/pull/1208](https://togithub.com/Javacord/Javacord/pull/1208))
by [@&#8203;RealYusufIsmail](https://togithub.com/RealYusufIsmail)
- Added `SUPPRESS_NOTIFICATIONS` message flag
([https://github.com/Javacord/Javacord/pull/1213](https://togithub.com/Javacord/Javacord/pull/1213))
by [@&#8203;RealYusufIsmail](https://togithub.com/RealYusufIsmail)
- Changed deprecated IP Discovery UDP packet size to 74 which is
required from the 15.03.23 onwards. **IMPORTANT** Everyone who is using
voice has to upgrade until then otherwise it will no longer work
([https://github.com/Javacord/Javacord/pull/1216](https://togithub.com/Javacord/Javacord/pull/1216))
by [@&#8203;felldo](https://togithub.com/felldo)

#### Bugfixes

- Fixed a bug where `canWrite` and more methods return always true for
Threads
([https://github.com/Javacord/Javacord/pull/1014](https://togithub.com/Javacord/Javacord/pull/1014))
by [@&#8203;felldo](https://togithub.com/felldo)
- Fixed `NullPointerException` when passing down `null` in
`TextInputBuilder#setValue`
([https://github.com/Javacord/Javacord/pull/1204](https://togithub.com/Javacord/Javacord/pull/1204))
by [@&#8203;ShindouMihou](https://togithub.com/ShindouMihou)
- Fixed a bug when receiving a SelectMenuInteraction where it would
throw an error if there is a link button in the components too of the
message and fixed checking for the wrong keys `min/max_values` so
getting these values (`getMaximumValues`) would always return 1
([https://github.com/Javacord/Javacord/pull/1206](https://togithub.com/Javacord/Javacord/pull/1206))
by [@&#8203;felldo](https://togithub.com/felldo)

###
[`v3.7.0`](https://togithub.com/Javacord/Javacord/releases/tag/v3.7.0)

**‼️ Java Update in Early 2023 ‼️**

*Starting in early 2023, support for Java 8 will be discontinued and
Java 11 will be the new minimum requirement for using Javacord.
If you are not yet running Java 11+, we strongly recommend that you
upgrade before the end of this year.*

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.7.0' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.7.0</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.7.0")
```

<!--

#### Manually

The `javacord-3.7.0-shaded.jar` file contains Javacord and all its
dependencies.

-->

### 📋 Changelog

##### Improvements

- Added "nsfw" field to `ServerVoiceChannel`
([https://github.com/Javacord/Javacord/pull/1127](https://togithub.com/Javacord/Javacord/pull/1127))
- Added message reply listeners (via `Message#addMessageReplyListener`)
([https://github.com/Javacord/Javacord/pull/1139](https://togithub.com/Javacord/Javacord/pull/1139))
- Added support for select menus v2
([https://github.com/Javacord/Javacord/pull/1150](https://togithub.com/Javacord/Javacord/pull/1150))
- Deprecated `SelectMenu#create` methods in favor of `#createStringMenu`
([https://github.com/Javacord/Javacord/pull/1150](https://togithub.com/Javacord/Javacord/pull/1150))
- Added the ability to get a thread member by their user id.
([https://github.com/Javacord/Javacord/pull/1155](https://togithub.com/Javacord/Javacord/pull/1155))
- Deprecated `getThreadMembers` in favor of `requestThreadMembers`
([https://github.com/Javacord/Javacord/pull/1155](https://togithub.com/Javacord/Javacord/pull/1155))
- Added `SlashCommand#getMentionTags` to get all mention tags of all
subcommands
([https://github.com/Javacord/Javacord/pull/1157](https://togithub.com/Javacord/Javacord/pull/1157))
- Added new `RestRequestResultErrorCodes` `50039` and `40062`
([https://github.com/Javacord/Javacord/pull/1163](https://togithub.com/Javacord/Javacord/pull/1163))
- Added missing builder methods for setting the `emoji` property to a
unicode emoji on Select Menu Options
([https://github.com/Javacord/Javacord/pull/1166](https://togithub.com/Javacord/Javacord/pull/1166))
- Changed how the `delete_message_seconds` field is set when banning a
user from as query parameter to the request json body
([https://github.com/Javacord/Javacord/pull/1167](https://togithub.com/Javacord/Javacord/pull/1167))
- Added `MessageDecoration#applyToText(String)` which applies the
decoration to a given string
([https://github.com/Javacord/Javacord/pull/1169](https://togithub.com/Javacord/Javacord/pull/1169))
- Added new Javacord compatible library `Discord Interaction handler`
and removed `sdcf4j` because it is deprecated
([https://github.com/Javacord/Javacord/pull/1175](https://togithub.com/Javacord/Javacord/pull/1175))
- Added `ApplicationCommandInteraction#getRegisteredCommandServerId` and
`getRegisteredCommandServer` to get the id/server the command is
registered on from an application command interaction
([https://github.com/Javacord/Javacord/pull/1176](https://togithub.com/Javacord/Javacord/pull/1176))
- Deprecated `ApplicationCommand#deleteGlobal` and `deleteForServer` in
favor of `delete`
([https://github.com/Javacord/Javacord/pull/1177](https://togithub.com/Javacord/Javacord/pull/1177))
- Added `Message#canYouReadContent` which checks if you can read the
content of a message if you do not have the `MESSAGE_CONTENT` intent
enabled to cover special cases like DMs, bot mentions or your own
messages
([https://github.com/Javacord/Javacord/pull/1185](https://togithub.com/Javacord/Javacord/pull/1185))

##### Bugfixes

- Fixed MessageUpdater not removing attachments when replacing the
message although no new attachments are added
([https://github.com/Javacord/Javacord/pull/1168](https://togithub.com/Javacord/Javacord/pull/1168))
- Fixed moving the audio connection to the new ServervoiceChannel if the
bot gets moved
([https://github.com/Javacord/Javacord/pull/1170](https://togithub.com/Javacord/Javacord/pull/1170))
- Fixed not closing the audio connection when kicking the bot from a
ServerVoiceChannel
([https://github.com/Javacord/Javacord/pull/1170](https://togithub.com/Javacord/Javacord/pull/1170))
- Fixed wrong links in README
([https://github.com/Javacord/Javacord/pull/1178](https://togithub.com/Javacord/Javacord/pull/1178))
- Fixed not working contributing guidelines link in PR template
([https://github.com/Javacord/Javacord/pull/1181](https://togithub.com/Javacord/Javacord/pull/1181))

##### Breaking Changes

- Removed obsolete application owner methods
([https://github.com/Javacord/Javacord/pull/1147](https://togithub.com/Javacord/Javacord/pull/1147))
- Removed some banning server member methods
([https://github.com/Javacord/Javacord/pull/1147](https://togithub.com/Javacord/Javacord/pull/1147))
- Renamed `downloadAsXY` methods to `asXY`
([https://github.com/Javacord/Javacord/pull/1147](https://togithub.com/Javacord/Javacord/pull/1147))
- Moved some methods from `VoiceChannel` to `ServerVoiceChannel`
([https://github.com/Javacord/Javacord/pull/1147](https://togithub.com/Javacord/Javacord/pull/1147))
- SelectMenuBuilder now requires a `SELECT_MENU_*` component type and a
`custom_id` to be instantiated.
([https://github.com/Javacord/Javacord/pull/1150](https://togithub.com/Javacord/Javacord/pull/1150))
- `get/requestSticketById(String)` methods do no longer throw an
exception when the id is being parsed and instead return an empty
optional or complete exceptionally with the number parsing exception
([https://github.com/Javacord/Javacord/pull/1156](https://togithub.com/Javacord/Javacord/pull/1156))
- `SlashCommand#getMentionTag` now returns the mention tag with only the
base command
([https://github.com/Javacord/Javacord/pull/1157](https://togithub.com/Javacord/Javacord/pull/1157))
- Renamed `SlashCommand#getFullCommandName` to `#getFullCommandNames`
and changed return type to `List<String>`
([https://github.com/Javacord/Javacord/pull/1157](https://togithub.com/Javacord/Javacord/pull/1157))
- Renamed `SlashCommandOptionsProvider` methods that are only usable for
arguments of a slash command from `getOption*` to `getArgument*` and
changed the implementation from getting the options from the option to
getting always the command arguments if there are any
([https://github.com/Javacord/Javacord/pull/1171](https://togithub.com/Javacord/Javacord/pull/1171))
- Throw an exception when the content of a message is accessed without
having the `MESSAGE_CONTENT` enabled
([https://github.com/Javacord/Javacord/pull/1182](https://togithub.com/Javacord/Javacord/pull/1182))

#### Contributors in this release:

[@&#8203;Bastian](https://togithub.com/Bastian)
([https://github.com/Javacord/Javacord/pull/1188](https://togithub.com/Javacord/Javacord/pull/1188),
[https://github.com/Javacord/Javacord/pull/1189](https://togithub.com/Javacord/Javacord/pull/1189),
[https://github.com/Javacord/Javacord/pull/1190](https://togithub.com/Javacord/Javacord/pull/1190))
[@&#8203;felldo](https://togithub.com/felldo)
([https://github.com/Javacord/Javacord/pull/1150](https://togithub.com/Javacord/Javacord/pull/1150),
[https://github.com/Javacord/Javacord/pull/1156](https://togithub.com/Javacord/Javacord/pull/1156),
[https://github.com/Javacord/Javacord/pull/1157](https://togithub.com/Javacord/Javacord/pull/1157),
[https://github.com/Javacord/Javacord/pull/1168](https://togithub.com/Javacord/Javacord/pull/1168),
[https://github.com/Javacord/Javacord/pull/1169](https://togithub.com/Javacord/Javacord/pull/1169),
[https://github.com/Javacord/Javacord/pull/1170](https://togithub.com/Javacord/Javacord/pull/1170),
[https://github.com/Javacord/Javacord/pull/1171](https://togithub.com/Javacord/Javacord/pull/1171),
[https://github.com/Javacord/Javacord/pull/1175](https://togithub.com/Javacord/Javacord/pull/1175),
[https://github.com/Javacord/Javacord/pull/1176](https://togithub.com/Javacord/Javacord/pull/1176),
[https://github.com/Javacord/Javacord/pull/1177](https://togithub.com/Javacord/Javacord/pull/1177),
[https://github.com/Javacord/Javacord/pull/1179](https://togithub.com/Javacord/Javacord/pull/1179),
[https://github.com/Javacord/Javacord/pull/1181](https://togithub.com/Javacord/Javacord/pull/1181),
[https://github.com/Javacord/Javacord/pull/1182](https://togithub.com/Javacord/Javacord/pull/1182),
[https://github.com/Javacord/Javacord/pull/1185](https://togithub.com/Javacord/Javacord/pull/1185))
[@&#8203;Lainika](https://togithub.com/Lainika)
([https://github.com/Javacord/Javacord/pull/1172](https://togithub.com/Javacord/Javacord/pull/1172))
[@&#8203;Mysterypotatoguy](https://togithub.com/Mysterypotatoguy)
([https://github.com/Javacord/Javacord/pull/1139](https://togithub.com/Javacord/Javacord/pull/1139),
[https://github.com/Javacord/Javacord/pull/1166](https://togithub.com/Javacord/Javacord/pull/1166))
[@&#8203;RealYusufIsmail](https://togithub.com/RealYusufIsmail)
([https://github.com/Javacord/Javacord/pull/1127](https://togithub.com/Javacord/Javacord/pull/1127),
[https://github.com/Javacord/Javacord/pull/1155](https://togithub.com/Javacord/Javacord/pull/1155),
[https://github.com/Javacord/Javacord/pull/1163](https://togithub.com/Javacord/Javacord/pull/1163),
[https://github.com/Javacord/Javacord/pull/1167](https://togithub.com/Javacord/Javacord/pull/1167))
[@&#8203;Saladoc](https://togithub.com/Saladoc)
([https://github.com/Javacord/Javacord/pull/1147](https://togithub.com/Javacord/Javacord/pull/1147),
[https://github.com/Javacord/Javacord/pull/1154](https://togithub.com/Javacord/Javacord/pull/1154))
[@&#8203;haseeb-xd](https://togithub.com/haseeb-xd)
([https://github.com/Javacord/Javacord/pull/1178](https://togithub.com/Javacord/Javacord/pull/1178))

###
[`v3.6.0`](https://togithub.com/Javacord/Javacord/releases/tag/v3.6.0)

**‼️ Java Update in Early 2023 ‼️**

*Starting in early 2023, support for Java 8 will be discontinued and
Java 11 will be the new minimum requirement for using Javacord.
If you are not yet running Java 11+, we strongly recommend that you
upgrade before the end of this year.*

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.6.0' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.6.0</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.6.0")
```

<!--

#### Manually

The `javacord-3.6.0-shaded.jar` file contains Javacord and all its
dependencies.

-->

### 📋 Changelog

Highlights in this release:

- We're now even contributor-friendlier with issue templates and the
all-contributors specification.
-   Support for applications being owned by teams
-   Out-of-the-box support for delayed deletion of entities.
-   Support for message interactions

##### Improvements

- Added support for slash command mentions
([https://github.com/Javacord/Javacord/pull/1137](https://togithub.com/Javacord/Javacord/pull/1137),
[https://github.com/Javacord/Javacord/pull/1140](https://togithub.com/Javacord/Javacord/pull/1140))
- Added support for component-only messages
([https://github.com/Javacord/Javacord/pull/1120](https://togithub.com/Javacord/Javacord/pull/1120))
- Increased the granularity of the message removal duration when banning
members
([https://github.com/Javacord/Javacord/pull/1113](https://togithub.com/Javacord/Javacord/pull/1113))
- Added convenience methods for creation of nested slash commands
([https://github.com/Javacord/Javacord/pull/1111](https://togithub.com/Javacord/Javacord/pull/1111))
- ***internal*** Switched to session-specific resume urls
([https://github.com/Javacord/Javacord/pull/1102](https://togithub.com/Javacord/Javacord/pull/1102))
- Added server features, including widgets and welcome screens
([https://github.com/Javacord/Javacord/pull/1096](https://togithub.com/Javacord/Javacord/pull/1096),
[https://github.com/Javacord/Javacord/pull/1123](https://togithub.com/Javacord/Javacord/pull/1123))
- Added support for the `replied user` mention
([https://github.com/Javacord/Javacord/pull/1091](https://togithub.com/Javacord/Javacord/pull/1091))
- Improved error handling on replying to messages that no longer exist
([https://github.com/Javacord/Javacord/pull/1090](https://togithub.com/Javacord/Javacord/pull/1090))
- Added number of messages to thread metadata
([https://github.com/Javacord/Javacord/pull/1089](https://togithub.com/Javacord/Javacord/pull/1089))
- Added position in thread to `Message`
([https://github.com/Javacord/Javacord/pull/1088](https://togithub.com/Javacord/Javacord/pull/1088))
- Added support for message interactions
([https://github.com/Javacord/Javacord/pull/1078](https://togithub.com/Javacord/Javacord/pull/1078))
- Switched to discord api / gateway version 10
([https://github.com/Javacord/Javacord/pull/1073](https://togithub.com/Javacord/Javacord/pull/1073))
- Added message content intent
([https://github.com/Javacord/Javacord/pull/1073](https://togithub.com/Javacord/Javacord/pull/1073))
- Improved attachment handling when updating messages
([https://github.com/Javacord/Javacord/pull/1073](https://togithub.com/Javacord/Javacord/pull/1073))
- Added description support for message attachments
([https://github.com/Javacord/Javacord/pull/1072](https://togithub.com/Javacord/Javacord/pull/1072))
- Exposed boosting and avatar metadata for members
([https://github.com/Javacord/Javacord/pull/1070](https://togithub.com/Javacord/Javacord/pull/1070))
- Added message flags to `Message` instances
([https://github.com/Javacord/Javacord/pull/1051](https://togithub.com/Javacord/Javacord/pull/1051))
- Added ability to get full name of a slash command
([https://github.com/Javacord/Javacord/pull/1050](https://togithub.com/Javacord/Javacord/pull/1050))
- Added support for min and max length of String parameters in slash
commands
([https://github.com/Javacord/Javacord/pull/1047](https://togithub.com/Javacord/Javacord/pull/1047))
- Added capabilities for scheduled / delayed deletion
([https://github.com/Javacord/Javacord/pull/1038](https://togithub.com/Javacord/Javacord/pull/1038))
- Removed hard-coded rate limits
([https://github.com/Javacord/Javacord/pull/973](https://togithub.com/Javacord/Javacord/pull/973))
- Renamed download methods for consistency
([https://github.com/Javacord/Javacord/pull/641](https://togithub.com/Javacord/Javacord/pull/641))
- Added permission checks for `ServerVoiceChannel`
([https://github.com/Javacord/Javacord/pull/638](https://togithub.com/Javacord/Javacord/pull/638))

##### Bugfixes

- Fixed thread channels mistakenly being removed from cache
([https://github.com/Javacord/Javacord/pull/1136](https://togithub.com/Javacord/Javacord/pull/1136))
- Fixed `ServerThreadChannelChangeInvitableEvent` possibly being thrown
for public threads
([https://github.com/Javacord/Javacord/pull/1133](https://togithub.com/Javacord/Javacord/pull/1133))
- Fixed audio connection not being cleaned up when leaving a server
([https://github.com/Javacord/Javacord/pull/1125](https://togithub.com/Javacord/Javacord/pull/1125))
- Fixed ConcurrentModificationException when updating custom emojis
([https://github.com/Javacord/Javacord/pull/1124](https://togithub.com/Javacord/Javacord/pull/1124))
- *SAME-RELEASE* Fixed empty attachments object
([https://github.com/Javacord/Javacord/pull/1122](https://togithub.com/Javacord/Javacord/pull/1122))
- Fixed javadoc build with Java 13+
([https://github.com/Javacord/Javacord/pull/1107](https://togithub.com/Javacord/Javacord/pull/1107))
- *SAME-RELEASE* Fixed NPE with `Server`
([https://github.com/Javacord/Javacord/pull/1104](https://togithub.com/Javacord/Javacord/pull/1104),
[https://github.com/Javacord/Javacord/pull/1130](https://togithub.com/Javacord/Javacord/pull/1130))
- Fixed updates to the bot user being ignored
([https://github.com/Javacord/Javacord/pull/1052](https://togithub.com/Javacord/Javacord/pull/1052))
- Fixed memory leaks with the event queues and sticker sets
([https://github.com/Javacord/Javacord/pull/1045](https://togithub.com/Javacord/Javacord/pull/1045))
- Fixed issues with updates for uncached roles
([https://github.com/Javacord/Javacord/pull/942](https://togithub.com/Javacord/Javacord/pull/942))

##### Breaking Changes

- Removed outdated server features
([https://github.com/Javacord/Javacord/pull/1096](https://togithub.com/Javacord/Javacord/pull/1096))
- Removed `has(Boost|Join)MessagesEnabled` methods from `Server`
([https://github.com/Javacord/Javacord/pull/1096](https://togithub.com/Javacord/Javacord/pull/1096))
- Extracted thread metadata into separate `ThreadMetadata` class
([https://github.com/Javacord/Javacord/pull/1094](https://togithub.com/Javacord/Javacord/pull/1094))
- Changed signature of `MessageEditEvent` to now give two `Message`
instances for comparison
([https://github.com/Javacord/Javacord/pull/1051](https://togithub.com/Javacord/Javacord/pull/1051))
- Removed description parameters for context menu commands
([https://github.com/Javacord/Javacord/pull/1049](https://togithub.com/Javacord/Javacord/pull/1049))
- Stickers are no longer shared across shards
([https://github.com/Javacord/Javacord/pull/1045](https://togithub.com/Javacord/Javacord/pull/1045))
- Changed return types from collections to more appropriate types across
the API
([https://github.com/Javacord/Javacord/pull/974](https://togithub.com/Javacord/Javacord/pull/974))
- Changed Application ownership return types
([https://github.com/Javacord/Javacord/pull/968](https://togithub.com/Javacord/Javacord/pull/968))
- Removed deprecated `addFile` methods
([https://github.com/Javacord/Javacord/pull/925](https://togithub.com/Javacord/Javacord/pull/925))

###
[`v3.5.0`](https://togithub.com/Javacord/Javacord/releases/tag/v3.5.0)

**‼️ Java Update in Early 2023 ‼️**

*Starting in early 2023, support for Java 8 will be discontinued and
Java 11 will be the new minimum requirement for using Javacord.
If you are not yet running Java 11+, we strongly recommend that you
upgrade before the end of this year.*

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.5.0' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.5.0</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.5.0")
```

<!--

#### Manually

The `javacord-3.5.0-shaded.jar` file contains Javacord and all its
dependencies.

-->

### 📋 Changelog

Highlights in this release:

-   Added support for new slash command permissions
-   Added support for interaction locales
-   Added support for server timeouts
-   Added support for slash command attachment options

##### Improvements

- Added `UserFlag#CERTIFIED_MODERATOR` and
`UserFlag#BOT_HTTP_INTERACTIONS`
([https://github.com/Javacord/Javacord/pull/762](https://togithub.com/Javacord/Javacord/pull/762))
- Added locales for interactions
([https://github.com/Javacord/Javacord/pull/947](https://togithub.com/Javacord/Javacord/pull/947))
- Improved BotInviteBuilder
([https://github.com/Javacord/Javacord/pull/957](https://togithub.com/Javacord/Javacord/pull/957))
- Added Modal interactions
([https://github.com/Javacord/Javacord/pull/962](https://togithub.com/Javacord/Javacord/pull/962))
- Added support for server timeouts
([https://github.com/Javacord/Javacord/pull/948](https://togithub.com/Javacord/Javacord/pull/948))
- Added support for disabling event dispatching
([https://github.com/Javacord/Javacord/pull/986](https://togithub.com/Javacord/Javacord/pull/986))
- Added support for ban pagination
([https://github.com/Javacord/Javacord/pull/993](https://togithub.com/Javacord/Javacord/pull/993))
- Added ActivityFlag
([https://github.com/Javacord/Javacord/pull/996](https://togithub.com/Javacord/Javacord/pull/996))
- Added missing/new Activity fields
([https://github.com/Javacord/Javacord/pull/1000](https://togithub.com/Javacord/Javacord/pull/1000))
- Added support for editing slash commands without a server instance
([https://github.com/Javacord/Javacord/pull/1001](https://togithub.com/Javacord/Javacord/pull/1001))
- Added `MessageType#THREAD_CREATED`
([https://github.com/Javacord/Javacord/pull/1008](https://togithub.com/Javacord/Javacord/pull/1008))
- Updated dependencies
([https://github.com/Javacord/Javacord/pull/944](https://togithub.com/Javacord/Javacord/pull/944),
[https://github.com/Javacord/Javacord/pull/1013](https://togithub.com/Javacord/Javacord/pull/1013))
- Added dummy implementation for forum channels
([https://github.com/Javacord/Javacord/pull/1009](https://togithub.com/Javacord/Javacord/pull/1009))
- Added unknown channels to prevent errors for newly introduced channels
([https://github.com/Javacord/Javacord/pull/1009](https://togithub.com/Javacord/Javacord/pull/1009))
- Added support for slash command attachment options
([https://github.com/Javacord/Javacord/pull/1015](https://togithub.com/Javacord/Javacord/pull/1015))
- Added support for new slash command permissions
([https://github.com/Javacord/Javacord/pull/1004](https://togithub.com/Javacord/Javacord/pull/1004),
[https://github.com/Javacord/Javacord/pull/1027](https://togithub.com/Javacord/Javacord/pull/1027))

##### Bugfixes

- Fixed `ServerTextChannel#hasSlowmode()`
([https://github.com/Javacord/Javacord/pull/731](https://togithub.com/Javacord/Javacord/pull/731))
- Fixed `SlashCommandInteraction` not properly parsing resolved users
([https://github.com/Javacord/Javacord/pull/953](https://togithub.com/Javacord/Javacord/pull/953))
- Fixed exception when guilds are missing voice states
([https://github.com/Javacord/Javacord/pull/929](https://togithub.com/Javacord/Javacord/pull/929))
- Fixed `DiscordApi#getMessageById(...)` returning cached messages from
other channels
([https://github.com/Javacord/Javacord/pull/963](https://togithub.com/Javacord/Javacord/pull/963))
- Fixed `ServerThreadChannelBuilder#setInvitableFlag(...)`
([https://github.com/Javacord/Javacord/pull/966](https://togithub.com/Javacord/Javacord/pull/966))
- Fixed audit log reason not supporting non-ASCII characters
([https://github.com/Javacord/Javacord/pull/971](https://togithub.com/Javacord/Javacord/pull/971))
- Fixed webhooks and interactions consuming global ratelimits
([https://github.com/Javacord/Javacord/pull/972](https://togithub.com/Javacord/Javacord/pull/972))
- Fixed `DiscordApi#hasAllUsersInCache()`
([https://github.com/Javacord/Javacord/pull/975](https://togithub.com/Javacord/Javacord/pull/975))
- Fixed exception when no `nsfw` field is present in channel category
updates
([https://github.com/Javacord/Javacord/pull/981](https://togithub.com/Javacord/Javacord/pull/981))
- Fixed `Server#getBans(...)` only returning the latest 1000 bans
([https://github.com/Javacord/Javacord/pull/993](https://togithub.com/Javacord/Javacord/pull/993))
- Fixed unwanted log message
([https://github.com/Javacord/Javacord/pull/1002](https://togithub.com/Javacord/Javacord/pull/1002))
- Fixed wrong initial mute and deafen member state
([https://github.com/Javacord/Javacord/pull/736](https://togithub.com/Javacord/Javacord/pull/736))
- Fixed exception for servers with forum channels
([https://github.com/Javacord/Javacord/pull/1009](https://togithub.com/Javacord/Javacord/pull/1009))
- Fixed duplicate message object creation for messages with attachments
([https://github.com/Javacord/Javacord/pull/1017](https://togithub.com/Javacord/Javacord/pull/1017))
- Fixed AssertionError for ServerThreadChannels
([https://github.com/Javacord/Javacord/pull/1029](https://togithub.com/Javacord/Javacord/pull/1029))

##### Breaking Changes

- Removed `UserFlag#SYSTEM` and renamed others
([https://github.com/Javacord/Javacord/pull/762](https://togithub.com/Javacord/Javacord/pull/762))
- Removed deprecared methods in `Message`, `LocalRatelimiter`, and
`SlashCommandInteractionOptionsProvider`
([https://github.com/Javacord/Javacord/pull/847](https://togithub.com/Javacord/Javacord/pull/847),
[https://github.com/Javacord/Javacord/pull/882](https://togithub.com/Javacord/Javacord/pull/882))
- Removed `SafeSpecializable` interface
([https://github.com/Javacord/Javacord/pull/880](https://togithub.com/Javacord/Javacord/pull/880))
- Renamed `Rename PermissionType#READ_MESSAGES` to `VIEW_CHANNEL`
([https://github.com/Javacord/Javacord/pull/952](https://togithub.com/Javacord/Javacord/pull/952))
- Removed support for broken and deprecared login with user accounts
([https://github.com/Javacord/Javacord/pull/576](https://togithub.com/Javacord/Javacord/pull/576))
- Removed `InteractionCallbackDataFlag`
([https://github.com/Javacord/Javacord/pull/961](https://togithub.com/Javacord/Javacord/pull/961))
- Changed return type of `Message#getMentionedChannels()` from
`List<ServerTextChannel>` to `List<ServerChannel>`
([https://github.com/Javacord/Javacord/pull/1012](https://togithub.com/Javacord/Javacord/pull/1012))
- Removed support for old slash command permissions
([https://github.com/Javacord/Javacord/pull/1004](https://togithub.com/Javacord/Javacord/pull/1004))

###
[`v3.4.0`](https://togithub.com/Javacord/Javacord/releases/tag/v3.4.0)

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.4.0' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.4.0</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.4.0")
```

#### Manually

The `javacord-3.4.0-shaded.jar` file contains Javacord and all its
dependencies.

### 📋 Changelog

Highlights in this release:

-   Added support for threads
-   Added support for stickers
- Improved support for interactions / slash commands (context menus,
autocomplete, ...)
-   Many bugfixes

##### Improvements

- Added option to control user cache
([https://github.com/Javacord/Javacord/pull/816](https://togithub.com/Javacord/Javacord/pull/816))
- Add `Server#requestMember(long)` to get a server member by their user
id
([https://github.com/Javacord/Javacord/pull/684](https://togithub.com/Javacord/Javacord/pull/684))
- All message components listeners are now attachable to messages
([https://github.com/Javacord/Javacord/pull/820](https://togithub.com/Javacord/Javacord/pull/820))
- Added `DiscordApi#getKnownCustomEmojiOrCreateCustomEmoji(...)` to get
custom emojis from different shards
([https://github.com/Javacord/Javacord/pull/830](https://togithub.com/Javacord/Javacord/pull/830))
- Added ability to edit message with message builder
([https://github.com/Javacord/Javacord/pull/810](https://togithub.com/Javacord/Javacord/pull/810))
- Allow ephemeral deferred interaction responses
([https://github.com/Javacord/Javacord/pull/838](https://togithub.com/Javacord/Javacord/pull/838))
- Added disabled field for Button convenience methods
([https://github.com/Javacord/Javacord/pull/849](https://togithub.com/Javacord/Javacord/pull/849))
- Added missing methods to get the actual component
([https://github.com/Javacord/Javacord/pull/850](https://togithub.com/Javacord/Javacord/pull/850))
- Added support for number slash command option type
([https://github.com/Javacord/Javacord/pull/852](https://togithub.com/Javacord/Javacord/pull/852),
[https://github.com/Javacord/Javacord/pull/919](https://togithub.com/Javacord/Javacord/pull/919))
- Remove members from cache when the bot leaves the server
([https://github.com/Javacord/Javacord/pull/855](https://togithub.com/Javacord/Javacord/pull/855))
- Use 64 bit for permission bitmask
([https://github.com/Javacord/Javacord/pull/861](https://togithub.com/Javacord/Javacord/pull/861))
- Added new permission types
([https://github.com/Javacord/Javacord/pull/862](https://togithub.com/Javacord/Javacord/pull/862))
- Added `MessageAttachment#isEphemeral()`
([https://github.com/Javacord/Javacord/pull/870](https://togithub.com/Javacord/Javacord/pull/870))
- Added new appender types to the MessageBuilder
([https://github.com/Javacord/Javacord/pull/869](https://togithub.com/Javacord/Javacord/pull/869))
- The `GUILD` intent is now automatically set
([https://github.com/Javacord/Javacord/pull/868](https://togithub.com/Javacord/Javacord/pull/868))
- Added new audit log action types
([https://github.com/Javacord/Javacord/pull/872](https://togithub.com/Javacord/Javacord/pull/872))
- Allow voice self-states to be set directly on connect
([https://github.com/Javacord/Javacord/pull/877](https://togithub.com/Javacord/Javacord/pull/877))
- `DiscordApi#disconnect()` now returns a future
([https://github.com/Javacord/Javacord/pull/884](https://togithub.com/Javacord/Javacord/pull/884))
- Added support for threads
([https://github.com/Javacord/Javacord/pull/864](https://togithub.com/Javacord/Javacord/pull/864),
[https://github.com/Javacord/Javacord/pull/905](https://togithub.com/Javacord/Javacord/pull/905),
[https://github.com/Javacord/Javacord/pull/907](https://togithub.com/Javacord/Javacord/pull/907),
[https://github.com/Javacord/Javacord/pull/930](https://togithub.com/Javacord/Javacord/pull/930))
- `MessageAuthor#getAvatar(...)` now accepts an optional size parameter
([https://github.com/Javacord/Javacord/pull/902](https://togithub.com/Javacord/Javacord/pull/902))
- Added support for stickers
([https://github.com/Javacord/Javacord/pull/904](https://togithub.com/Javacord/Javacord/pull/904))
- Added method to manually request members + ServerMembersChunkEvent
([https://github.com/Javacord/Javacord/pull/818](https://togithub.com/Javacord/Javacord/pull/818))
- Added support for min and max value setting of slash command options
([https://github.com/Javacord/Javacord/pull/891](https://togithub.com/Javacord/Javacord/pull/891))
- Update Log4J api version
([https://github.com/Javacord/Javacord/pull/922](https://togithub.com/Javacord/Javacord/pull/922))
- Added ServerThreadChannelUpdater and ServerThreadChannelBuilder
([https://github.com/Javacord/Javacord/pull/903](https://togithub.com/Javacord/Javacord/pull/903))
- Improved `MessageSet` to utilize performance-improvements from newer
Stream methods like `Stream#takeWhile(...)`
([https://github.com/Javacord/Javacord/pull/938](https://togithub.com/Javacord/Javacord/pull/938))
- Added support for context menus
([https://github.com/Javacord/Javacord/pull/867](https://togithub.com/Javacord/Javacord/pull/867))
- Added support for autocomplete interactions
([https://github.com/Javacord/Javacord/pull/939](https://togithub.com/Javacord/Javacord/pull/939),
[https://github.com/Javacord/Javacord/pull/943](https://togithub.com/Javacord/Javacord/pull/943),
[https://github.com/Javacord/Javacord/pull/945](https://togithub.com/Javacord/Javacord/pull/945))

##### Bugfixes

- JavaDoc Fixes and Improvements
([https://github.com/Javacord/Javacord/pull/828](https://togithub.com/Javacord/Javacord/pull/828),
[https://github.com/Javacord/Javacord/pull/854](https://togithub.com/Javacord/Javacord/pull/854),
[https://github.com/Javacord/Javacord/pull/863](https://togithub.com/Javacord/Javacord/pull/863),
[https://github.com/Javacord/Javacord/pull/875](https://togithub.com/Javacord/Javacord/pull/875),
[https://github.com/Javacord/Javacord/pull/876](https://togithub.com/Javacord/Javacord/pull/876))
- Fixed incoming interaction in unknown DM channels
([https://github.com/Javacord/Javacord/pull/835](https://togithub.com/Javacord/Javacord/pull/835))
- Fixed MessageBuilder for messages with multiple embeds
([https://github.com/Javacord/Javacord/pull/837](https://togithub.com/Javacord/Javacord/pull/837))
- Fixed `User#getMutualServers()`
([https://github.com/Javacord/Javacord/pull/821](https://togithub.com/Javacord/Javacord/pull/821))
- Fixed `SlashCommandInteractionOption#getBooleanValue()`
([https://github.com/Javacord/Javacord/pull/841](https://togithub.com/Javacord/Javacord/pull/841))
- Changed `SlashCommandInteractionOption#isSubcommandOrGroup()` to check
the string representation instead of string value
([https://github.com/Javacord/Javacord/pull/872](https://togithub.com/Javacord/Javacord/pull/872))
- Moved from deprecated "embed" field to "embeds" in UncachedMessageUtil
([https://github.com/Javacord/Javacord/pull/848](https://togithub.com/Javacord/Javacord/pull/848))
- Fixed message cache deadlock
([https://github.com/Javacord/Javacord/pull/860](https://togithub.com/Javacord/Javacord/pull/860))
- Fixed NPE in MessageBuilderBaseDelegateImpl when a list of embeds
contains a null entry
([https://github.com/Javacord/Javacord/pull/913](https://togithub.com/Javacord/Javacord/pull/913))
- `ServerVoiceChannelEvent` now extends `ServerChannelEvent`
([https://github.com/Javacord/Javacord/pull/918](https://togithub.com/Javacord/Javacord/pull/918))
- Fixed NPE in `SlashCommandInteractionOptionImpl#getUserValue()`
([https://github.com/Javacord/Javacord/pull/921](https://togithub.com/Javacord/Javacord/pull/921))
- Fixed NPE in SelectMenuInteractionImpl
([https://github.com/Javacord/Javacord/pull/926](https://togithub.com/Javacord/Javacord/pull/926))
- Added missing interfaces to `SelectMenuChooseEvent` and
`ServerChangeRulesChannelEvent`
([https://github.com/Javacord/Javacord/pull/936](https://togithub.com/Javacord/Javacord/pull/936))
- Replaced hard coded discord CDN with the already static defined
([https://github.com/Javacord/Javacord/pull/886](https://togithub.com/Javacord/Javacord/pull/886))
- Add methods to prevent ambiguous methods for `sendMessage(...)`
variants
([https://github.com/Javacord/Javacord/pull/912](https://togithub.com/Javacord/Javacord/pull/912))
- Fixed method signatures of bulk overwrite application command methods
([https://github.com/Javacord/Javacord/pull/940](https://togithub.com/Javacord/Javacord/pull/940))

##### Breaking Changes

- Changed return type of `User#getMutualServers()` from
`Collection<Server>` to `Set<Server>`
([https://github.com/Javacord/Javacord/pull/821](https://togithub.com/Javacord/Javacord/pull/821))
- Changed message methods that take embed as argument only to needing an
array of embeds
([https://github.com/Javacord/Javacord/pull/856](https://togithub.com/Javacord/Javacord/pull/856),
[https://github.com/Javacord/Javacord/pull/873](https://togithub.com/Javacord/Javacord/pull/873))
- Removed `MessageComponentInteractionBase#getMessageId()`
([https://github.com/Javacord/Javacord/pull/846](https://togithub.com/Javacord/Javacord/pull/846))
- Changed return type of `MessageComponentInteractionBase#getMessage()`
from `Optional<Message>` to `Message`
([https://github.com/Javacord/Javacord/pull/846](https://togithub.com/Javacord/Javacord/pull/846))
- `InteractionMessageBuilder#setFlags(...)` now expects
`InteractionCallbackDataFlag` instead of `MessageFlags` enums as
parameters
([https://github.com/Javacord/Javacord/pull/871](https://togithub.com/Javacord/Javacord/pull/871))
- Changed return type of `DiscordApi#disconnect()` from `void` to
`CompletableFuture<Void>`
([https://github.com/Javacord/Javacord/pull/884](https://togithub.com/Javacord/Javacord/pull/884))
- Changed return type of `ChannelCategory#getChannels()` from
`List<ServerChannel>` to `List<RegularServerChannel>`
([https://github.com/Javacord/Javacord/pull/864](https://togithub.com/Javacord/Javacord/pull/864))
- Moved position related methods from `ServerChannel` to
`RegularServerChannel` (Threads do not have a position)
([https://github.com/Javacord/Javacord/pull/864](https://togithub.com/Javacord/Javacord/pull/864))
- Replaced `SlashCommandInteractionOption#getIntValue()` with
`SlashCommandInteractionOption#getLongValue()` and
`SlashCommandOptionChoiceBuilderDelegate#setValue(int)` with
`SlashCommandOptionChoiceBuilderDelegate#setValue(long)`
([https://github.com/Javacord/Javacord/pull/899](https://togithub.com/Javacord/Javacord/pull/899))
- Fixed inconsistent slash command option naming
([https://github.com/Javacord/Javacord/pull/919](https://togithub.com/Javacord/Javacord/pull/919))
- Moved `canCreateInstantInvite` and permission methods from the
`ServerChannel` to the new `RegularServerChannel`
([https://github.com/Javacord/Javacord/pull/903](https://togithub.com/Javacord/Javacord/pull/903))
- Moved permission methods from `ServerChannel[Updater|Builder]` to
`RegularServerChannel[Updater|Builder]`
([https://github.com/Javacord/Javacord/pull/903](https://togithub.com/Javacord/Javacord/pull/903))

##### Deprecations

- Deprecated `MessageBuilder#addFile(...)` in favor of
`MessageBuilder#addAttachment(...)`
- Deprecated
`SlashCommandInteractionOptionsProvider#get[First|Second|Third]Option[Boolean|Long|User|...]Value()`
in favor of `getOption[Boolean|Long|User|...]ValueByIndex(...)`

###
[`v3.3.2`](https://togithub.com/Javacord/Javacord/releases/tag/v3.3.2)

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.3.2' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.3.2</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.3.2")
```

#### Manually

The `javacord-3.3.2-shaded.jar` file contains Javacord and all its
dependencies.

### 📋 Changelog

This version includes an important fix for slash commands and adds
support for select menus.

##### Improvements

- Add support for select menus
([https://github.com/Javacord/Javacord/pull/800](https://togithub.com/Javacord/Javacord/pull/800))

##### Bugfixes

- Fix slash commands in private channels and buggy ephemeral
messages([https://github.com/Javacord/Javacord/pull/801](https://togithub.com/Javacord/Javacord/pull/801))

###
[`v3.3.1`](https://togithub.com/Javacord/Javacord/releases/tag/v3.3.1)

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.3.1' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.3.1</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.3.1")
```

#### Manually

The `javacord-3.3.1-shaded.jar` file contains Javacord and all its
dependencies.

### 📋 Changelog

This version adds support for slash commands, buttons, and many other
smaller features.
It also includes various bugfixes.

##### Improvements

- Add support for slash commands
([https://github.com/Javacord/Javacord/issues/672](https://togithub.com/Javacord/Javacord/issues/672),
[https://github.com/Javacord/Javacord/pull/793](https://togithub.com/Javacord/Javacord/pull/793),
[https://github.com/Javacord/Javacord/pull/792](https://togithub.com/Javacord/Javacord/pull/792),
[https://github.com/Javacord/Javacord/pull/791](https://togithub.com/Javacord/Javacord/pull/791),
[https://github.com/Javacord/Javacord/pull/787](https://togithub.com/Javacord/Javacord/pull/787),
[https://github.com/Javacord/Javacord/pull/786](https://togithub.com/Javacord/Javacord/pull/786),
[https://github.com/Javacord/Javacord/pull/777](https://togithub.com/Javacord/Javacord/pull/777),
[https://github.com/Javacord/Javacord/pull/779](https://togithub.com/Javacord/Javacord/pull/779),
[https://github.com/Javacord/Javacord/pull/776](https://togithub.com/Javacord/Javacord/pull/776),
[https://github.com/Javacord/Javacord/pull/768](https://togithub.com/Javacord/Javacord/pull/768),
[https://github.com/Javacord/Javacord/pull/774](https://togithub.com/Javacord/Javacord/pull/774),
[https://github.com/Javacord/Javacord/pull/739](https://togithub.com/Javacord/Javacord/pull/739),
[https://github.com/Javacord/Javacord/pull/773](https://togithub.com/Javacord/Javacord/pull/773),
[https://github.com/Javacord/Javacord/pull/750](https://togithub.com/Javacord/Javacord/pull/750),
[https://github.com/Javacord/Javacord/pull/675](https://togithub.com/Javacord/Javacord/pull/675))
- You can find more information in the new wiki article for slash
commands: [Slash
Commands](https://javacord.org/wiki/basic-tutorials/interactions/commands.html)
- Add support for buttons
([https://github.com/Javacord/Javacord/pull/758](https://togithub.com/Javacord/Javacord/pull/758),
[https://github.com/Javacord/Javacord/pull/775](https://togithub.com/Javacord/Javacord/pull/775))
- You can find more information in the new wiki article for buttons:
[Buttons](https://javacord.org/wiki/basic-tutorials/interactions/components.html)
- Add support for membership screening pending status
([https://github.com/Javacord/Javacord/pull/790](https://togithub.com/Javacord/Javacord/pull/790))
- Add support for sending multiple embeds
([https://github.com/Javacord/Javacord/pull/789](https://togithub.com/Javacord/Javacord/pull/789))
- Add support for server NSFW levels
([https://github.com/Javacord/Javacord/pull/785](https://togithub.com/Javacord/Javacord/pull/785))
- Add support for role tags
([https://github.com/Javacord/Javacord/pull/738](https://togithub.com/Javacord/Javacord/pull/738))

##### Bugfixes

- Fix NullPointerExceptions in event dispatcher
([https://github.com/Javacord/Javacord/pull/698](https://togithub.com/Javacord/Javacord/pull/698))
- Fix incoming webhooks without a token
([https://github.com/Javacord/Javacord/pull/778](https://togithub.com/Javacord/Javacord/pull/778))
- Fix issue for message references without a message id
([https://github.com/Javacord/Javacord/pull/782](https://togithub.com/Javacord/Javacord/pull/782))
- Use millisecond precision for Cloudfare ratelimits
([https://github.com/Javacord/Javacord/pull/756](https://togithub.com/Javacord/Javacord/pull/756))
- Fix broken `UserChangeXyz` events
([https://github.com/Javacord/Javacord/pull/742](https://togithub.com/Javacord/Javacord/pull/742))
- Fix unwanted request identify ratelimit on resume
([https://github.com/Javacord/Javacord/pull/694](https://togithub.com/Javacord/Javacord/pull/694))
- Fix settings of default global ratelimiter
([https://github.com/Javacord/Javacord/pull/749](https://togithub.com/Javacord/Javacord/pull/749))
- Fix broken channel update handler for server news channels
([https://github.com/Javacord/Javacord/pull/743](https://togithub.com/Javacord/Javacord/pull/743))

##### Deprecations

- `Message#getReferencedMessageId()` has been deprecated in favor of
`Message#getMessageReference()`
([https://github.com/Javacord/Javacord/pull/782](https://togithub.com/Javacord/Javacord/pull/782))

###
[`v3.3.0`](https://togithub.com/Javacord/Javacord/releases/tag/v3.3.0)

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.3.0' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.3.0</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.3.0")
```

#### Manually

The `javacord-3.3.0-shaded.jar` file contains Javacord and all its
dependencies.

### 📋 Changelog

##### Improvements

- Add new message types
([https://github.com/Javacord/Javacord/pull/730](https://togithub.com/Javacord/Javacord/pull/730))

##### Bugfixes

- Fix broken message create events for private messages
([https://github.com/Javacord/Javacord/pull/708](https://togithub.com/Javacord/Javacord/pull/708))
- Fix broken update events for users
([https://github.com/Javacord/Javacord/pull/685](https://togithub.com/Javacord/Javacord/pull/685))

##### Breaking Changes

-   `PrivateCHannel#getRecipient()` now returns an `Optional<User>`

###
[`v3.2.0`](https://togithub.com/Javacord/Javacord/releases/tag/v3.2.0)

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.2.0' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.2.0</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.2.0")
```

#### Manually

The `javacord-3.2.0-shaded.jar` file contains Javacord and all its
dependencies.

### 📋 Changelog

⚠️

**It is recommended to update your bot or your might experience issues
with servers that have the new stage channels**

⚠️

##### Improvements

- Allow sending messages to webhooks
([https://github.com/Javacord/Javacord/pull/573](https://togithub.com/Javacord/Javacord/pull/573))
- Improve allowed mentions
([https://github.com/Javacord/Javacord/pull/587](https://togithub.com/Javacord/Javacord/pull/587)).
- Add methods to get the target of an invite
([https://github.com/Javacord/Javacord/pull/616](https://togithub.com/Javacord/Javacord/pull/616))
- Add `Message#getNonce()`
([https://github.com/Javacord/Javacord/pull/650](https://togithub.com/Javacord/Javacord/pull/650))
- Update to latest Gateway and REST endpoints
([https://github.com/Javacord/Javacord/pull/679](https://togithub.com/Javacord/Javacord/pull/679))
- Add support for replies
([https://github.com/Javacord/Javacord/pull/679](https://togithub.com/Javacord/Javacord/pull/679))
- Editing a message now returns the message
([https://github.com/Javacord/Javacord/pull/650](https://togithub.com/Javacord/Javacord/pull/650))
- Add `Message#crossPost()`
([https://github.com/Javacord/Javacord/pull/650](https://togithub.com/Javacord/Javacord/pull/650))
- Add methods to ban a user by their id
([https://github.com/Javacord/Javacord/pull/667](https://togithub.com/Javacord/Javacord/pull/667))
- Add basic support for new stage channel type
([https://github.com/Javacord/Javacord/pull/726](https://togithub.com/Javacord/Javacord/pull/726))
- Add support for multiple activities
([https://github.com/Javacord/Javacord/pull/692](https://togithub.com/Javacord/Javacord/pull/692))

##### Breaking Changes

- `Icon#asInputStream` now returns an InputStream directly instead of a
future
([https://github.com/Javacord/Javacord/pull/448](https://togithub.com/Javacord/Javacord/pull/448))
- `AllowedMentions#getAllowedRoleMentions()` and
`#getAllowedUserMentions` now return an `Optional<List<Long>>` instead
of `List<Long>`
([https://github.com/Javacord/Javacord/pull/587](https://togithub.com/Javacord/Javacord/pull/587))
-   Removed `AllowedMentionsgetGeneralMentions()`
- Changed return type of `RichInvite#getInviter()` to `Optional<User>`
moved it to `Invite#getInviter()`
([https://github.com/Javacord/Javacord/pull/616](https://togithub.com/Javacord/Javacord/pull/616))
- Editing a message now returns `CompletableFuture<Message>` instead of
`CompletableFuture<Void>`
([https://github.com/Javacord/Javacord/pull/650](https://togithub.com/Javacord/Javacord/pull/650))
- `Webhook#getToken()` was moved to `IncomingWebhook` and now returns
`String`
([https://github.com/Javacord/Javacord/pull/573](https://togithub.com/Javacord/Javacord/pull/573))

##### Bugfixes

- Fix exception for servers with stage channels
([https://github.com/Javacord/Javacord/pull/726](https://togithub.com/Javacord/Javacord/pull/726))
- Fix privacy logger for empty tokens
([https://github.com/Javacord/Javacord/pull/656](https://togithub.com/Javacord/Javacord/pull/656))
- Add missing server features
([https://github.com/Javacord/Javacord/pull/723](https://togithub.com/Javacord/Javacord/pull/723))

###
[`v3.1.2`](https://togithub.com/Javacord/Javacord/releases/tag/v3.1.2)

### 📦 Download

#### Using a Build Manager

##### Gradle

```groovy
repositories { mavenCentral() }
dependencies { implementation 'org.javacord:javacord:3.1.2' }
```

##### Maven

```xml
<dependency>
    <groupId>org.javacord</groupId>
    <artifactId>javacord</artifactId>
    <version>3.1.2</version>
    <type>pom</type>
</dependency>
```

##### Sbt

```scala
libraryDependencies ++= Seq("org.javacord" % "javacord" % "3.1.2")
```

#### Manually

The `javacord-3.1.2-shaded.jar` file contains Javacord and all its
dependencies.

### 📋 Changelog

##### Improvements

- Added `Server#requestOwner()` method
([https://github.com/Javacord/Javacord/pull/639](https://togithub.com/Javacord/Javacord/pull/639))
- Added `ActivityType.COMPETING`
([https://github.com/Javacord/Javacord/pull/645](https://togithub.com/Javacord/Javacord/pull/645))
- Added `User#getUserFlags()` (i.e., badges)
([https://github.com/Javacord/Javacord/pull/637](https://togithub.com/Javacord/Javacord/pull/637))
- Added events for invite creation and deletion
([https://github.com/Javacord/Javacord/pull/644](https://togithub.com/Javacord/Javacord/pull/644))
- Added utility method to convert a message's content to a readable
string without access to the message object
([https://github.com/Javacord/Javacord/pull/640](https://togithub.com/Javacord/Javacord/pull/640))

##### Bugfixes

- Added missing/new websocket close codes
([https://github.com/Javacord/Javacord/pull/646](https://togithub.com/Javacord/Javacord/pull/646))
- Fixed multiple role related issue
([https://github.com/Javacord/Javacord/pull/640](https://togithub.com/Javacord/Javacord/pull/640))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/Incendo/cloud-discord).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjcuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyNy4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Using the MessageBuilder to edit messages
4 participants