-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Bu sayfa, ByteBunny'nin Core sistemine nasıl yeni bir komut ekleyeceğini ve mevcut komutları nasıl özelleştirebileceğini adım adım anlatır. Mimari değişmediği sürece bu rehber geçerliliğini korur, bu yüzden komut bazlı ayrıca bir dokümana ihtiyaç yoktur.
ByteBunny'de bir komut iki parçadan oluşur:
-
Go dosyası (
Bot/Core/Commands/*.go) — komutun mantığını, çalışma şeklini içerir. -
YAML dosyası (
Bot/Modules/Locales/<dil>/Commands/...) — komutun ismi, açıklaması, mesajları, ikonları ve ayarlarını içerir. Bu ayrım sayesinde:
- Metinler ve ayarlar kodu değiştirmeden düzenlenebilir.
- Yeni diller eklemek kolaylaşır.
- Komutlar
enabled,cooldown,categorygibi ayarlarla kontrol edilebilir.
⚠️ Kural: Komutun adı ile YAML dosyasının adı aynı olmalıdır. Aksi haldehelp,listcommandsgibi komutlar tarafından bulunamaz.
Bot/Modules/Locales/tr/Command.example.yaml dosyasını kopyalayarak başla. Bu dosya tüm alanları örnekleriyle açıklar.
Yeni dosyayı şuraya koy:
Bot/Modules/Locales/tr/Commands/<kategori>/<komut_adi>.yaml
Örnek (bir "ping" komutu için):
Bot/Modules/Locales/tr/Commands/General/ping.yaml
name: "ping"
description: "Botun gecikme süresini gösterir."
usage: "ping"
titles:
success: "🏓 Pong!"
error: "❌ Hata"
messages:
success: "Gecikme: {latency}ms"
options:
enabled: true
category: "general"
ephemeral: false
prefix: true
cooldown: 5.0Önemli alanlar:
| Alan | Açıklama |
|---|---|
name |
Komut adı, dosya adıyla aynı olmalı |
description |
Slash komutlarda Discord'da görünen açıklama |
titles / messages
|
Embed başlık ve içerikleri, {placeholder} destekler |
options.enabled |
false yapılırsa komut tamamen devre dışı kalır |
options.category |
listcommands çıktısında hangi kategoride görüneceği |
options.cooldown |
Saniye cinsinden bekleme süresi |
options.slash |
Slash komut argümanları (varsa) |
Bot/Core/Commands/ altına yeni bir .go dosyası oluştur (örn. Ping.go). Mevcut komutlar (Help.go, ListCommands.go) için aynı iskeleti takip eder.
package commands
import (
config "ByteBunny/Bot/Config"
events "ByteBunny/Bot/Core/Events"
library "ByteBunny/Bot/Core/Library"
utils "ByteBunny/Bot/Core/Utils"
"path/filepath"
"sync"
"github.com/bwmarrin/discordgo"
)
type PingCommandSlash struct{ cmd *library.CommandLib }
type PingCommandPrefix struct{ cmd *library.CommandLib }
var (
slashOncePing sync.Once
prefixOncePing sync.Once
)
func init() {
events.RegisterSlashCacheCommand(&PingCommandSlash{})
events.RegisterPrefixCacheCommand(&PingCommandPrefix{})
}
func loadPingLib() (*library.CommandLib, error) {
var lib library.CommandLib
path := filepath.Join("Modules", "Locales", config.AppConfig.Bot.Lang, "Commands", "General", "ping.yaml")
ok, err := utils.ReadYaml(path, &lib)
if err != nil || !ok {
return nil, err
}
return &lib, nil
}
// ... checkLibrary(), LoadCommandLib(), Name(), Description(),
// Options(), GetGeneralFormatKeys(), Execute() metotlarıSlash komutları şu metotları içermeli:
-
Name() string -
Description() string -
Options() []*discordgo.ApplicationCommandOption -
Execute(s *discordgo.Session, i *discordgo.InteractionCreate) -
LoadCommandLib() error -
GetGeneralFormatKeys(...) map[string]stringPrefix komutları şu metotları içermeli: -
Name() string -
Execute(s *discordgo.Session, m *discordgo.MessageCreate, args []string) -
LoadCommandLib() error -
GetGeneralFormatKeys(...) map[string]string
💡 İpucu:
Bot/Core/Commands/Help.goveListCommands.godosyaları, bu arayüzlerin gerçek hayatta nasıl uygulandığını gösteren en iyi referanslardır. Yeni bir komut yazarken bu dosyaları kopyalayıp düzenlemek en hızlı yoldur.
Mesaj/embed göndermek için utils paketindeki yardımcı fonksiyonları kullan:
-
utils.BuildCommandEmbedFast(...)— YAML'dakititles/messages/iconsalanlarından otomatik embed oluşturur. -
utils.SendEmbedToChannel(...)— Slash komut yanıtı gönderir. -
utils.SendEmbedReplyToChannel(...)— Prefix komut yanıtı gönderir. Renkler içinlibrary.Colors(bkz.Bot/Config/Colors.yaml) kullanılır —library.Colors.Status.Info,.Success,.Errorgibi.
Kod değiştirmeden yapılabilecekler sadece YAML üzerinden:
- Mesaj metinlerini değiştir (
messages,titles,footers) - Komutu kapat/aç (
options.enabled) - Kategori değiştir (
options.category) - Cooldown ayarla (
options.cooldown) - İkon değiştir (
icons) Davranışı (mantığı) değiştirmek için ilgili.godosyasındakiExecute()fonksiyonu düzenlenir.
Yeni bir komut eklerken:
- YAML dosyası oluşturuldu,
namealanı dosya adıyla eşleşiyor - YAML doğru kategori klasörüne kondu (
Commands/<Kategori>/) - Go dosyası
Bot/Core/Commands/altına eklendi -
init()içindeRegisterSlashCacheCommand/RegisterPrefixCacheCommandçağrıldı -
options.enabled: trueolarak ayarlandı -
categoryalanı dolduruldu (listcommands'da görünmesi için) - Bot derlenip (
go run ./Bot) komut test edildi
Yeni bir komut/modül PR'ı açarken:
- Mevcut komutların isimlendirme ve dosya yapısı desenini takip et.
- Mesajları
Common.yaml'daki ortak mesajlarla tekrar etmeden, mümkünse fallback'lerden yararlan. - Hata mesajlarının
err_öneki kuralına uyduğundan emin ol. - Kodun
Help.go/ListCommands.goile aynı stil ve yorum düzenini koru.