
Un cadre Kotlin-First (et Java) qui fait de la création de bots Discord un morceau de gâteau, en utilisant la bibliothèque JDA.
Le cadre étant construit autour d'événements et d'injection de dépendance, votre projet peut en profiter et éviter de passer des objets, tout en étant facilement en mesure d'utiliser des services fournis par le cadre.
@Command
class SlashBan : ApplicationCommand () {
@JDASlashCommand(name = " ban " , description = " Bans an user " )
suspend fun onSlashBan (
event : GuildSlashEvent ,
@SlashOption(description = " The user to ban " ) user : User ,
@SlashOption(description = " Timeframe of messages to delete " ) timeframe : Long ,
// Use choices that come from the TimeUnit resolver
@SlashOption(description = " Unit of the timeframe " , usePredefinedChoices = true ) unit : TimeUnit , // A resolver is used here
@SlashOption(description = " Why the user gets banned " ) reason : String = " No reason supplied" // Optional
) {
// ...
event.reply_( " ${user.asMention} has been banned for ' $reason ' " , ephemeral = true )
.deleteDelayed( 5 .seconds)
.await()
}
}
@Command
class TextBan : TextCommand () {
@JDATextCommandVariation(path = [ " ban " ], description = " Bans the mentioned user " )
suspend fun onTextBan (
event : BaseCommandEvent ,
@TextOption user : User ,
@TextOption(example = " 2 " ) timeframe : Long ,
@TextOption unit : TimeUnit , // A resolver is used here
@TextOption(example = " Get banned " ) reason : String = " No reason supplied" // Optional
) {
// ...
event.reply( " ${user.asMention} has been banned " )
.deleteDelayed( 5 .seconds)
.await()
}
} Peut ensuite être utilisé comme @Bot ban @freya02 1 days A totally valid reason
Voici à quoi ressemblerait le contenu d'aide avec une sous-commande et quelques variantes supplémentaires:

RichTextParser ) et Emoji Resolvers (Turning :joy: en?)Et bien plus de fonctionnalités!
Vous êtes fortement recommandé d'avoir une certaine expérience avec les bases de Kotlin (ou Java), OOP, JDA et de dépendance avant de commencer à utiliser cette bibliothèque.
Rendez-vous sur le wiki pour commencer, vous pouvez également consulter les exemples.
< dependencies >
< dependency >
< groupId >io.github.freya022</ groupId >
< artifactId >BotCommands</ artifactId >
< version >VERSION</ version >
</ dependency >
</ dependencies > repositories {
mavenCentral()
}
dependencies {
implementation ' io.github.freya022:BotCommands:VERSION '
}Alternativement, vous pouvez utiliser Jitpack pour utiliser des versions instantanées , vous pouvez vous référer au Wiki JDA pour plus d'informations.
Voici comment créer une commande Slash qui envoie un message dans un canal spécifié.
private val wastebasket : UnicodeEmoji by lazyUnicodeEmoji { Emojis . WASTEBASKET }
@Command
@RequiresComponents // Disables the command if components are not enabled
class SlashSay ( private val buttons : Buttons ) : ApplicationCommand() {
@JDASlashCommand(name = " say " , description = " Sends a message in a channel " )
suspend fun onSlashSay (
event : GuildSlashEvent ,
@SlashOption(description = " Channel to send the message in " ) channel : TextChannel ,
@SlashOption(description = " What to say " ) content : String
) {
val deleteButton = buttons.danger(wastebasket).ephemeral {
bindTo { buttonEvent ->
buttonEvent.deferEdit().queue()
buttonEvent.hook.deleteOriginal().await()
}
}
event.reply_( " Done! " , ephemeral = true )
.deleteDelayed( 5 .seconds)
.queue()
channel.sendMessage(content)
.addActionRow(deleteButton)
.await()
}
} private val wastebasket : UnicodeEmoji by lazyUnicodeEmoji { Emojis . WASTEBASKET }
@Command
@RequiresComponents // Disables the command if components are not enabled
class SlashSay ( private val buttons : Buttons ) : GlobalApplicationCommandProvider {
suspend fun onSlashSay ( event : GuildSlashEvent , channel : TextChannel , content : String ) {
val deleteButton = buttons.danger(wastebasket).ephemeral {
bindTo { buttonEvent ->
buttonEvent.deferEdit().queue()
buttonEvent.hook.deleteOriginal().await()
}
}
event.reply_( " Done! " , ephemeral = true )
.deleteDelayed( 5 .seconds)
.queue()
channel.sendMessage(content)
.addActionRow(deleteButton)
.await()
}
// This is nice if you need to run your own code to declare commands
// For example, a loop to create commands based on an enum
// If you don't need any dynamic stuff, just stick to annotations
override fun declareGlobalApplicationCommands ( manager : GlobalApplicationCommandManager ) {
manager.slashCommand( " say " , function = ::onSlashSay) {
description = " Sends a message in a channel "
option( " channel " ) {
description = " Channel to send the message in "
}
option( " content " ) {
description = " What to say "
}
}
}
} @ Command
@ RequiresComponents // Disables the command if components are not enabled
public class SlashSay extends ApplicationCommand {
// Little trick to get the emoji lazily, this will reduce the startup impact
static class Emojis {
private static final UnicodeEmoji WASTEBASKET = EmojiUtils . asUnicodeEmoji ( net . fellbaum . jemoji . Emojis . WASTEBASKET );
}
private final Buttons buttons ;
public SlashSay ( Buttons buttons ) {
this . buttons = buttons ;
}
@ JDASlashCommand ( name = "say" , description = "Sends a message in a channel" )
public void onSlashSay (
GuildSlashEvent event ,
@ SlashOption ( description = "Channel to send the message in" ) TextChannel channel ,
@ SlashOption ( description = "What to say" ) String content
) {
final Button deleteButton = buttons . danger ( Emojis . WASTEBASKET ). ephemeral ()
. bindTo ( buttonEvent -> {
buttonEvent . deferEdit (). queue ();
buttonEvent . getHook (). deleteOriginal (). queue ();
})
. build ();
event . reply ( "Done!" )
. setEphemeral ( true )
. delay ( Duration . ofSeconds ( 5 ))
. flatMap ( InteractionHook :: deleteOriginal )
. queue ();
channel . sendMessage ( content )
. addActionRow ( deleteButton )
. queue ();
}
}Les utilisateurs d'idées Intellij peuvent utiliser des modèles en direct fournis dans ce fichier zip, vous aidant à créer des commandes et d'autres gestionnaires avec des modèles prédéfinis, pour Kotlin et Java, en gardant un schéma de dénomination cohérent et en agissant comme une feuille de triche.
Par exemple, si vous tapez slashCommand dans votre classe, cela générera une commande Slash et vous guidera à travers la déclaration.
Une liste de modèles en direct peut être trouvée dans Settings > Editor > Live Templates , dans le groupe BotCommands 3.X - [Language] .
Pour un guide d'installation, vous pouvez suivre ce guide de JetBrains.
N'hésitez pas à rejoindre le serveur d'assistance si vous avez une question!
Si vous souhaitez contribuer, assurez-vous de baser votre branche sur 3.X et créez votre PR à partir de celui-ci.
Il serait apprécié de se concentrer sur l'amélioration de la documentation, comme le wiki, la documentation de la bibliothèque ou en créant des exemples.
Les agents se concentreront sur les rapports de bogues et les demandes de fonctionnalités, pour lesquelles vous pouvez créer des problèmes.
Lisez le guide contributif pour plus de détails.