JavaScript ile Ücretsiz Discord Botu Nasıl Oluşturulur - Tam Eğitim

GhostWins

Katılımcı Üye
29 Şub 2020
539
575

8BfzfS111434df5fdd155e.png


Bu konu, kendi Discord botunuzu tamamen bulutta oluşturmak için JavaScript ve Node.js'yi nasıl kullanacağınızı sizlere gösterecektir.
Bilgisayarınıza herhangi bir şey yüklemenize gerek yoktur ve botunuzu barındırmak için herhangi bir ücret ödemenize gerek yoktur.

Discord API, Node.js kitaplıkları ve Repl.it adlı bir bulut bilişim platformu dahil olmak üzere bir dizi araç kullanacağız.



Discord Bot Hesabı Nasıl Oluşturulur
Node.js kitaplığı ve Discord API ile çalışmak için öncelikle bir Discord Bot hesabı oluşturmalıyız.

İşte bir Discord Bot hesabı oluşturmanın adımı.

1. Discord web sitesinde oturum açtığınızdan emin olun.

2. Uygulama sayfasına gidin.

3. "New Application" düğmesine tıklayın.

unknown.png


4. Uygulamaya bir ad verin ve "Create" a tıklayın.

unknown.png


5. "Bot" sekmesine gidin ve ardından "Bot Ekle" yi tıklayın. "Evet, yap!" I tıklayarak onaylamanız gerekecek.

unknown.png


Herkese Açık Bot (işaretli) ve OAuth2 Kod Verme Gerektir (işaretli değil) için varsayılan ayarları koruyun.

Botunuz oluşturuldu. Bir sonraki adım, jetonu kopyalamaktır.

unknown.png


Bu jeton, botunuzun şifresidir, bu yüzden kimseyle paylaşmayın. Birinin botunuza giriş yapmasına ve her türlü kötü şeyi yapmasına izin verebilir.

Jetonu yanlışlıkla paylaşılırsa yeniden oluşturabilirsiniz.


Botunuzu Sunucuya Katılmaya Nasıl Davet Edebilirsiniz?


Şimdi Bot Kullanıcınızı bir sunucuya almalısınız. Bunu yapmak için, bunun için bir davet URL'si oluşturmalısınız.

"OAuth2" sekmesine gidin. Ardından, "kapsamlar" bölümünün altında "bot" u seçin.
.
unknown.png


Şimdi bot için istediğiniz izinleri seçin. Botumuz esas olarak metin mesajlarını kullanacak, bu yüzden çok fazla izne ihtiyacımız yok. Botunuzun ne yapmasını istediğinize bağlı olarak daha fazlasına ihtiyacınız olabilir. "Yönetici" iznine dikkat edin.

image-124.png


Uygun izinleri seçtikten sonra, izinlerin üzerindeki 'kopyala' düğmesini tıklayın. Bu, botu bir sunucuya eklemek için kullanılabilecek bir URL'yi kopyalayacaktır.

URL'yi tarayıcınıza yapıştırın, botu davet edeceğiniz bir sunucu seçin ve "Yetkilendir" i tıklayın. Botu eklemek için hesabınızın "Sunucuyu Yönet" izinlerine ihtiyacı var. Artık bot kullanıcısını oluşturduğunuza göre, bot için Python kodunu yazmaya başlayacağız.


8BfzfS111434df5fdd155e.png


Discord.js Kitaplığı ile Temel Discord Botu Nasıl Kodlanır?

Bot için kod yazmak için discord.js Node kitaplığını kullanacağız. discord.js, Node.js / JavaScript'te Discord botu oluşturmayı kolaylaştıran bir Discord API sarmalayıcısıdır. Bir Repl Oluşturma ve discord.js Nasıl Yüklenir
Botu yerel bilgisayarınızda herhangi bir kod düzenleyici ile geliştirebilirsiniz. Ancak, bu eğitimde Repl.it'i kullanacağız çünkü herkesin takip etmesini kolaylaştıracak. Repl.it, web tarayıcınızda kullanabileceğiniz çevrimiçi bir IDE'dir.

