这个系列会带着您通过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
即为指令的使用者
使用者名称
获取方法如下:
interaction.user.username
使用者ID
获得的方法如下:
interaction.user.id
使用者创建的时间
要获得使用者创建时间的方式如下,和前篇文章bot-info的机器人创建时间相同,会以毫秒时间戳记,因此需要进行转换,方式与上篇文章相同因此不多做论述:
原始型态
interaction.user.createdTimestamp
处理后的Discord时间戳记型态
`<t:${~~(interaction.user.createdTimestamp/1000)}:R>`
使用者是否是机器人
得知方法如下(将会传出布林值):
interaction.user.bot
为了方便辨识,在此转换为字串
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` ) }后段省略......
存档后执行
node index.js
到Discord执行程式码即可正常使用指令啰!
成功啰!
之后会找机会带着各为让此讯息变成更加美观的「嵌入讯息」,请拭目以待吧!
总结
此篇文章带着大家製作了user-info指令,并告诉各位许多相关资料的获取方法,希望可以对于大家开发机器人提供协助,下篇文章再见啰,掰掰!