Üretken Veri Zekası

Node.js ile İlk Discord Botunuzu Oluşturma

Tarih:

Günümüzde, botlar çeşitli görevleri otomatikleştirmek için kullanılmaktadır. Amazon'un Alexa cihazlarının piyasaya sürülmesinden bu yana, otomasyon botlarını çevreleyen hype büyümeye başladı. Alexa'nın yanı sıra Discord ve Telegram gibi diğer iletişim araçları da özel botlar geliştirmek için API'ler sunuyor.

Bu makale yalnızca açık Discord API ile ilk botunuzu oluşturmaya odaklanacaktır. Belki de en tanınmış Discord botu Music Bot'tur. Müzik botu bir şarkı adı yazmanıza izin verir ve bot kanalınıza istenen şarkıyı çalan yeni bir kullanıcı ekler. Oyun veya akış sunucularında genç insanlar arasında yaygın olarak kullanılan bir bot.

Özel bir Discord botu oluşturmaya başlayalım.

Bu makale 2020 için güncellenmiştir. Daha fazla bilgi için Düğüm'e göz atın Node.js Web Geliştirme.

Önkoşullar

  • Node.js v10 veya daha üstü yüklü (temel bilgi)
  • Discord hesabı ve Discord istemcisi
  • terminal kullanma ile ilgili temel bilgiler

Adım 1: Test Sunucusunu Kurun

Her şeyden önce, daha sonra Discord bot'umuzu test edebileceğimiz bir test sunucusuna ihtiyacımız var. Ekranın sol tarafındaki artı simgesini tıklayarak yeni bir sunucu oluşturabiliriz.

sunucu oluştur'u tıklayın

Bir sunucuya katılmak mı yoksa yeni bir tane oluşturmak mı istediğinizi soran bir açılır pencere görüntülenir. Elbette yeni bir sunucu oluşturmak istiyoruz.

sunucu oluştur'u seçin

Ardından, sunucumuzun adını girmemiz gerekiyor. İşleri basitleştirmek için sunucuyu adlandırdım discord_playground. İsterseniz, daha iyi bir ping almak için bulunduğunuz yere bağlı olarak sunucu konumunu değiştirebilirsiniz.

sunucu adı

Her şey yolunda giderse, yeni oluşturulan sunucunuzu görmelisiniz.

yeni sunucu

Adım 2: Yetkilendirme Jetonu Oluşturma

Botumuzu kodla kontrol etmek istediğimizde, botu önce Discord hesabımıza kaydetmeliyiz.

Botu kaydetmek için, Uyuşmazlık Geliştiricileri Portalı ve hesabınızla giriş yapın.

Giriş yaptıktan sonra kontrol panelini görebilmeniz gerekir. Haydi yeni bir uygulama oluşturalım. Yeni uygulama düğmesine basın.

geliştirici gösterge tablosu

Ardından, uygulamanız için bir ad girmenizi isteyen bir açılır pencere göreceksiniz. Botumuzu arayalım my-greeter-bot. Tıklayarak oluşturmak Discord bir API uygulaması oluşturur.

uygulama oluştur

Uygulama oluşturulduğunda, yeni oluşturulan uygulamaya genel bakış my-greeter-bot uygulama. Müşteri kimliği ve müşteri sırrı gibi bilgileri görürsünüz. Bu sır daha sonra yetkilendirme belirteci olarak kullanılacaktır.

genel bakış karşılama bot

Şimdi, tıklayın Bot menü seçeneği Ayarlar Menü. Anlaşmazlık, my-greeter-bot uygulama ve bir bot kullanıcı ekleyin.

bot ekle

Bot inşa edildiğinde, özel botunuza bir genel bakış elde edersiniz. Bir göz atın Simge Bölüm. Bu yetkilendirme jetonunu kopyalayın ve daha sonra bot kullanıcımıza bağlanmak için ihtiyaç duyacağımız bir yere yazın.

bot sekmesine genel bakış

Adım 3: İzinleri Tanımlama ve Sunucuya Bot Ekleme

Üçüncü olarak, bot için izinleri tanımlamak ve Discord sunucumuza eklemek istiyoruz.

gidin OAuth2 bölümünde Ayarlar Menü. Burada botumuzun kapsamını tanımlayabiliriz. Sadece basit bir botu etkinleştirmek istediğimiz için, ağız seçeneği.

Aşağıdaki yetkilendirme URL'sinin şimdi değiştiğini fark edebilirsiniz. Ancak permissions=0 bölümünde henüz izin belirlemediğimiz belirtiliyor.

OAuth2 kapsamı

Daha aşağı kaydırırsak, bot izinleri Bölüm. Botun yapmasını istiyoruz Send Messages ve Read Message History. Kullanıcıların isteklerini algılayabilmemiz için mesaj geçmişini okuma iznine ihtiyacımız var.

Her iki seçeneği de seçtiğinizde, yetkilendirme URL'sindeki izinler parametresi için sayının değiştiğine dikkat edin.

