Java Discord Bot Kütüphanesi (KCommando)

kcommando.png
quality.png build.png
Herkese selamlar. Bir süre önce yaptığım kütüphaneyi tüm forum ile paylaşma isteğim üzerine bu girdiyi yazıyorum. Java ile Discord bot yapanlar biliyordur ki komutları işlemek için baştan bir komut işleyici (CommandHandler) arayüzü yapmamız gerekiyor. Yaptığım projelerde sürekli baştan bir komut sistemi yapmak yerine sabit bir kütüphane yapıp kullanma fikrine oldukça ılımlı baktım. Sonucunda da ortaya bu kütüphane çıktı. (GitHub deposuna gitmek için tıklayın.)

Neler Vaat Ediyor?

Kütüphanem sabit olarak JDA ve Javacord için destek veriyor. Farklı Discord API Wrapper'ları için istek gelmediği için henüz destek eklemedim. Proje tamamen modüler olduğu için kolayca her türlü projeye entegre edilebilir. Ayrıca gelişmiş bir bot yaparken ihtiyaç duyulması halinde kütüphanenin belli noktalarının değiştirilebilmesi için çaba harcadım. CommandHandler sınıfı içerisinde bir yeri değiştirmek istediğinizde CommandHandler'ı extend eden bir sınıf oluşturup kolayca değiştirmek istediğiniz methodu override edebiliyorsunuz. Devamında ise bu özel sınıfı kullanması üzere kütüphaneye belirtmeniz yeterli oluyor.

KCommando'nun Sunduğu Özellikler

  • Yanlış komut kullanımında benzer komutları sadece bir callback ile kullanabilme,
  • Komutların asenkron çalışıp çalışmayacağını belirleme,
  • Sunuculara özel prefix (komut ön eki) desteği,
  • Bir kullanıcıyı bottan yasaklayabilme,
  • Sadece ilgili sunucuda geçerli olacak şekilde üyeyi bottan yasaklayabilme,
  • Sunucunun belli bir kanalının görmezden gelinmesini sağlayabilme,
  • Sunuculara, özel konuşmaya veya bot sahibine özel olan herhangi bir komutun gerekli koşul haricinde kullanımında geri bildirim verebilme,
  • Komut kullanımları arasına bekleme süresi koyabilme,
  • Bekleme süresi bitmeden kullanılan komutlarda geri bildirim verebilme,
  • Veritabanı sistemini KCommando ile tamamen entegre edebilme
ve daha aklıma gelmeyen nice özellikler.

Performans

KCommando tüm bu özellikleri ~1ms sistem gecikmesi ile sizlere sunuyor. RAM kullanımı olarak ise KCommando normal kullanımda en üst sınır olarak 10 MB RAM tüketeceğini söyleyebilirim. KCommando ve JDA'nın birlikte kullanıldığında ortalama 85 MB RAM kullanımı oluşuyor.

Kod yapısından bahsetmemiz gerekirse, KCommando ile bir botu nasıl çalıştırabileceğinizi hemen alttaki kod bloğundan görebilirsiniz.

[CODE lang="java" title="Bot Başlatma" highlight="13,16,19,20,25"]public class Main {

public void main(String[] args) throws Exception {
JDA jda = JDABuilder.createDefault("TOKEN").build();
jda.awaitReady();

File dataFile = new File("./data.json");
// veri dosyasının varlığından emin olma
if (!dataFile.exists())
dataFile.createNewFile();

// KCommando JDA entegrasyonunu oluşturma
JDAIntegration jdaIntegration = new JDAIntegration(jda);

// KCommando çekirdeğini gerekli bilgiler ile oluşturma
KCommando<MessageReceivedEvent> kcommando = new KCommando<>(jdaIntegration)
.setCooldown(5000L) // 5 saniyeyi 5000 milisaniye olarak kullanıyoruz
.setOwners("FIRST_OWNER_ID", "SECOND_OWNER_ID") // varargs
.setPackage("com.example.mybot.commands") // komut sınıflarının bulunduğu paket yolu
.setPrefix("!") // varsayılan komut ön eki
.setReadBotMessages(false) // botların mesajının okunmamasını sağlama
.useCaseSensitivity() // büyük küçük harf duyarlılığını aktif etme
.setDataFile(dataFile) // dahili veri koruması için veri dosyası
.setPluginsPath(new File("./plugins/")) // harici eklentiler için eklenti klasörü
.build();
}
}[/CODE]

