Cette bibliothèque open source est destinée à l'implémentation de robots sur Discord à l'aide de la passerelle temps réel et de l'API REST. Il fournit des fonctionnalités basées sur des événements pour implémenter des robots de toute sorte, permettant ainsi des applications efficaces et évolutives.
Les concepts de base de JDA ont été développés pour faciliter la création d'applications évolutives :
Vous pouvez en savoir plus en visitant notre wiki ou en référençant nos Javadocs.
Cette bibliothèque est disponible sur maven central. La dernière version est toujours affichée dans la version GitHub.
La version Java minimale prise en charge par JDA est Java SE 8 . JDA utilise également JSR 305 pour prendre en charge une interopérabilité solide avec Kotlin dès le départ.
repositories {
mavenCentral()
}
dependencies {
implementation( " net.dv8tion:JDA: $v ersion " ) { // replace $version with the latest version
// Optionally disable audio natives to reduce jar size by excluding `opus-java`
// Gradle DSL:
// exclude module: 'opus-java'
// Kotlin DSL:
// exclude(module="opus-java")
}
}
< dependency >
< groupId >net.dv8tion groupId >
< artifactId >JDA artifactId >
< version >$version version >
dependency >
Pour utiliser cette bibliothèque, vous devez créer une application dans le tableau de bord de l'application Discord et récupérer votre jeton de bot. Vous pouvez trouver un guide étape par étape pour cela dans notre page wiki Création d'un robot Discord.
Nous fournissons un certain nombre d’exemples pour vous présenter JDA. Vous pouvez également consulter notre wiki officiel, notre documentation et notre FAQ.
Chaque bot implémenté par JDA commence par utiliser JDABuilder ou DefaultShardManagerBuilder. Les deux constructeurs fournissent un ensemble de préréglages par défaut pour l'utilisation du cache et les événements qu'il souhaite recevoir :
createDefault
- Active le cache pour les utilisateurs actifs dans les canaux vocaux et tous les indicateurs de cachecreateLight
- Désactive tous les caches utilisateur et les indicateurs de cachecreate
- Active le regroupement des membres, met en cache tous les utilisateurs et active tous les indicateurs de cacheNous vous recommandons de lire le guide sur la mise en cache et les intentions pour avoir une idée de la configuration correcte de votre bot. Voici quelques cas d’utilisation possibles :
Note
L'exemple suivant utilise l' intention privilégiée GatewayIntent.MESSAGE_CONTENT
, qui doit être explicitement activée dans le tableau de bord de votre application. Vous pouvez en savoir plus sur les intentions dans notre guide wiki.
Enregistrer simplement les messages sur la console. Utiliser JDABuilder, le point d'entrée prévu pour les petits robots qui n'ont pas l'intention de se développer en milliers de guildes.
Démarrez votre bot et attachez un écouteur d'événement, en utilisant les bonnes intentions :
public static void main ( String [] args ) {
JDABuilder . createLight ( token , EnumSet . of ( GatewayIntent . GUILD_MESSAGES , GatewayIntent . MESSAGE_CONTENT ))
. addEventListeners ( new MessageReceiveListener ())
. build ();
}
Votre écouteur d'événement pourrait ressembler à ceci :
public class MessageReceiveListener extends ListenerAdapter {
@ Override
public void onMessageReceived ( MessageReceivedEvent event ) {
System . out . printf ( "[%s] %#s: %s n " ,
event . getChannel (),
event . getAuthor (),
event . getMessage (). getContentDisplay ());
}
}
Vous pouvez trouver un exemple plus détaillé avec la classe MessageLoggerExample.
Il s'agit d'un bot qui utilise les interactions pour répondre aux commandes des utilisateurs. Contrairement au robot de journalisation des messages, ce robot peut fonctionner sans aucune intention activée, puisque les interactions sont toujours disponibles.
public static void main ( String [] args ) {
JDA jda = JDABuilder . createLight ( token , Collections . emptyList ())
. addEventListeners ( new SlashCommandListener ())
. build ();
// Register your commands to make them visible globally on Discord:
CommandListUpdateAction commands = jda . updateCommands ();
// Add all your commands on this action instance
commands . addCommands (
Commands . slash ( "say" , "Makes the bot say what you tell it to" )
. addOption ( STRING , "content" , "What the bot should say" , true ), // Accepting a user input
Commands . slash ( "leave" , "Makes the bot leave the server" )
. setGuildOnly ( true ) // this doesn't make sense in DMs
. setDefaultPermissions ( DefaultMemberPermissions . DISABLED ) // only admins should be able to use this command.
);
// Then finally send your commands to discord using the API
commands . queue ();
}
Un écouteur d'événements qui répond aux commandes pourrait ressembler à ceci :
public class SlashCommandListener extends ListenerAdapter {
@ Override
public void onSlashCommandInteraction ( SlashCommandInteractionEvent event ) {
switch ( event . getName ()) {
case "say" -> {
String content = event . getOption ( "content" , OptionMapping :: getAsString );
event . reply ( content ). queue ();
};
case "leave" -> {
event . reply ( "I'm leaving the server now!" )
. setEphemeral ( true ) // this message is only visible to the command user
. flatMap ( m -> event . getGuild (). leave ()) // append a follow-up action using flatMap
. queue (); // enqueue both actions to run in sequence (send message -> leave guild)
};
default -> return ;
}
}
}
Vous pouvez trouver un exemple plus détaillé avec la classe SlashBotExample.
Dans cette bibliothèque, l'interface RestAction est utilisée comme générateur de requêtes pour tous les points de terminaison de l'API. Cette interface représente un générateur de requêtes différées, comme le montre cet exemple simple :
channel . sendMessage ( "Hello Friend!" )
. addFiles ( FileUpload . fromData ( greetImage )) // Chain builder methods to configure the request
. queue () // Send the request asynchronously
Important
Le dernier appel à queue()
envoie la requête. Vous pouvez également envoyer la demande de manière synchrone ou en utilisant des contrats à terme, consultez notre guide étendu dans le wiki RestAction.
L'interface RestAction prend également en charge un certain nombre d'opérateurs pour éviter l'enfer des rappels :
map
RestAction
en une valeur différenteflatMap
RestAction
sur le résultatdelay
Ainsi que des combinateurs comme :
and
allOf
mapToResult
)zip
and
, mais combine les résultats dans une listeEt des configurateurs comme :
timeout
et deadline
setCheck
reason
Exemple :
public RestAction < Void > selfDestruct ( MessageChannel channel , String content ) {
return channel . sendMessage ( "The following message will destroy itself in 1 minute!" )
. addActionRow ( Button . danger ( "delete" , "Delete now" )) // further amend message before sending
. delay ( 10 , SECONDS , scheduler ) // after sending, wait 10 seconds
. flatMap (( it ) -> it . editMessage ( content )) // then edit the message
. delay ( 1 , MINUTES , scheduler ) // wait another minute
. flatMap ( Message :: delete ); // then delete
}
Cela pourrait ensuite être utilisé dans le code :
selfDestruct ( channel , "Hello friend, this is my secret message" ). queue ();
Créé et maintenu par MinnDevelopment.
Fournit des extensions Kotlin pour RestAction et des événements qui offrent une expérience Kotlin plus idiomatique.
fun main () {
val jda = light( BOT_TOKEN )
jda.onCommand( " ping " ) { event ->
val time = measureTime {
event.reply( " Pong! " ).await() // suspending
}.inWholeMilliseconds
event.hook.editOriginal( " Pong: $time ms " ).queue()
}
}
Il existe un certain nombre d'exemples disponibles dans le README.
Créé par sedmelluq et maintenant maintenu par la communauté lavalink
Lavaplayer est la bibliothèque la plus populaire utilisée par Music Bots créée en Java. Il est hautement compatible avec JDA et Discord4J et permet la lecture audio de YouTube, Soundcloud, Twitch, Bandcamp et d'autres fournisseurs.
La bibliothèque peut facilement être étendue à davantage de services en implémentant votre propre AudioSourceManager et en l'enregistrant. Nous recommandons d'utiliser également udpqueue en plus de lavaplayer, pour éviter les problèmes de bégaiement causés par les pauses du GC.
Il est recommandé de lire la section Utilisation de Lavaplayer pour comprendre une implémentation appropriée.
Sedmelluq a fourni une démo dans son référentiel qui présente un exemple d'implémentation pour JDA : https://github.com/lavalink-devs/lavaplayer/tree/master/demo-jda
Créé et maintenu par sedmelluq et étendu par MinnDevelopment
Fournit une implémentation native pour le système d'envoi audio JDA afin d'éviter les pauses GC pouvant causer des problèmes de lecture audio continue.
Notez que ce système d'envoi crée un client UDP supplémentaire qui empêche la réception audio de fonctionner correctement, car Discord identifie le client UDP expéditeur comme le récepteur.
JDABuilder builder = JDABuilder . createDefault ( BOT_TOKEN )
. setAudioSendFactory ( new NativeAudioSendFactory ());
Créé par Freya Arbjerg et maintenant maintenu par la communauté lavalink.
Lavalink est un nœud d'envoi audio autonome populaire basé sur Lavaplayer. Lavalink a été conçu dans un souci d'évolutivité et permet de diffuser de la musique via de nombreux serveurs. Il prend en charge la plupart des fonctionnalités de Lavaplayer.
Lavalink est utilisé par de nombreux gros robots, ainsi que par les développeurs de robots qui ne peuvent pas utiliser une bibliothèque Java comme Lavaplayer. Si vous envisagez de diffuser de la musique à plus petite échelle avec JDA, il est souvent préférable d'utiliser simplement Lavaplayer directement car c'est plus simple.
Lavalink-Client est le client Lavalink officiel de JDA.
Si vous souhaitez contribuer à JDA, assurez-vous de baser votre branche sur notre branche principale (ou une branche de fonctionnalités) et de créer votre PR dans cette même branche.
Veuillez suivre nos directives de contribution.
Ne vous attendez pas à ce que votre pull request reçoive une attention immédiate, il faudra parfois beaucoup de temps pour obtenir une réponse. Vous pouvez rejoindre notre serveur Discord et demander en #lib-dev avant de commencer à travailler sur un nouveau PR, pour obtenir des commentaires plus immédiats des membres de notre communauté.
En raison de la nature de l'API Discord, la bibliothèque introduira régulièrement des modifications importantes pour permettre une adoption rapide de nouvelles fonctionnalités. Nous essayons de minimiser ces changements majeurs, mais nous ne pouvons pas les éviter complètement.
La plupart des modifications majeures entraîneront une modification mineure de la version ( 5.1.2
→ 5.2.0
).