使用 Discord.js v14 开发全能Discord机器人 | Ep.5.1 关于指令「info」-机器人资讯

这个系列会带着您通过Node.js中的Discord.js套件,从0到1开始製作属于自己的Discord机器人,希望可以帮助大家成为机器人的开发者哦!

前言

这篇文章会带着大家製作一个指令:bot-info,用途是查看机器人的相关资讯,指令注册的部分已经在Ep.5.0指导过,若还没看过的可以先行前往阅读唷!

指令构想

要製作一个新的指令之前,第一步便是构想指令的大致架构,在此分为以下五项:

指令名称指令说明指令用途回应内容其他功能

前两项是在输入斜线 (/) 时使用者会看到的资讯,通常会让使用者对于指令的用途和用法一目了然。

而第三~五项是协助您设计指令的程式,让您有明确的方向製作并供使用者使用。

指令名称

指令名称已经提及,是bot-info,当然您也可以自行设计名称,但要注意指令的注册和回应侦测需使用同样的名称,否则会发生错误。

指令说明

指令是用来得知机器人的相关资讯的,因此我在此使用简短的文字:「查看机器人的相关资料及资讯」来带领使用者了解此指令。

指令用途

如上所述,指令是用来了解机器人的相关资讯,因此我们在製作或构想时须朝此方向,若偏离太多会导致使用者使用时感到困惑或混乱。

回应内容

回应的内容是一大重点,让我们来构思机器人会有哪些相关资讯:

静态资讯(不会随时间改变的资讯):

机器人名称机器人ID机器人製作者机器人的建立时间机器人邀请连结

动态资讯(会随着时间或其他因素改变):

机器人的版本机器人所在的伺服器数量机器人上线的时间

顺带一提,在製作指令时不知从何下手时,可以从官方指令翻阅相关内容

Discord.js Documentation

由Discord.js贡献者与开发者製作用于查询Discord.js相关函式的用法或是相关资料,可以协助开发。网址:https://discord.js.org/#/docs

其他功能

目前的指令上不需要其他功能,因此此部分先省略!

指令製作

想好架构了,那就开始製作指令吧,一样会使用到机器人的主程式 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`)   }});后段省略......

在侦测指令名称的区域中新增一个判断式,判断指令名称为bot-info的指令

......前段省略  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') {        }});后段省略......

接下来,我们要撰写的程式都会在此判断式中

......前段省略  if (interaction.commandName === 'bot-info') {      }后段省略......

既然知道了要找的资讯,那就先来一个一个知道获取的方法吧!

资料获取

机器人名称

获得机器人使用者名称的方法如下

client.user.username

ClientUser是指目前登入的客户端,而username是用于获取其使用者名称

机器人ID

机器人ID的获取方法如下

client.user.id

同样是从ClientUser获得,id即是机器人的ID,和先前複製的ClientID相同

机器人製作者

机器人的製作者建议自行以字串方式填入,在此不多做说明

机器人的建立时间

获得机器人的建立时间方式如下

client.user.createdTimestamp

Timestamp 是指时间戳记,此处获得的时间戳记是「以毫秒表示从格林威治标準时间的西元1970年1月1日经过了多少时间」,将会是一串数字,那要如何转换成人话呢?

首先,虽然从Discord获得的为毫秒时间戳记,但用于表示的需使用秒的时间戳记,因此我们先将其除以1000转换为秒

client.user.createdTimestamp/1000

接下来,用Discord的时间表示格式进行处理

`<t:${client.user.createdTimestamp/1000}:R>`

但现在还是显示不出来唷!
因为我们现在得到的是一个小数,Discord要求的是一个整数,因此我们使用「~~」来将其四捨五入

`<t:${~~(client.user.createdTimestamp/1000)}:R>`

这样就得到了一个在Discord会显示为时间的字串啰!

机器人邀请连结

机器人的邀请连结请从邀请机器人的篇章获取,将其以字串方式表示,在此补充让其显示为文字(超连结)的方法

'[要显示的文字填写在中括号中](要连结到的网址填在小括号中)'

这是一种Markdown的语法,详细内容可以自行搜寻

机器人的版本

机器人的版本也可以自行以字串方式添加,顺便在此介绍版本号码的一种标準格式

major.minor.build

三个英语单字分别代表一个数字,中间以小数点分隔。
major:在有大型更动时进行变更
minor:在有较大更动但不至于major时变更
build:在有小型更动(像是修正错误)时变更

以下是一个维基百科撷取的例子:1.01.0.11.0.21.11.1.12.02.12.1.13.0

机器人所在的伺服器数量

机器人所在的伺服器数量获取方式如下

client.guilds.cache.size

会获得机器人所在伺服器数量的数字

机器人上线的时间

接下来,获得机器人上线时间的方式如下(此处指机器人此次上线持续运行的时间)

client.uptime

将会获取机器人上线后经过了「几毫秒」,让我们来将其再次转换为人话吧!

我们的目标为让其转换为HH:MM:SS,也就是时:分:秒的格式,因此我们来建立一个函式,用于执行此功能

function msToHMS(ms) {  let seconds = ms / 1000; //将毫秒转换为秒  const hours = parseInt( seconds / 3600 ); //将可以转为小时的秒转换为小时  seconds = seconds % 3600; //去除已转换为小时的秒  const minutes = parseInt( seconds / 60 ); //将可以转为分钟的秒转换为分钟  seconds = seconds % 60; //去除已转换为分钟的秒  return(`${hours}:${minutes}:${~~(seconds)}`); //回传转换后的结果,秒数进行四捨五入}

建议将此函式放到所有程式的最后方(CLIENT.LOGIN后
),方便程式码的阅读与整理

这时,我们将刚刚的毫秒uptime丢到里面进行处理

msToHMS(client.uptime)

就可以得到我们想要的结果(字串型别)啰!

整理为程式码

接下来,我们将刚刚所获得的资讯整理到程式码中吧!

......前段省略  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)}`    )  }后段省略......

此时可以存档后执行程式码,并到Discord输入指令试看看

node index.js

此时可以看到刚刚的成果出现啰!关于将其美化为嵌入讯息,会在之后的文章进一步说明。

总结

此篇文章带着大家製作了bot-info指令,并加上了许多相关资料,希望对大家有帮助,尽情期待下一篇文章吧,掰掰!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章