以下文章已於 2021/09/16 轉移至 微笑之家
對於discord.js更新,或是有其他問題,都歡迎到以下網址查看喔
本站
本主題
本文章
昨天我們成功叫醒了自己的兒子/女兒
在繼續教育小孩(增加功能)前,今天想說說昨天安裝的discord.js這個工具
該怎麼使用,以及應用後的例子
discord.js是node.js中的一個library,也就是其他人寫好的程式集
我們可以安裝他人發佈的程式並且引用,進而降低開發的難度與作業性
這是discord.js的文檔庫,裡面有此庫作者撰寫的使用說明,涵蓋了從以前到現在的發行版本,以及各種小細節
進來後,我們點擊最下面的Get Started
左側是discord.js的可用資源與方法,預設會在welcome頁面,這裡會介紹discord.js的功能與基本知識,我們先往下拉到 Example usage
這是discord.js的基本範例,拿來跟昨天的bot.js比對一下,是不是完全一樣呢?
只是範例中的 client.login(‘token’); 被我拉上去了;
這是因為在筆者的腦中,給機器人輸入key值是最優先的事情,再來依次進入ready(登入完成)->message(訊息接收)…不然各區塊的上下順序在這邊其實是沒有差別的。
下面說回來目前bot.js每一行的功效
const Discord = require('discord.js');
這行的意思是引用discord.js這個工具,然後賦予到Discord這個常數(const)上
之後如果要引用discord.js的程式碼,都可以直接調用Discord來實現!
const client = new Discord.Client();
新宣告一個 Discord(discord.js)下的Client方法,然後將Client方法的結果賦予到client這個常數上
之後如果要引用discord.js底下的Client,可以直接呼叫client。
這邊我們額外從Discord中拉出Client()是因為這個client是要用來當bot本體的,也就是我們的遙控器(x
const auth = require('./auth.json');
引用同目錄(./)下的auth.json,賦予給auth這個常數
之後想調用auth.json底下的資源,可以直接呼叫auth。
client.login(auth.key);
執行client的登入行為,登入的key我們放入bot的key
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
執行client的監聽(on)行為,要監聽的事件是ready(準備完成)
只要client收到ready事件,就執行右邊的箭頭函式( () => {} )
箭頭函式的內容為
console.log(`Logged in as ${client.user.tag}!`);
在控制台打印(console.log) 出字串 Logged in as ${client.user.tag}!
Logged in as就是單純的字串
其中client.user.tag,我們可以從小數點來了解到,user是client底下的一個可用變數,tag則是user底下的一個可用變數
最後輸出的結果就是機器人的名字與id
如果要仔細了解client的內容物,可以將console.log裡面的東西改成client看看
client.on('message', msg => {
if (msg.content === 'ping') {
msg.reply('pong');
}
});
監聽client的message(收到訊息)事件,觸發後執行箭頭函式 msg =>{}
這邊的msg是每當client收到message時,discord.js會給予我們的變數,我們將變數稱作msg
因為discord.js會回傳的變數是固定的,如果我們這邊像上面一樣寫成() => {}的話,雖然也可以執行但就不會將discord.js回傳的值再做處理。
反過來說,如果我們宣告了msg1跟msg2兩個變數來接回傳值,因為discord.js的message事件並沒有給我們這麼多參數,所以msg2是接收不到東西的
那麼要怎麼知道message事件下到底回傳了哪些參數呢?
這就要用到剛剛說的discord.js使用說明書了
https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=e-message
我們監聽message事件的說明在左側元素列表的client分類中的Events中可以找到,可以看到他回傳了 Message Type的變數,而這就是我們接收的內容。
繼續說箭頭函數內要做的事情
if (msg.content === 'ping') {
msg.reply('pong');
}
當msg變數底下的content元素,等於ping字串時,執行方法
msg.reply('pong');
使用msg底下的replay方法,並傳入pong字串。
以上的文言文翻譯過來就是
機器人(client)接收到訊息(message)的時候,去判斷訊息的內容(content)是不是ping
如果是,回傳pong(msg.reply)
先說到這,今天根據程式一行行做解釋,雖然很基本但對第一次觸碰這部分的人來說應該還是有點艱澀
請自行斟酌閱讀即可,明天我們說說如何讓機器人變得更聰明。
你好,我今天剛學著做discord機器人
想問一下那些行動是只要自己用英文套用行為到模組裡面bot就會動了是嗎?
如果我想做一個聰明的機器人,能夠在一個月內完成嗎?
我們要將自己想做的事情先整理成一個個步驟
在程式中找到對應的語法,之後寫進去bot就會動了
可以吧,bot並不困難,不過如果希望刻出自己的功能,主要還是要看您本身程式語言的基礎喔
請問關於
if (msg.content === 'ping') {
msg.reply('pong');
}
這段的content判斷有沒有辦法讓兩個或以上的關鍵字導向同一個動作麼呢?
if (msg.content === 'ping' || msg.content === 'pingping') {
msg.reply('pong');
}
或
if (msg.content === 'ping') {
msg.reply('pong');
}
if (msg.content === 'pingping') {
msg.reply('pong');
}
可以喔,這邊的邏輯只是示範而已,如果有繼續做後面的教學的話,到Day7這段程式碼會再改掉
阿阿阿阿阿 非常感謝你QQ 這個問題困擾我好幾天了
一直在想要怎麼弄成一句
真的非常感謝!!!!!!!
加油喔
您好,請問要如何讓機器人的回覆換行?
例如我說ping
機器人回
pong
pong
我試過直接用/n換行,結果毫不易外大失敗XDDD(流淚
是用\n
喔
天啊我傻了QQQQQQQ
沒放在一起看完全沒發現我打錯
卡了一天了,非常感謝!!!!!!!!
您好,請問機器人可以正常上線,但打出ping時他不會回我是發生甚麼樣的問題呢?
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.on('message', msg => {
if (msg.content === 'ping') {
msg.reply('pong!');
}
});
client.login(token);
最近discord.js的版本升級為13版
此寫法是基於discord.js 12.3.1,請確定是使用12版的函式庫喔
了解 那我降回discord.js 12.3.1
你好,我的package.json下最後的discord.js已經是^12.3.1了,可是我打出ping時也沒反應該怎辦?