Repl.it'e giderek başlayın. Yeni bir Repl oluşturun ve dil olarak "Node.js" yi seçin. Bu, programlama dilinin JavaScript olacağı anlamına gelir. Discord.js kitaplığını kullanmak için şunu eklemeniz yeterlidir:

Kod:
const Discord = require("discord.js");
main.js'nin en üstünde Repl.it, "çalıştır" düğmesine bastığınızda bu bağımlılığı otomatik olarak kuracaktır.

Botunuz için Discord Olayları Nasıl Kurulur
discord.js, olaylar kavramı etrafında döner. Bir olay, dinlediğiniz ve sonra yanıtladığınız bir şeydir. Örneğin, bir mesaj olduğunda, cevap verebileceğiniz bir olay hakkında alacaksınız.

Belirli bir mesajı yanıtlayan bir bot yapalım. Bu basit bot kodu, doğrudan discord.js belgelerinden alınır. Daha sonra bota daha fazla özellik ekleyeceğiz.

Bu kodu main.js'ye ekleyin. Kısaca tüm bu kodun ne yaptığını açıklayacağım.

Kod:
const Discord = require("discord.js")
const client = new Discord.Client()


client.on("ready", () => {
  console.log(`Logged in as ${client.user.tag}!`)
})


client.on("message", msg => {
  if (msg.content === "ping") {
    msg.reply("pong");
  }
})


client.login(process.env.TOKEN)

Bot kullanıcınızı Discord'da oluşturduğunuzda, bir jeton kopyaladınız. Şimdi belirteci saklamak için bir .env dosyası oluşturacağız.

.env dosyaları, ortam değişkenlerini bildirmek için kullanılır. Repl.it'te, oluşturduğunuz çoğu dosya herkes tarafından görülebilir, ancak .env dosyaları yalnızca sizin tarafınızdan görülebilir. Genel bir çoğaltmayı görüntüleyen diğer kişiler .env dosyasının içeriğini göremez.

Dolayısıyla, Repl.it üzerinde geliştirme yapıyorsanız, bir .env dosyasına yalnızca belirteçler veya anahtarlar gibi özel bilgileri ekleyin.

"Dosya ekle" düğmesini tıklayın ve .env adlı bir dosya oluşturun.

Dosyanın içine, daha önce kopyaladığınız gerçek jetonunuz dahil olmak üzere aşağıdaki satırı ekleyin:

TOKEN=[paste token here]


Şimdi Discord bot kodunuzda her bir kod satırının ne yaptığını gözden geçirelim. İlk satır discord.js kitaplığını içe aktarır. Ardından, bir İstemci örneğini oluşturuyoruz. Bu Discord ile bağlantıdır.

Client.on () olayları kontrol etmek için kullanılır. Bir olay adını ve olay gerçekleştiğinde çağrılacak bir geri arama işlevini kabul eder. Bu kodda ready olayı, bot kullanılmaya hazır olduğunda çağrılır. Ardından, Discord sunucusunda yeni bir mesaj olduğunda, mesaj olayı çağrılır.

Kod, msg.content'in 'ping'e eşit olup olmadığını kontrol eder. Eğer öyleyse, bot kanala 'pong' ile yanıt verir.

Artık bot kurulduğuna göre, son satır botu oturum açma jetonuyla çalıştırıyor. Belirteci .env dosyasından alır. Botun koduna sahibiz, bu yüzden şimdi onu çalıştırmalıyız.


Botu Çalıştırmak;
Şimdi botunuzu repl.it'de çalıştırmak için üstteki çalıştır düğmesine tıklayın. Şimdi Discord odanıza gidin ve "ping" yazın. Botunuz "pong" döndürmelidir.


Bot Nasıl Geliştirilir;
Artık çalışan temel bir botumuz olduğuna göre, onu geliştireceğiz. Bir sebepten dolayı "Botu Teşvik Et" olarak adlandırılır. Bu bot, birisi üzücü veya iç karartıcı bir kelime içeren bir mesaj gönderdiğinde cesaret verici bir mesajla cevap verecektir. Botun kullanması için herkes cesaret verici mesajlar ekleyebilecek ve kullanıcı tarafından gönderilen mesajlar Repl.it veritabanında saklanacaktır.

