DiscordJS v14 ile yapılmış gelişmiş, boş discord bot altyapısı. Sıfırdan yazılmıştır. Özellikle notlar kısmına dikkat edip, projede halihazırda bulunan örnekler ile basit bir şekilde kurabilirsiniz.
- Gelişmiş
- Kullanımı Kolay
- Anlaşılır, Basit, Değişime Açık Kod
- İsteğe Bağlı Konfigüre Edilebilme
- Prefix, Slash ve Context Menü Komutları (isteğe bağlı)
- Command, Event ve Interaction Handler
- Buton/Modal/SelectMenu Handler
- MongoDB & Mongoose Handler (isteğe bağlı)
- Komutlara Cooldown Ekleme
- "Bunu mu demek istediniz?" Sistemi
- Modallı
eval
Komutu - Komut/Event/Interaction Örnek Kodları (
example.js
)
- NPM
- NodeJS
- DiscordJS v14
- string-similarity
- Mongoose (isteğe bağlı)
git clone https://github.com/yourfriendF/djsv14-gelismis-altyapi
cd djsv14-gelismis-altyapi
npm install
app.js dosyasında 9. satırda bulunan intents:
kısmını botunuzun amacına göre düzeltin. Bunun için herhangi bir intent hesaplama makinesi kullanılabilir.
app.js dosyasında bulunan 14. satırdaki token:
kısmına botunuzun tokenini tırnakların arasına yazın. Botunuzun tokenini discord developer portaldan bulabilirsiniz
Komutlarım aynı zamanda prefix ile de çalışsın diyorsanız 15. satırdaki prefixCommands:
bölümünü
prefixCommands: ["PREFIX1", "PREFIX2"],
şeklinde düzenleyin. İstediğiniz kadar prefix kullanabilirsiniz. Prefixleri virgülle ayırın. Komutlarınızın çalışabilmesi için her komut dosyasında
async executePrefix(client, message, args){
// kodlar...
},
fonksiyonunu düzenleyin.
Eğer ki prefixli komut olmasın ben sadece slash komut kullanacağım derseniz prefixCommands:
bölümünü
prefixCommands: undefined,
şeklinde düzenleyin. Yer işgal etmemesi ve göze güzel gelmesi için her komut dosyasında bulunan
async executePrefix(client, message, args){
// kodlar...
},
fonksiyonunu kaldırabilirsiniz. Ayrıca events/commandHandler.js
dosyasını da silebilirsiniz.
Komutlarım aynı zamanda eğik çizgi ile botun bulunduğu tüm sunucularda çalışsın diyorsanız 16. satırdaki slashCommands:
bölümünü
slashCommands: "global",
şeklinde düzenleyin.
Komutlarınızın çalışabilmesi için her komut dosyasında
async executeSlash(interaction){
// kodlar...
},
fonksiyonunu düzenleyin.
Komutlarım aynı zamanda eğik çizgi ile botun bulunduğu sadece bir sunucuda çalışsın diyorsanız 16. satırdaki slashCommands:
bölümünü
slashCommands: "sunucuID",
şeklinde düzenleyin.
Komutlarınızın çalışabilmesi için her komut dosyasında
async executeSlash(interaction){
// kodlar...
},
fonksiyonunu düzenleyin.
Komutlarım eğik çizgi ile çalışmasın diyorsanız 16. satırdaki slashCommands:
bölümünü
slashCommands: undefined,
şeklinde düzenleyin.
Yer işgal etmemesi ve göze güzel gelmesi için her komut dosyasında bulunan
async executeSlash(interaction){
// kodlar...
},
data: {
slash: new SlashCommandBuilder(), // bunu kaldırın
},
fonksiyonlarını kaldırabilirsiniz. Ayrıca hiçbir interaction ile uğraşmak istemiyorsanız events/interactionHandler.js
dosyasını silebilirsiniz.
NOT: Önceden slash komutlu kullanıp sonradan fikrinizi değiştirirseniz sunucularda bulunan komutlar kalmaya devam edecektir. Bunun için botu sunucudan atıp tekrar almanız yeterli olur.
Komutlarım aynı zamanda kullanıcıya veya mesaja sağ tıkladığımda gözüksün oradan da çalıştırayım derseniz her komut dosyasında bulunan data:
kısmına
// Kullanıcıya Sağ Tık
contextMenu: new ContextMenuCommandBuilder().setType(ApplicationCommandType.User)
// Mesaja Sağ Tık
contextMenu: new ContextMenuCommandBuilder().setType(ApplicationCommandType.Message)
fonksiyonunu ekleyebilirsiniz.
Modal / Buton / Seçim menüsü gibi mesaj componentlerini algılayabilmek için böyle bir sistem yaptım. Mesela butona basıldığında interactions/buttons
klasöründe bulunan o butonIdsine sahip dosya çağırılacaktır. Her interaction için klasörlerinde birer örnek vardır. Aşağıda ise ping butonuna basıldığında konsola yourfriend
yazdıran bir örnek vardır:
// commands/user/test.js dosyası
async executeSlash(interaction) {
const button = new ButtonBuilder()
.setLabel("yourfriend")
.setCustomId("test-butonu")
.setStyle(ButtonStyle.Primary)
const actionRow = new ActionRowBuilder()
.addComponents(button)
interaction.reply({ ephemeral: true, components: [actionRow] });
}
// interactions/buttons/test-butonu.js dosyası
module.exports = {
data: {
name: "Konsola yazdıran buton",
buttonId: "test-butonu"
},
async execute(interaction) {
console.log("yourfriend");
}
};
Mongoose ile MongoDB kullanmak isterseniz app.js dosyasında 17. satırda bulunan mongoDB:
kısmına tırnak içerisinde mongoURLnizi yazın. Başka bir veritabanı kullanmak istiyorsanız mongoDB:
kısmına undefined yazın. Başka veritabanları altyapı tarafında herhangi bir sıkıntı çıkarmayacaktır.
Hem slash komutlar için hem de prefixli komutlar için bir yetki kontrolü yapmak çok zor olduğundan yetki & kanal sınırlandırmalarını if/else ile kendiniz kodlara yerleştireceksiniz. Slash komutlar için ise elle ayarlayın veya SlashCommandBuilder().setDefaultMemberPermissions()
fonksiyonunu kullanın.
eval
komudu kodlarınızı denemeye yarayan bir komuttur. Halihazırda hem modal şeklinde hem de prefixli haliyle komutlar içinde var. Komudu kullanabilmek için kodda ownerID
yazan yere kendi IDnizi yazın.
commands/user/avatar.js
konumunda bulunan avatar komuduyla hem prefixli hem slashlı hem de sağ tıklı komut nasıl yapılır onu örneklendirdim. Ayrıca bir tane komut, bir tane event, birer tane de interaction örneği bıraktım. Onları inceleyerek altyapıyı kendi kodlarınıza uygun hale getirebilirsiniz.
Botu başlatmak için node app.js
kullanabilirsiniz.
Kodlar test edilmiştir ancak hatalar olabilir. Sadece altyapı yüzünden oluşan hatalar hakkında bana ulaşmak için yourfriend#6889 yazabilirsiniz. Diğer hatalar & istekler için CodAre discord sunucusundan yardım alabilirsin.
Bu proje MIT Lisansı ile lisanslanmıştır.