
Ein Kotlin-Erst- (und Java) -Rahmen, mit dem die Erstellung von Discord Bots ein Stück Kuchen unter Verwendung der JDA-Bibliothek erzeugt wird.
Das Rahmen, das sich um Ereignisse und Abhängigkeitsinjektionen basiert, kann Ihr Projekt dies nutzen und vermeiden, Objekte zu übergeben, und kann gleichzeitig die in der Lage sein, Dienste zu nutzen, die vom Framework bereitgestellt werden.
@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()
}
} Kann dann als @Bot ban @freya02 1 days A totally valid reason verwendet werden
So würde der Hilfeinhalt mit einem Unterbefehl und ein paar weiteren Variationen aussehen:

RichTextParser ) und Emoji Resolvers (Turn :joy: In?)Und viel mehr Funktionen!
Es wird dringend empfohlen, Erfahrung mit Kotlin (oder Java), OOP, JDA und Abhängigkeitsinjektionskonstruktionen zu haben, bevor Sie diese Bibliothek verwenden.
Besuchen Sie das Wiki, um loszulegen. Sie können auch die Beispiele überprüfen.
< dependencies >
< dependency >
< groupId >io.github.freya022</ groupId >
< artifactId >BotCommands</ artifactId >
< version >VERSION</ version >
</ dependency >
</ dependencies > repositories {
mavenCentral()
}
dependencies {
implementation ' io.github.freya022:BotCommands:VERSION '
}Alternativ können Sie Jitpack verwenden, um Snapshot -Versionen zu verwenden. Weitere Informationen finden Sie im JDA -Wiki.
So erstellen Sie einen Slash -Befehl, der eine Nachricht in einem bestimmten Kanal sendet.
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 ();
}
}Intellij Idea -Benutzer können Live -Vorlagen verwenden, die in dieser ZIP -Datei bereitgestellt werden, um Befehle und andere Handler mit vordefinierten Vorlagen für Kotlin und Java zu erstellen, ein konsequentes Namensschema beizubehalten und als Cheatsheet zu fungieren.
Wenn Sie beispielsweise slashCommand in Ihrer Klasse eingeben, generiert dies einen Slash -Befehl und führt Sie durch die Erklärung.
Eine Liste der Live -Vorlage finden Sie in Settings > Editor > Live Templates in der Gruppe BotCommands 3.X - [Language] .
Für eine Installationshandbuch können Sie diese Anleitung von JetBrains folgen.
Zögern Sie nicht, sich dem Support -Server anzuschließen, wenn Sie Fragen haben!
Wenn Sie einen Beitrag leisten möchten, stellen Sie sicher, dass Sie Ihre Filiale auf 3.X stützen und Ihre PR daraus erstellen.
Es wäre geschätzt, sich auf die Verbesserung der Dokumentation wie das Wiki, die Bibliotheksdokumentation oder durch das Erstellen von Beispielen zu konzentrieren.
Die Besucher konzentrieren sich auf Fehlerberichte und Feature -Anfragen, für die Sie Probleme erstellen können.
Lesen Sie den beitragenden Leitfaden für weitere Details.