这个系列会带着您通过Node.js中的Discord.js套件,从0到1开始製作属于自己的Discord机器人,希望可以帮助大家成为机器人的开发者哦!
前言
时隔六个月,笔者决定继续来更新这个系列的文章。主要是因为过了这半年多的时间,仍然发现网路上的Discord.js v14教学不多,并且自己的文章也得到越来越多的迴响,决定藉此机会继续更新,带给大家更丰富的教学!
除此之外,笔者开始在自己的部落格更新文章啰!
之后的文章将会优先在部落格更新,但仍会于此更新,欢迎多多支持我的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
:
......前段省略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
这个物件,这个物件会指向指令所使用所处在的伺服器,因此在此将多次使用到这个物件。接下来让我们来获取资料吧!
伺服器名称
获取方式如下:
interaction.guild.name
伺服器ID
获得方式如下:
interaction.guild.id
伺服器创建的时间
获得的方式如下:
interaction.guild.createdTimestamp
但是通过这种方式获得的内容将会是一串数字,也就是时间戳记,难易阅读,因此需要经过处理:
`<t:${~~(iinteraction.guild.createdTimestamp/1000)}:R>`
这样我们就可以以正常的时间标示格式来检视伺服器的建立时间啰!
伺服器简介
伺服器的简介获取方式如下,为了避免该伺服器没有简介,我们使用 ??
让其在简介不存在时显示为无
interaction.guild.description ?? "无"
伺服器拥有者
伺服器的拥有者获取后将会以id方式传回,因此我们使用 <@
和 >
包裹让他会显示为标记的使用者。
`<@${interaction.guild.ownerId}>`
伺服器人数
伺服器的人数会数字方式传出,为了让其成为字串,我们使用 ` 将其包住:
`${interaction.guild.memberCount}`
整理为程式码
接下来,我们将上述资讯整理为程式码来运行:
......前段省略 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就可以使用指令啰!
这样第五集的所有分支文章就完结啰!
总结
以上就是这篇文章的所有内容啰!也感谢您用心阅读完毕了这篇文章。之后的文章,由于指令数量愈来愈多,会先以指令各自分档案的教学为优先,除此之外也会介绍各种大大小小的功能,引导大家更深入Discord.js套件唷!
谢谢您的阅读,我们下篇文章再见啰!