İzin ekle

Son olarak, bu URL'yi kopyalayın ve favori web tarayıcınıza yapıştırın. Botu hangi sunucuya eklemek istediğinizi soran bir genel bakış bulacaksınız. Yeni oluşturduğumuzu seçelim discord_playground.

Tıkla Yetki vermek botu sunucumuza eklemek için düğmesine basın.

Sunucuya bot ekle

Botu sunucunuza başarıyla ekleyebiliyorsanız, aşağıdaki başarı ekranını görmelisiniz.

Bot ekleme başarısı

Botunuzun eklendiğini iki kez kontrol etmek istiyorsanız, genel kanal. Botun kanala katıldığını gösteren benzer bir mesaj görmelisiniz.

bot kanalı ekleme başarısı

Başarı!

Adım 4: Proje Kurulumu

Son olarak, projeyi kuralım. Temel projeyi şurada bulabilirsiniz: GitHub. Lütfen depoyu kullanarak makinenizde yerel olarak klonlayın git clone https://github.com/sitepoint-editors/discord-bot-sitepoint.

Proje iki bağımlılığa bağlıdır, dotenv ve discord.js. İlk bağımlılık, .env yazdığımız bot jetonunu tutan dosya. İkinci bağımlılığa ihtiyacımız olduğu açık, discord.js, Discord bot'unu geliştirmek için.

Her iki bağımlılığı da yüklemek için lütfen npm install proje klasörü içinde.

Son olarak, yüklemeyi tamamlamak için bir .env projenin kök dizinindeki dosya. Adlı bir ortam değişkeni ekle TOKEN dosyaya şöyle:

TOKEN=my-unique-bot-token

Adım 5: Discord.js'yi Keşfetme

Bir göz atalım index.js projenin kökünde bulunan dosya:

require('dotenv').config();
const Discord = require('discord.js');
const bot = new Discord.Client(); const TOKEN = process.env.TOKEN; bot.login(TOKEN);

Öncelikle tanımladığımız ortam değişkenlerini ortamdan yapılandırmayı gerektirerek yüklüyoruz .env dosya. Bu bize TOKEN tanımladığımız değişken process.env.ToKEN. Yukarıdaki snippet'in son satırı, oluşturduğumuz bot'a erişmek için jetonu giriş işlevine nasıl geçirdiğimizi gösterir.

The bot değişken aslında etkileşime gireceğimiz Discord istemcimizdir.

“Hazır” Etkinliği dinleyin

Sonra, olayları dinleyebiliriz. Her şeyden önce, ready Etkinlik. Bot'a bağlandıktan sonra hazır olay tetiklenir:

bot.on('ready', () => { console.info(`Logged in as ${bot.user.tag}!`);
});

Eğer doğru kullandıysanız TOKEN botta oturum açmak için terminaliniz botunuzun adını yazdırmalıdır bot.user.tag.

Botu basitçe çalıştırarak başlatabilirsiniz. node index.js terminalde. Bu komutu projenizin kök dizininde yürüttüğünüzden emin olun.

Bot başarıyla bağlanırsa, botun adını terminalde yazdırıyor olmanız gerekir.

Bot bağlı

“Mesaj” Etkinliğini dinleyin

Ayrıca hazır olayı, Discord istemcisi bir mesaj Etkinlik. Bu, botun bir kanala gönderilen mesajları okuyabileceği anlamına gelir. İzinler bölümüne geri dönmek için, botun mesaj geçmişini okuma izni vermesinin tam nedeni budur.

bot.on('message', msg => { if (msg.content === 'ping') { msg.reply('pong'); msg.channel.send('pong'); }
});

Kodu biraz daha araştırırsak, içeriği olan bir mesaj aradığımızı görürsünüz ping. Sadece içeren bir mesaj alırsak ping, bot ile cevap verir pong. Bundan sonra, msg.channel.send tekrar göndermek pong kanala.

Her iki komut arasındaki farka dikkat edin:

  • msg.reply: mesajı gönderen ilk kullanıcıyı etiketler
  • msg.channel.send: kimseyi etiketlemeden kanala mesaj gönderir

Botu çalıştırmaya çalışın node index.js ve bir mesaj gönder ping için general kanal. Aynı sonucu görüp görmediğinizi doğrulayın.

Ping mesajı

Etiketli Kullanıcıları Ara

Yeni bir komut eklemek için, if madde ile bir else … if:

if (msg.content === 'ping') { msg.reply('pong'); msg.channel.send('pong'); } else if (msg.content.startsWith('!kick')) { if (msg.mentions.users.size) { const taggedUser = msg.mentions.users.first(); msg.channel.send(`You wanted to kick: ${taggedUser.username}`); } else { msg.reply('Please tag a valid user!'); }
}

