Overview
After many months of waiting, this release finally adds support for user-installable apps. This will allow you to make use of interactions (and especially commands) anywhere on Discord, by installing the application on a user directly instead of a guild.
Creating User-Installable Apps
To create a user-installable app, you first have to enable the feature in your application dashboard in the installation settings:
Once enabled, you can create user-installable commands, by changing the integration types:
Commands.slash("say", "Makes the bot say what you tell it to")
// Allow the command to be used anywhere (Bot DMs, Guild, Friend DMs, Group DMs)
.setContexts(InteractionContextType.ALL)
// Allow the command to be installed on users instead of guilds
.setIntegrationTypes(IntegrationType.USER_INSTALL)
.addOption(STRING, "content", "What the bot should say", true)
Installing to a User
To actually install your app to a user, you can use the generator provided by discord. In the OAuth2 URL Generator, change the integration type to User Install:
The generated link, can now be used to install your application to the authorizing user.
Detached Guilds / Roles / Channels / Members
This comes with a few changes to expectations around JDA functionality. Since interactions can now come from anywhere on Discord, some features aren't available in certain contexts.
Some entities can now appear as Detachable Entity, which essentially means that they come from a guild or private channel, that your bot is not directly involved in.
For instance, if a command is installed on a user and that command is used in a guild, your bot is not necessarily a member of that guild. Since the bot is not a member, it only has access to the guild context, that the interaction event provides. Many features such as channels, roles, or members are not accessible without being an actual member of the guild. If you try to use or access anything that isn't accessible, JDA will throw a new DetachedEntityException.
New Features
- Add
Guild#retrieveMemberVoiceState
by @PascalNB in #2729 - Add support for user-installable apps by @freya022 in #2633
Full Changelog: v5.2.3...v5.3.0
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:5.3.0")
}
Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>5.3.0</version>
</dependency>