# 使用 Discord.js v14 開發全能Discord機器人 | Ep.5.3 關於指令「info」-伺服器資訊 :::info 這個系列會帶著您通過Node.js中的Discord.js套件,從0到1開始製作屬於自己的Discord機器人,希望可以幫助大家成為機器人的開發者哦! ::: ## 前言 時隔六個月,筆者決定繼續來更新這個系列的文章。主要是因為過了這半年多的時間,仍然發現網路上的Discord.js v14教學不多,並且自己的文章也得到越來越多的迴響,決定藉此機會繼續更新,帶給大家更豐富的教學! 除此之外,筆者開始在[自己的部落格](https://winson-otp.github.io/)更新文章囉! 之後的文章將會優先在部落格更新,但仍會於此更新,歡迎多多支持我的Github Pages自架部落格哦~ > 部落格連結:https://winson-otp.github.io/ > 此篇文章連結:https://winson-otp.github.io/posts/discord-js-ep-5-3/ 今天這篇文章將會帶著大家為Discord.js的機器人製作一個指令: `server-info`,用於得知伺服器的相關資訊,讓我們開始實作吧! ## 指令構想 在製作`server-info`指令前,先來構想一下指令的相關架構: ### 指令名稱 如上述,使用 `server-info` 作為指令的名稱,簡短且方便辨識。 ### 指令說明 在前導文章曾經提到,將使用「查看伺服器的資訊」作為其說明文字。 ### 指令用途 指令的用途是在使用者使用時,回傳當前伺服器的相關資料和資訊。 ### 回應內容 那接下來就來確定要加上的資料有哪些吧! #### 靜態資訊(不會隨時間改變的資訊): - 伺服器名稱 - 伺服器ID - 伺服器創建的時間 - 伺服器簡介 - 伺服器擁有者 - ~~伺服器頭像~~(將會等講解嵌入後再教學) #### 動態資訊(會隨著時間或其他因素改變): - 伺服器人數 這次的資料內容與上一篇文章的類似,並且有了更多資料。 ### 其他功能 目前此指令只是一個單純的server-info指令,因此尚無其他功能。 ## 指令製作 接下來要正式開始製作指令的程式碼囉,將會修改到機器人的主程式 `index.js`: ```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)}` ) } 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` ) } }); 後段省略...... ``` ### 資料獲取 首先,我們先一個一個了解資料該如何取得,並且在後續整理為完整的程式碼。在許多資料的獲取方式中,我們會看到 `interaction.guild` 這個物件,這個物件會指向指令所使用所處在的伺服器,因此在此將多次使用到這個物件。接下來讓我們來獲取資料吧! #### 伺服器名稱 獲取方式如下: ```js interaction.guild.name ``` #### 伺服器ID 獲得方式如下: ```js interaction.guild.id ``` #### 伺服器創建的時間 獲得的方式如下: ```js interaction.guild.createdTimestamp ``` 但是通過這種方式獲得的內容將會是一串數字,也就是時間戳記,難易閱讀,因此需要經過處理: ```js `<t:${~~(iinteraction.guild.createdTimestamp/1000)}:R>` ``` 這樣我們就可以以正常的時間標示格式來檢視伺服器的建立時間囉! #### 伺服器簡介 伺服器的簡介獲取方式如下,為了避免該伺服器沒有簡介,我們使用 `??` 讓其在簡介不存在時顯示為無 ```js interaction.guild.description ?? "無" ``` #### 伺服器擁有者 伺服器的擁有者獲取後將會以id方式傳回,因此我們使用 `<@` 和 `>` 包裹讓他會顯示為標記的使用者。 ```js `<@${interaction.guild.ownerId}>` ``` #### 伺服器人數 伺服器的人數會數字方式傳出,為了讓其成為字串,我們使用 \` 將其包住: ```js `${interaction.guild.memberCount}` ``` ### 整理為程式碼 接下來,我們將上述資訊整理為程式碼來運行: ```js ......前段省略 if (interaction.commandName === 'server-info') { interaction.reply( `伺服器名稱:${interaction.guild.name}\n` + `伺服器ID:${interaction.guild.id}\n` + `伺服器創建時間:<t:${~~(interaction.guild.createdTimestamp/1000)}:R>\n` + `伺服器簡介:${interaction.guild.description ?? "無"}\n` + `伺服器擁有者:<@${interaction.guild.ownerId}>\n` + `伺服器人數:${interaction.guild.memberCount}\n` ) } 後段省略...... ``` 將此檔案存檔後執行: ``` node index.js ``` 到Discord就可以使用指令囉! ![](https://i.imgur.com/C8NBoGx.png) 這樣第五集的所有分支文章就完結囉! ## 總結 以上就是這篇文章的所有內容囉!也感謝您用心閱讀完畢了這篇文章。之後的文章,由於指令數量愈來愈多,會先以指令各自分檔案的教學為優先,除此之外也會介紹各種大大小小的功能,引導大家更深入Discord.js套件唷! 謝謝您的閱讀,我們下篇文章再見囉! ###### tags: `Node.js` `Discord.js`