這個系列會帶著您通過Node.js中的Discord.js套件,從0到1開始製作屬於自己的Discord機器人,希望可以幫助大家成為機器人的開發者哦!
前言
此篇文章將會帶著各位為自己的Discord.js機器人製作一個指令:user-info,用於獲得使用者的資料,指令註冊的部分已在前導文章完成囉!若需要的話可以先行前往閱讀。
指令構想
指令名稱
指令名稱在此設定為user-info,亦可以自行設定名稱。
Note: 指令的註冊和回應偵測需使用同樣的名稱,否則會發生錯誤。
指令說明
指令是用於得知使用者的相關資料,在此使用「查看指定使用者的資訊」來作為指令的說明文字。
指令用途
綜上所述,指令是用來了解使用者的相關資訊,因此我們在製作或構想時須朝此方向,若偏離太多會導致使用者使用時感到困惑或混亂。
回應內容
讓我們來構思並列出一個使用者會有哪些相關資訊:
靜態資訊(不會隨時間改變的資訊):
- 使用者名稱
- 使用者ID
- 使用者創建的時間
- 使用者是否是機器人
使用者頭像(將會等講解嵌入後再教學)
動態資訊(會隨著時間或其他因素改變):
想不到
可以注意到這次的資訊和機器人資訊不同,這次幾乎沒有動態的資料? 因為使用者基本上屬於一個比較穩定的實體,沒有啟動的時間、版本號碼等資訊。
之所以加上是否為機器人,是因為我們之後會將此指令做為可以「查看指定使用者的資料」,而非只有自己。
其他功能
目前此指令只是一個單純的user-info指令,因此尚無其他功能。
指令製作
接下來要開始製作指令囉,將修改機器人的主程式 index.js
:
......前段省略
client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'ping') {
const msg = await interaction.reply({
content: "正在計算延遲......",
fetchReply: true
});
const ping = msg.createdTimestamp - interaction.createdTimestamp;
interaction.editReply(`機器人延遲:${ping} ms\nAPI延遲:${client.ws.ping} ms`)
}
if (interaction.commandName === 'bot-info') {
interaction.reply(
`機器人名稱:${client.user.username}\n`+
`機器人ID:${client.user.id}\n`+
`機器人製作者:自行填寫\n`+
`機器人建立時間:<t:${~~(client.user.createdTimestamp/1000)}:R>\n`+
`機器人邀請連結:自行填寫\n`+
`機器人版本:自行填寫\n`+
`機器人所在伺服器數量:${client.guilds.cache.size}\n`+
`機器人上線時間:${msToHMS(client.uptime)}`
)
}
});
後段省略......
首先,新增一個用於判斷指令的判斷式,用來處理user-info指令
......前段省略
if (interaction.commandName === 'user-info') {
}
後段省略......
接下來就要進入正題囉!
資料獲取
首先,先了解各個資料的獲取方式,由於我們要取得資訊的是使用指令的使用者,因此之後有許多資料都會以 interaction
開頭,例如:interaction.user
即為指令的使用者
使用者名稱
獲取方法如下:
1
interaction.user.username
使用者ID
獲得的方法如下:
1
interaction.user.id
使用者創建的時間
要獲得使用者創建時間的方式如下,和前篇文章bot-info的機器人創建時間相同,會以毫秒時間戳記,因此需要進行轉換,方式與上篇文章相同因此不多做論述:
原始型態
1
interaction.user.createdTimestamp
處理後的Discord時間戳記型態
1
`<t:${~~(interaction.user.createdTimestamp/1000)}:R>`
使用者是否是機器人
得知方法如下(將會傳出布林值):
1
interaction.user.bot
為了方便辨識,在此轉換為字串
1
interaction.user.bot? '是':'否'
此用法將會判斷判斷式是否成立,若成立則回傳冒號左側的值,否則回傳右側的值。
整理為程式碼
接下來,就要整理成程式碼放入程式中囉!
......前段省略
if (interaction.commandName === 'user-info') {
interaction.reply(
`使用者名稱:${interaction.user.username}\n`+
`使用者ID:${interaction.user.id}\n`+
`使用者創建時間:<t:${~~(interaction.user.createdTimestamp/1000)}:R>\n`+
`是否為機器人:${interaction.user.bot? '是':'否'}\n`
)
}
後段省略......
存檔後執行
1
node index.js
到Discord執行程式碼即可正常使用指令囉!
成功囉! 之後會找機會帶著各為讓此訊息變成更加美觀的「嵌入訊息」,請拭目以待吧!
總結
此篇文章帶著大家製作了user-info指令,並告訴各位許多相關資料的獲取方法,希望可以對於大家開發機器人提供協助,下篇文章再見囉,掰掰!