Bot, birisi sohbete "$ inspire" mesajını yazdığında bir API'den rastgele bir ilham verici alıntı da döndürecektir. "$ İnspire" özelliğini ekleyerek başlayacağız.


Bot'a İlham Verici Alıntılar Nasıl Eklenir?
Zenquotes.io adlı bir API'den ilham verici alıntılar alacağız. Düğüm getirme modülünü içe aktarmamız, bir getQuote () işlevi eklememiz ve işlevi çağırmak için bot kodumuzu güncellememiz gerekir.

İşte güncellenmiş kod. Koddan sonra yeni bölümleri açıklayacağım.

Kod:
const Discord = require("discord.js")
const fetch = require("node-fetch")
const client = new Discord.Client()


function getQuote() {
  return fetch("https://zenquotes.io/api/random")
    .then(res => {
      return res.json()
      })
    .then(data => {
      return data[0]["q"] + " -" + data[0]["a"]
    })
}


client.on("ready", () => {
  console.log(`Logged in as ${client.user.tag}!`)
})


client.on("message", msg => {
  if (msg.author.bot) return
  
  if (msg.content === "$inspire") {
    getQuote().then(quote => msg.channel.send(quote))
  }
})


client.login(process.env.TOKEN)

Şimdi düğüm getirme modülünü içe aktarmamız gerekiyor. Bu modül, kodumuzun API'den veri almak için bir HTTP isteğinde bulunmasına izin verir. GetQuote () işlevi oldukça basittir. İlk olarak, API URL'sinden veri talep etmek için düğüm getirme modülünü kullanır. API, rastgele bir ilham verici alıntı döndürür. Mevcut olanın çalışmayı durdurması durumunda, bu işlev farklı bir API'den teklif almak için kolayca yeniden yazılabilir.

Daha sonra işlev, yanıtı API'den JSON'a dönüştürür ve döndürülecek bir dize oluşturur. Deneme yanılma yoluyla JSON'dan alıntıyı istediğim dize formatına nasıl getireceğimi buldum. Alıntı, işlevden bir dizge olarak döndürülür.

Kodda güncellenen son bölüm sona doğru. Önceden "ping" mesajını aradı. Şimdi "$ inspire" arar. "Pong" döndürmek yerine getQuote () ile teklifi alır ve teklifi döndürür. Mesajı kanala göndermek için msg.channel.send () kullanıyoruz. Ayrıca kod, mesajın botun kendisinden gelip gelmediğini kontrol eder ve eğer gelirse, hiçbir şey yapmaması için işlevi bırakır.

Bu noktada kodunuzu çalıştırabilir ve deneyebilirsiniz.


Bot'a Teşvik Edici Mesajlar Nasıl Eklenir?
Şimdi, bir kullanıcı üzücü bir kelime içeren bir mesaj gönderdiğinde botun cesaret verici mesajlarla yanıt verdiği özelliği uygulayacağız.

Bot'a Üzücü Kelimeler Nasıl Eklenir?
Öncelikle botun yanıt vereceği üzücü kelimeleri içeren bir dizi oluşturmamız gerekiyor.

İstemci değişkeni oluşturulduktan sonra aşağıdaki satırı ekleyin:

sadWords = ["üzgün", "depresif", "mutsuz", "kızgın", "sefil"]

Listeye daha fazla kelime eklemekten çekinmeyin.


Bot'a Teşvik Edici Mesajlar Nasıl Eklenir?
Şimdi botun yanıt vereceği bir dizi cesaret verici mesaj ekleyeceğiz.

Oluşturduğunuz sadWords listesinden sonra aşağıdaki diziyi ekleyin:

Kod:
encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

Bu, botu test etmek için iyi bir zaman. Artık kendi botunuzu yaratacak kadar biliyorsunuz. Ancak daha sonra, daha gelişmiş özellikleri nasıl uygulayacağınızı ve Repl.it veritabanını kullanarak verileri nasıl depolayacağınızı öğreneceksiniz.

