Merhaba arkadaşlar,
Bugün sizlerle birlikte 0'dan, chatten yazdığımız yazıları sesli olarak okuyabilen(google translate üzerinden) eğlenceli bir bot kodlayacağız!
Botumuzu javascript tabanlı yazacağız.
(Discord developer kısmından) bot oluşturmayla ilgili pek çok kaynak olduğu için onları atlıyorum.
Hazırsanız başlayalım. Ama öncesinde nelere ihtiyacımız var onları görelim.
  1. Discord developer üzerinden oluşturduğumuz, bir bot.
  2. İşimizi kolaylaştıracak bazı kütüphaneler;
    discord.js: Botumuzu yönetmek için kesinlikle gereken bir kütüphane.
    google-tts-api: Attığımız yazıyı translate'de okutup bize mp3 olarak döndürecek bir api.
    discordjs/opus: Sesleri kullanıcıya aktarmak için kullanacağımız bir kütüphane.
    ffmpeg-static: Sesleri ffmpeg formatına dönüştüreceğimiz başka bir kütüphane
Kütüphanelerimize projemize dahil ettikten sonra, kodlama kısmına geçelim;
  1. Botumuzu ayağa kaldırmak için gerekli kodları yazalım;
    const Discord = require("discord.js"); // gerekli discord kütüphaneleri
    const client = new Discord.Client(); // botumuzu yönetmek için bir bot oluşturduk
    
    //bot tamamen hazır olduğunda yapılacak işlemler
    client.on("ready", () => {
         console.log(`Logged in as ${client.user.tag}!`);
    });
    
    //sunucudan bir mesaj geldiğinde yapılacak işlemler
    client.on("message", (msg) => {
        if (msg.content === "ping") {
           msg.reply("pong");  
         }
    });
    
    //token yerine discord developerden aldığımız discord tokenimizi yazalım.
    client.login("token");
    Bunları ekledikten sonra denemek için botumuzu çalıştıracağımız kodları terminal ekranına yazıp test edelim;


    Ve gördüğünüz gibi botumuz canlandı.


    Şimdi tepki verip vermediğini kontrol etmek için herhangi bir kanala "ping" yazalım.


    Gördüğünüz gibi bu da başarılı. şimdi diğer adıma geçebiliriz.
    (Ben önceden eklemiştim sunucuya. Sizde buraya tıklayıp, gerekli ayarları yaparak sunucunuza ekleyebilirsiniz.)

  2. Yazılarımızı sese çevirecek kütüphanemizi projeye dahil edelim;
    const googleTTS = require("google-tts-api");
    Şuan bu kütüphaneyi de dahil ettik. İstediğimiz zaman değişken ismini yazarak kullanabileceğiz.
    Fakat öncesinde botun ne zaman çalışacağını anlaması için bir prefix oluşturacağız. Sonuçta her chate bir şey yazdığımızda botun çalışmasını istemeyiz değil mi?
    Ben prefix olarak "n!" kullanacağım.
    Bu demek oluyor ki, botumuz chatte n! ile başlayan bir yazı yakaladığında, onu sese çevirmesi gerektiğini anlayacak.

    const prefix = "n!"
    Prefiximizi tanımladık.
    Şimdi küçük bir kontrol mekanizması yazarak kullanıcının "n!" yazdıktan sonra, kullanıcının neler yazdıklarını çekelim.

    //hatırlasınız kanal mesajlarını dinleyen eventimiz buydu.
    client.on("message", (msg) => {
    //eğer kullanıcının attığı mesaj, yukardaki tanımladığımız "n!" anahtar kelimesiyle başlıyorsa
      if (msg.content.startsWith(prefix)) {
        //kullanıcının yolladığı mesajdan, anahtar kelimesini çıkarıp başka bir değişkene ata
        const responsive = msg.content.slice(prefix.length);
       //ve kullanıcıdan gelen mesajın doğruluğunu bana console'de göster.
        console.log(`${msg.author.username} kullanıcısının iletisi: ${responsive}`);  
     }
    });
    Kodlarımızı yazdık. Şimdi test edelim;


    Console penceresine bakalım;

    Ve gördüğünüz gibi, belirttiğimiz anahtar kelimeyle başlıyorsa artık o yazıyı çekebiliyoruz.
  3. Yazılarımızı sese çevirelim ve dinletelim!

    Artık kullanıcının yazıyı sese çevirmesi gerektiğini yakalayabiliyoruz, tamam fakat şimdi sesi nasıl kullanıcının bulunduğu kanala aktaracağız?
    Öncesinde, kullanıcının bir ses kanalında olup olmadığını kontrol edeceğiz.

    if (!message.member.voice.channel)
          return message.reply("Öncelikle bir ses kanalında olmalısın.");
    Artık kullanıcının ses kanalında olup olmadığını biliyoruz. Eğer ses kanalında değilse, üstteki kodlar çalışacak. Peki ya kanaldaysa?

    msg.member.voice.channel
          .join() //Mesaj atan kullanıcının ses kanalına katıl.
          .then((VoiceConnection) => { //Eğer başarıyla katıldıysan
            googleTTS(responsive, "tr", 1) //Kullanıcının yazdığı yazıyı, "TR" dilinde, 1x hızda sese çevir, ve mp3 olarak linkini bana gönder.
              .then((url) => { //Eğer link geldiyse sesi oynat
                VoiceConnection.play(url).on("finish", () => // Sesi oynatma işlemi bitttiyse
                  setTimeout(() => { // 30 saniye sonra sesli kanaldan çık
                    VoiceConnection.disconnect();
                  }, 30 * 1000)
                );
                msg.reply("Oki..."); // Discord text kanalına, sesin oynatıldığı ile ilgili bir mesaj gönder.
              })
              .catch((err) => { // eğer url'de bir sıkıntı oluşursa hatayı ekrana yaz.
                console.error(err.stack);
              });
          })
          .catch((e) => console.log(e));  //eğer ses kanalına katılma da bir sıkıntı oluşursa hatayı ekrana yaz.
    Test edelim;




Ve gördüğünüz gibi çalışıyor. :)

Değişik, başka botlarda olmayan fikirler sunarsınız onları da bir sonraki serimizde yapabiliriz.
Amacım aynı şeyleri tekrar etmeyen, yenilikçi ve eğlenceli botlar oluşturmak.

İlk yazım olduğu için bolca yazım hataları olabilir, affediniz :)

Okuduğunuz için teşekkür ediyor, iyi forumlar diliyorum.

Kodların bulunduğu tek dosya;
Buraya tıkla