KCommando'nun çalışabilmesi için gerekli olan satırları işaretledim. Haricinde bulunan satırlar tamamen isteğe bağlı olarak kullanılabilir. Sadece bu kadarlık bir kod ile oldukça detaylı bir botu optimum performans ile oluşturabiliyorsunuz. Oluşturacağımız komutların setPackage methodu ile belirtilen paket yolunun içinde olmak zorunda olduğunu söyleyip komut oluşturma örneğine geçelim.


[CODE lang="java" title="Komut Ekleme"]@Commando(name = "Ping!", // komut adı
aliases = "ping", // komutun nasıl kullanılacağını belirttiğimiz değer, birden fazla olabilir.
description = "Pong!", /* "-" default */
guildOnly = false, /* false default */
ownerOnly = false, /* false default */
privateOnly = false, /* false default */
sync = false, /* false default */
onlyArguments = false /* false default */)
public class BasicCommand extends JDACommand {

// constructor methodu parametre almamak zorunda
public BasicCommand() {
// çalıştırılan handle veya argüman methodu false döndüğü zaman bu callback çalıştırılır
getInfo().setOnFalseCallback( (JRunnable) e -> e.getMessage().addReaction("⛔").queue() );

// detaylı callback kullanım örnekleri github reposunda
}

@Override
public boolean handle(MessageReceivedEvent e /* opsiyonel olarak String[] args*/ ) {
e.getChannel().sendMessage( "Pong!" ).queue();
return true;
// eğer komut başarıyla çalıştırıldı ise true döndermeniz gerekir
}

// sabit bir argüman, handle methodundaki yapı burada da geçerli
// !ping test şeklinde kullanılan komut bu methodu tetikleyecektir
@Argument(arg = "test")
public boolean test(MessageReceivedEvent e) {
e.getChannel.sendMessage("Test!").queue();
return true;
}
}[/CODE]

En basit hali ile bir komutu bu şekilde oluşturabilirsiniz.

Benzer komutları nasıl göstereceğinizi, kullanıcıyı bottan nasıl yasaklayacağınızı, sunucuya özel ön ekleri nasıl ekleyeceğinizi, entegre veri koruma sisteminin ne yaptığını ve eklentilerin nasıl oluşturulduğu gibi çok daha detaylı bilgileri GitHub deposu üzerinden görebilirsiniz. GitHub deposu için
buraya tıklayabilirsiniz.

KCommando'yu projenize maven veya gradle ile kolayca ekleyip kullanabilirsiniz.

KCommando'yu kullanan ve içerisinde müzik sistemi barındıran, arkadaşlarımla takılırken ses kalitesi için açıp kullandığım Discord botunu örnek olması için buraya bırakıyorum. GitHub deposu için buraya tıklayabilirsiniz.

IntelliJ IDEA içerisinde KCommando kullanan bir Discord bot projesi açma ile ilgili olan videom aşağıda yer alıyor. İlk defa proje açarken zorluk yaşayanlar olduğu için en basit hali ile geliştirme ortamının nasıl hazırlanacağını videodan görebilirsiniz. 6.10'dan sonra modüler sistemin bize getirdiği avantajları ve detaylı KCommando kullanımı yer alıyor.

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Vakit ayırdığınız için teşekkür ederim.

Yorumlar


Blog girdisi detayları

Ekleyen
316332
Okuma süresi
3 dakika okuma
Görüntüleme
1.382
Yorumlar
2
Son güncelleme

Yazılım kategorisindeki diğer girdiler

Bu girdiyi paylaş

Geri
Yukarı