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.
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.
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.
Her şey yolunda giderse, yeni oluşturulan sunucunuzu görmelisiniz.
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.
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ş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.
Ş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 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.
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.
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.
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.
Botu sunucunuza başarıyla ekleyebiliyorsanız, aşağıdaki başarı ekranını görmelisiniz.
Botunuzun eklendiğini iki kez kontrol etmek istiyorsanız, genel kanal. Botun kanala katıldığını gösteren benzer bir mesaj görmelisiniz.
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.
“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ı etiketlermsg.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.
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.
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şlevmsg
veargs
girişleri. Bu işlev, bizimelse … 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