Kullanıcı Tarafından Gönderilen Mesajlar Nasıl Etkinleştirilir
Bot tamamen işlevseldir, ancak şimdi botu doğrudan Discord'dan güncellemeyi mümkün kılalım. Bir kullanıcı, botun üzücü bir kelime algıladığında kullanması için daha cesaret verici mesajlar ekleyebilmelidir.

Kullanıcı tarafından gönderilen mesajları saklamak için Repl.it'in yerleşik veritabanını kullanacağız. Bu veritabanı, her repl'de yerleşik bir anahtar-değer deposu.

Kodun üst kısmındaki diğer içe aktarma ifadelerinin altına şunu ekleyin:

Kod:
const Veritabanı = gerektirir ("@ replit / veritabanı")
const db = yeni Veritabanı ()

Bu, Repl.it veritabanını kullanmamıza izin verecektir. Kodu çalıştırdığınızda, Repl.it veritabanı modülünü otomatik olarak kurmalıdır. Herhangi bir nedenle yoksa, Kabuk sekmesine (Konsol değil) gitmeniz ve "npm install @ replit / database" yazmanız gerekebilir.

Teşvik dizisinin oluşturulduğu yerden sonra, gerekirse teşvikleri veritabanına eklemek için aşağıdaki kodu ekleyin:

Kod:
db.get("encouragements").then(encouragements => {
  if (!encouragements || encouragements.length < 1) {
    db.set("encouragements", starterEncouragements)
  }
})

Ayrıca, cesaret dizisini en üste doğru starterEncouragements olarak yeniden adlandırın.

Kullanıcılar, botun doğrudan Discord sohbetinden kullanması için özel teşvik edici mesajlar ekleyebilecek. Bot için yeni komutlar eklemeden önce, veritabanına özel mesajlar ekleyecek ve silecek iki yardımcı fonksiyon oluşturalım.

GetQuote () işlevinden sonra aşağıdaki kodu ekleyin:

Kod:
function updateEncouragements(encouragingMessage) {
  db.get("encouragements").then(encouragements => {
    encouragements.push([encouragingMessage])
    db.set("encouragements", encouragements)
  })
}
Kod:
function deleteEncouragment(index) {
  db.get("encouragements").then(encouragements => {
    if (encouragements.length > index) {
      encouragements.splice(index, 1)
      db.set("encouragements", encouragements)
    }
  })
}

UpdateEncouragements () işlevi, teşvik edici bir mesajı argüman olarak kabul eder.

Önce veritabanından "teşvikleri" alır. Ardından, diziye yeni teşvik ekler ve güncellenmiş diziyi veritabanında "teşvikler" anahtarı altında depolar.

DeleteEncouragement () işlevi bir dizini bağımsız değişken olarak kabul eder.

Teşviklerin listesini "teşvikler" anahtarı altında depolanan veritabanından alır. Uzunluk indeksten fazlaysa, o indeksteki liste öğesi silinir. Son olarak, güncellenen liste veritabanında "teşvikler" anahtarı altında saklanır.

İşte mesaj işlevi için güncellenmiş kod. Koddan sonra yeni bölümleri açıklayacağım.

Üzücü sözler bölümü, veritabanından gelen cesaret verici mesajların kullanılması için güncellendi, böylece kullanıcı tarafından gönderilen mesajlar kullanılabilir.

Bir sonraki yeni kod bölümü, veritabanına kullanıcı tarafından gönderilen yeni bir mesajı eklemek için kullanılır. Bir Discord mesajı "$ new" ile başlıyorsa, "$ new" den sonraki metin yeni bir teşvik mesajı olarak kullanılacaktır.

Msg.content.split ('$ new') [1] kodu mesajı "$ new" komutundan ayırır ve mesajı bir değişkende saklar. Bu kod satırında, '$ new' alanındaki boşluğa dikkat edin. Uzaydan sonra her şeyi istiyoruz.

Yeni mesajla updateEncouragements yardımcı işlevini çağırıyoruz ve ardından bot, uyumsuz sohbete mesajın eklendiğini onaylayan bir mesaj gönderiyor.