Diyelim ki bir mesaj göndererek birini tekmelemek istiyoruz. !kick @username. İlk olarak, !kick iletinin içeriğinde. İle başlayan bir mesaj bulursak !kick, kullanıcıların mesajda etiketli olup olmadığını kontrol edebiliriz. msg.mentions.users özelliği.

Etiketlenmiş kullanıcılar varsa, belirtilen ilk kullanıcıyı msg.mentions.users.first(). Ardından, kanala kullanıcının mesajında ​​kullanıcı adını yazarak yanıt veririz.

Tekme kullanıcı

Adım 6: Sorun else … if zincir

Şimdi sorunu tüm bunlarla tartışalım else … if ifadeleri. Message olayında dinlemek üzere tanımlanmış yalnızca birkaç komutunuz varsa, kod oldukça okunabilir.

Ancak, bu şekilde kapsamlı bir proje oluşturmaya karar verdiğimizde, else … if ifadeleri. Kullanmamanız için küçük bir neden listesi else … if küçük bir proje olmayan her şey için zincirler:

  • spagetti koduna kurban gitmek daha kolay
  • kodu okumak zor
  • hata ayıklamak kolay değil
  • kod düzenlemek zor
  • kod büyüdükçe bakımı kolay değil

Bu nedenle, kullanabileceğimiz komut desenine bir göz atalım.

Komut İşleyici Uygulama

Komut işleyici, discord.js paketlemek. Devam etmeden önce advanced ile şube git checkout advanced. Bu dal, komut işleyici uygulamasını içerir.

Komut Klasörü

İlk olarak, komut klasörünü inceleyelim. Bu klasörde bir index.js tanımlayacağımız tüm komutları veren dosya. İşleri basit tutmak için yalnızca bir komut tanımlayacağız, ping:

module.exports = { Ping: require('./ping'),
};

Daha sonra, ping temel olarak aşağıdakileri içeren bir nesneyi dışa aktaran komut:

  • name: bir komut adı.
  • description: her komut için bir açıklama eklemek en iyi yöntemdir.
  • execute: kabul eden bir işlev msg ve args girişleri. Bu işlev, bizim else … if zinciri.
module.exports = { name: 'ping', description: 'Ping!', execute(msg, args) { msg.reply('pong'); msg.channel.send('pong'); },
};

Komutları İçe Aktarma

Devam edelim, komutları index.js dosya. Discord botunda bir komut koleksiyonu tanımladığımıza dikkat edin. Tüm komutların üzerinden geçer ve bunları komut koleksiyonuna tek tek ekleriz.

The bot.commands.set işlevi komutun ve tüm komut nesnesinin adını kabul eder:

const Discord = require('discord.js');
const bot = new Discord.Client();
bot.commands = new Discord.Collection();
const botCommands = require('./commands'); Object.keys(botCommands).map(key => { bot.commands.set(botCommands[key].name, botCommands[key]);
});

Bundan sonra, else … if zincirlemek ve aramak istediğimiz doğru komutu bulmak için bazı dinamik kodlarla değiştirin:

bot.on('message', msg => { const args = msg.content.split(/ +/); const command = args.shift().toLowerCase(); console.info(`Called command: ${command}`); if (!bot.commands.has(command)) return; try { bot.commands.get(command).execute(msg, args); } catch (error) { console.error(error); msg.reply('there was an error trying to execute that command!'); }
});

Önce mesajın içeriğini beyaz boşluklara göre ayırmaya çalışıyoruz. .split(/ +/). Bu konudaki ilk öğeyi varsayıyoruz args dizi bizim komutumuzdur. Komutun koleksiyonumuzda var olup olmadığını kontrol etmek için koleksiyon bir has() işlevi doğru veya yanlış döndürür. Komut yoksa, boş bir yanıt döndürürüz.

Ancak, komut varsa, get() işlevi doğru komutu almak ve giriş parametreleriyle yürütmek msg ve args.

Spagetti kodu yazmadan komutları çağırmanın kolay ve dinamik bir yoludur. Bu, projenizi gerekirse yüzlerce komuta göre ölçeklendirmenize olanak tanır.

Yine, kodumuzun yeni sürümünü test etmek istiyorsanız, advanced ile şube git checkout advanced. Ardından, tüm bağımlılıkları npm install ve botu node index.js.

Yukarı tamamlayan

Yeni bir Discord botu kurmak ve kurmak ilk başta çok zor olabilir. Ancak, discord.js paket basittir ve Discord web sitesi harika örnekler.

Bu eğitici yalnızca iki izin içerdiğinden, bulunacak çok şey var. İzinler hakkında daha fazla bilgi için Discordjs.kılavuzu adresinden özetlerini gönderebilirler.

İlk Discord botunuzu oluşturmada iyi şanslar!

Bu arada, katılabilirsin Bu bağlantıyla SitePoint'in Discord topluluğu. Gel bizimle konuş teknoloji.

Kaynak: https://www.sitepoint.com/discord-bot-node-js/?utm_source=rss

spot_img

En Son İstihbarat

spot_img