/djsv14-gelismis-altyapi

sıfırdan yazılmış discordjs-v14 gelişmiş, boş altyapı

Primary LanguageJavaScriptMIT LicenseMIT

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.

📌 Özellikler

  • Gelişmiş
  • Kullanımı Kolay
  • Anlaşılır, Basit, Değişime Açık Kod
  • İsteğe Bağlı Konfigüre Edilebilme

📜 İçerik

  • 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)

🔒 Gereksinimler & Kullanılan Modüller

  • NPM
  • NodeJS
  • DiscordJS v14
  • string-similarity
  • Mongoose (isteğe bağlı)

❔ Kurulum & Çalıştırma & Notlar

Kurulum

git clone https://github.com/yourfriendF/djsv14-gelismis-altyapi

cd djsv14-gelismis-altyapi

npm install

Dosyaları Düzenleme, Botu Ayarlama ve Önemli Notlar

1- Intent Ayarlama

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.


2- Tokeni Ayarlama

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


3- Prefixli Komutlar

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.


4- Prefixsiz Komutlar

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.


5- Global Slash Komutlar

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.


6- Sunucuya Özel Slash Komutlar

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.


7- Slash Komutları Kaldırma

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.

8- Context Menu & Sağ Tık Komutları

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.


9- Modal & Button & SelectMenu Handler

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");
  }
};

10- Veritabanları

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.


11- Yetkiler Hakkında Bilgilendirme

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.


12- Eval Komudu

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.


13- Avatar Komudu ve Örnekler

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.


Çalıştırma

Botu başlatmak için node app.js kullanabilirsiniz.


✉️ Destek & Hatalar

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.

🔗 Lisans

Bu proje MIT Lisansı ile lisanslanmıştır.