Üçüncü yeni bölüm (yukarıdaki kodun sonunda) yeni bir Discord mesajının "$ del" ile başlayıp başlamadığını kontrol eder. Bu, veritabanındaki "teşvikler" listesinden bir öğeyi silme komutudur.

Dizin, "$ del" ile başlayan Discord mesajından ayrılır. Daha sonra deleteEncouragement () işlevi, silinmek üzere dizinde geçirme olarak adlandırılır. Güncellenmiş teşvik listesi teşvikler değişkenine yüklenir ve ardından bot, mevcut listeyle birlikte Discord'a bir mesaj gönderir.

Final Bot Özellikleri
Bot çalışmalıdır, bu yüzden test etmek için iyi bir zaman. Şimdi birkaç son özellik ekleyeceğiz.

Doğrudan Discord'dan kullanıcı tarafından gönderilen mesajların bir listesini alma özelliğini ekleyeceğiz ve botun üzücü kelimelere yanıt verip vermeyeceğini kapatma ve açma yeteneği ekleyeceğiz.

Size programın tam son kodunu vereceğim ve ardından kodun altındaki güncellemeleri tartışacağım.

Kod:
[COLOR="Red"]const Discord = require("discord.js")[/COLOR][/SIZE][/CENTER][/COLOR][/SIZE][/CENTER]
[SIZE=4][COLOR=rgb(255, 255, 255)][CENTER][SIZE=4][COLOR=rgb(255, 255, 255)][CENTER]const fetch = require("node-fetch")
const Database = require( [USER=149402]Rep[/USER]lit/database")

const db = new Database()
const client = new Discord.Client()

const sadWords = ["sad", "depressed", "unhappy", "angry", "miserable"]

const starterEncouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

db.get("encouragements").then(encouragements => {
  console.log(encouragements)
  if (!encouragements || encouragements.length < 1) {
    db.set("encouragements", starterEncouragements)
  }
})

db.get("responding").then(value => {
  if (value == null) {
    db.set("responding", true)
  }
})

function getQuote() {
  return fetch("https://zenquotes.io/api/random")
    .then(res => {
      return res.json()
      })
    .then(data => {
      return data[0]["q"] + " -" + data[0]["a"]
    })
}

function updateEncouragements(encouragingMessage) {
  db.get("encouragements").then(encouragements => {
    encouragements.push([encouragingMessage])
    db.set("encouragements", encouragements)
  })
}

function deleteEncouragment(index) {
  db.get("encouragements").then(encouragements => {
    if (encouragements.length > index) {
      encouragements.splice(index, 1)
      db.set("encouragements", encouragements)
    }
  })
}

client.on("ready", () => {
  console.log(`Logged in as ${client.user.tag}!`)
})

client.on("message", msg => {
  if (msg.content === "$inspire") {
    getQuote().then(quote => msg.channel.send(quote))
  }

  db.get("responding").then(responding => {
    if (responding && sadWords.some(word => msg.content.includes(word))) {
      db.get("encouragements").then(encouragements => {
        const encouragement = encouragements[Math.floor(Math.random() * encouragements.length)]
        msg.reply(encouragement)
      })
    }
  })

  if (msg.content.startsWith("$new")) {
    encouragingMessage = msg.content.split("$new ")[1]
    updateEncouragements(encouragingMessage)
    msg.channel.send("New encouraging message added.")
  }

  if (msg.content.startsWith("$del")) {
    index = parseInt(msg.content.split("$del ")[1])
    deleteEncouragment(index)
    msg.channel.send("Encouraging message deleted.")
  }

  if (msg.content.startsWith("$list")) {
    db.get("encouragements").then(encouragements => {
      msg.channel.send(encouragements)
    })
  }
  
  if (msg.content.startsWith("$responding")) {
    value = msg.content.split("$responding ")[1]

    if (value.toLowerCase() == "true") {
      db.set("responding", true)
      msg.channel.send("Responding is on.")
    } else {
      db.set("responding", false)
      msg.channel.send("Responding is off.")
    }
  }
})

client.login(process.env.TOKEN)[/COLOR]



İyi günler

kDHSnH.png

 
Moderatör tarafında düzenlendi:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.