Esta biblioteca de código aberto destina-se à implementação de bots no Discord usando o gateway em tempo real e a API REST. Ele fornece funcionalidade baseada em eventos para implementar bots de qualquer tipo, permitindo aplicações eficazes e escaláveis.
Os principais conceitos do JDA foram desenvolvidos para facilitar a construção de aplicativos escaláveis:
Você pode aprender mais visitando nosso wiki ou consultando nossos Javadocs.
Esta biblioteca está disponível no maven central. A versão mais recente é sempre mostrada no GitHub Release.
A versão mínima do Java suportada pelo JDA é Java SE 8 . JDA também usa JSR 305 para oferecer suporte a interoperabilidade sólida com Kotlin pronto para uso.
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 >
Para usar esta biblioteca, você deve criar um aplicativo no painel do aplicativo Discord e obter seu token de bot. Você pode encontrar um guia passo a passo para isso em nossa página wiki Criando um Discord Bot.
Fornecemos vários exemplos para apresentá-lo ao JDA. Você também pode dar uma olhada em nosso Wiki oficial, documentação e perguntas frequentes.
Cada bot implementado pelo JDA começa usando JDABuilder ou DefaultShardManagerBuilder. Ambos os construtores fornecem um conjunto de predefinições padrão para uso de cache e eventos que deseja receber:
createDefault
- Habilita cache para usuários ativos em canais de voz e todos os sinalizadores de cachecreateLight
- Desativa todo o cache do usuário e sinalizadores de cachecreate
– Ativa a fragmentação de membros, armazena em cache todos os usuários e ativa todos os sinalizadores de cacheRecomendamos a leitura do guia sobre cache e intenções para ter uma ideia de como configurar seu bot corretamente. Aqui estão alguns casos de uso possíveis:
Observação
O exemplo a seguir faz uso da intenção privilegiada GatewayIntent.MESSAGE_CONTENT
, que deve ser explicitamente habilitada no painel do seu aplicativo. Você pode descobrir mais sobre intenções em nosso guia wiki.
Simplesmente registrando mensagens no console. Fazendo uso do JDABuilder, o ponto de entrada pretendido para bots menores que não pretendem crescer para milhares de guildas.
Iniciando seu bot e anexando um ouvinte de evento, usando as intenções corretas:
public static void main ( String [] args ) {
JDABuilder . createLight ( token , EnumSet . of ( GatewayIntent . GUILD_MESSAGES , GatewayIntent . MESSAGE_CONTENT ))
. addEventListeners ( new MessageReceiveListener ())
. build ();
}
Seu ouvinte de evento poderia ser assim:
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 ());
}
}
Você pode encontrar um exemplo mais completo com a classe MessageLoggerExample.
Este é um bot que faz uso de interações para responder aos comandos do usuário. Ao contrário do bot de registro de mensagens, este bot pode funcionar sem nenhuma intenção habilitada, uma vez que as interações estão sempre disponíveis.
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 ();
}
Um ouvinte de evento que responde a comandos poderia ter esta aparência:
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 ;
}
}
}
Você pode encontrar um exemplo mais completo com a classe SlashBotExample.
Nesta biblioteca, a interface RestAction é usada como construtor de solicitações para todos os endpoints da API. Esta interface representa um construtor de solicitações lentas, conforme mostrado neste exemplo simples:
channel . sendMessage ( "Hello Friend!" )
. addFiles ( FileUpload . fromData ( greetImage )) // Chain builder methods to configure the request
. queue () // Send the request asynchronously
Importante
A chamada final para queue()
envia a solicitação. Você também pode enviar a solicitação de forma síncrona ou usando futuros, confira nosso guia estendido no RestAction Wiki.
A interface RestAction também oferece suporte a vários operadores para evitar o inferno de retorno de chamada:
map
RestAction
para um valor diferenteflatMap
RestAction
no resultadodelay
Bem como combinadores como:
and
allOf
mapToResult
)zip
and
, mas combina os resultados em uma listaE configuradores como:
timeout
e deadline
setCheck
reason
Exemplo :
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
}
Isso poderia então ser usado no código:
selfDestruct ( channel , "Hello friend, this is my secret message" ). queue ();
Criado e mantido por MinnDevelopment.
Fornece extensões Kotlin para RestAction e eventos que fornecem uma experiência Kotlin mais idiomática.
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()
}
}
Existem vários exemplos disponíveis no README.
Criado por sedmelluq e agora mantido pela comunidade lavalink
Lavaplayer é a biblioteca mais popular usada por Music Bots criada em Java. É altamente compatível com JDA e Discord4J e permite reproduzir áudio do YouTube, Soundcloud, Twitch, Bandcamp e mais provedores.
A biblioteca pode ser facilmente expandida para mais serviços implementando seu próprio AudioSourceManager e registrando-o. Recomendamos usar também o udpqueue além do lavaplayer, para evitar problemas de gagueira causados por pausas do GC.
Recomenda-se ler a seção Uso do Lavaplayer para entender uma implementação adequada.
Sedmelluq forneceu uma demonstração em seu repositório que apresenta um exemplo de implementação para JDA: https://github.com/lavalink-devs/lavaplayer/tree/master/demo-jda
Criado e mantido por sedmelluq e estendido por MinnDevelopment
Fornece uma implementação nativa para o JDA Audio Send-System para evitar pausas do GC que podem causar problemas com a reprodução contínua de áudio.
Observe que este sistema de envio cria um cliente UDP extra que faz com que o recebimento de áudio não funcione mais corretamente, uma vez que o Discord identifica o cliente UDP de envio como o receptor.
JDABuilder builder = JDABuilder . createDefault ( BOT_TOKEN )
. setAudioSendFactory ( new NativeAudioSendFactory ());
Criado por Freya Arbjerg e agora mantido pela comunidade lavalink.
Lavalink é um nó de envio de áudio autônomo popular baseado em Lavaplayer. Lavalink foi construído com a escalabilidade em mente e permite streaming de música através de vários servidores. Suporta a maioria dos recursos do Lavaplayer.
Lavalink é usado por muitos bots grandes, bem como por desenvolvedores de bots que não podem usar uma biblioteca Java como o Lavaplayer. Se você planeja servir música em menor escala com JDA, geralmente é preferível usar o Lavaplayer diretamente, pois é mais fácil.
Lavalink-Client é o cliente oficial Lavalink para JDA.
Se você quiser contribuir com o JDA, certifique-se de basear seu branch em nosso branch master (ou um branch de recursos) e criar seu PR nesse mesmo branch.
Por favor, siga nossas Diretrizes de Contribuição.
Não espere que sua solicitação pull receba atenção imediata; às vezes, levará muito tempo para obter uma resposta. Você pode entrar em nosso servidor discord e perguntar #lib-dev antes de começar a trabalhar em um novo PR, para obter feedback mais imediato dos membros da nossa comunidade.
Devido à natureza da API Discord, a biblioteca introduzirá regularmente alterações importantes para permitir uma rápida adoção de recursos mais recentes. Tentamos manter essas alterações significativas no mínimo, mas não podemos evitá-las totalmente.
A maioria das alterações significativas resultará em um pequeno aumento na versão ( 5.1.2
→ 5.2.0
).