
Kerangka kerja Kotlin-First (dan Java) yang membuat membuat Bot Perselisihan sepotong kue, menggunakan Perpustakaan JDA.
Kerangka kerja yang sedang dibangun di sekitar peristiwa dan injeksi ketergantungan, proyek Anda dapat memanfaatkannya dan menghindari mengesampingkan objek di sekitar, sementara juga dengan mudah dapat menggunakan layanan yang disediakan oleh kerangka kerja.
@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()
}
} Kemudian dapat digunakan sebagai @Bot ban @freya02 1 days A totally valid reason
Beginilah konten bantuan akan terlihat dengan sub -perintah dan beberapa variasi lagi:

RichTextParser ) dan Emoji Resolvers (Turning :joy: Into?)Dan jauh lebih banyak fitur!
Anda sangat disarankan untuk memiliki beberapa pengalaman dengan Kotlin (atau Java), OOP, JDA dan Dasar -dasar Injeksi Ketergantungan sebelum Anda mulai menggunakan perpustakaan ini.
Pergilah ke wiki untuk memulai, Anda juga dapat memeriksa contoh -contohnya.
< dependencies >
< dependency >
< groupId >io.github.freya022</ groupId >
< artifactId >BotCommands</ artifactId >
< version >VERSION</ version >
</ dependency >
</ dependencies > repositories {
mavenCentral()
}
dependencies {
implementation ' io.github.freya022:BotCommands:VERSION '
}Atau, Anda dapat menggunakan Jitpack untuk menggunakan versi snapshot , Anda dapat merujuk ke JDA Wiki untuk informasi lebih lanjut.
Berikut adalah bagaimana Anda akan membuat perintah slash yang mengirim pesan di saluran yang ditentukan.
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 Pengguna dapat menggunakan templat langsung yang disediakan dalam file zip ini, membantu Anda membuat perintah dan penangan lainnya dengan templat yang telah ditentukan sebelumnya, untuk Kotlin dan Java, menjaga skema penamaan yang konsisten dan bertindak sebagai lembar curang.
Misalnya, jika Anda mengetikkan slashCommand di kelas Anda, ini akan menghasilkan perintah slash dan memandu Anda melalui deklarasi.
Daftar template langsung dapat ditemukan di Settings > Editor > Live Templates , dalam grup BotCommands 3.X - [Language] .
Untuk panduan instalasi, Anda dapat mengikuti panduan ini dari JetBrains.
Jangan ragu untuk bergabung dengan server dukungan jika Anda memiliki pertanyaan!
Jika Anda ingin berkontribusi, pastikan untuk mendasarkan cabang Anda di 3.X , dan buat PR Anda darinya.
Akan dihargai untuk fokus pada peningkatan dokumentasi, seperti wiki, dokumentasi perpustakaan, atau dengan membuat contoh.
Pemelihara akan fokus pada laporan bug dan permintaan fitur, yang dapat Anda buat masalah.
Baca panduan yang berkontribusi untuk detail lebih lanjut.