为我的机器人执行ping命令,
想要显示Math.round(client.ws.ping)
的api延迟,当我在index.js中使用它时,它可以正常工作。当我在命令处理程序中的ping命令中使用它时,它将无法工作并返回到NaN
。
我需要使用某些东西吗?
这是我在ping.js中的代码
const Discord = require('discord.js');
const client = new Discord.Client();
const fs = require('fs');
module.exports = {
name: 'ping',
description: 'measures ping',
execute(message, args){
async function pingFunction(){
const embedPingtest = new Discord.MessageEmbed()
.setTitle('Pinging...')
.setColor(0xC1CCDE)
const msg = await message.channel.send(embedPingtest);
const embedPing = new Discord.MessageEmbed()
.setTitle('Pong!')
.setDescription("Bot Latency: ``" + Math.floor(msg.createdTimestamp - message.createdTimestamp) + " ms``\nAPI Latency: ``" + Math.round(client.ws.ping) + " ms``")
.setColor(0xC1CCDE)
console.log(apiLatency)
msg.edit(embedPing)
}
pingFunction()
}
}
答案 0 :(得分:0)
这是因为您创建了一个新的客户端实例。此人没有ping命令,因为它没有登录,因此不在线。我建议您将旧实例作为函数参数传递,以使代码看起来像这样:
const Discord = require('discord.js');
module.exports = {
name: 'ping',
description: 'measures ping',
execute(message, args, client) {
(async () => {
const embedPingtest = new Discord.MessageEmbed()
.setTitle('Pinging...')
.setColor(0xC1CCDE)
const msg = await message.channel.send(embedPingtest);
const embedPing = new Discord.MessageEmbed()
.setTitle('Pong!')
.setDescription("Bot Latency: ``" + Math.floor(msg.createdTimestamp - message.createdTimestamp) + " ms``\nAPI Latency: ``" + Math.round(client.ws.ping) + " ms``")
.setColor(0xC1CCDE)
console.log(apiLatency)
msg.edit(embedPing)
})();
}
}
我知道大多数指南仅会让您使用run(message, args)
的结构,但是在我的机器人中,我通常会使用message, args, client?
(在修改模块结构时,我的工作方式有所不同)。这也不会在您的代码中引发错误,因为JS不在乎您传递或不传递多少个参数。
答案 1 :(得分:0)
您可以参考Zer0的答案,而不是创建一个新的Discord.Client()
,或者甚至更简单的方法是仅使用message
对象。
message
具有client
属性,它将返回实例化消息的客户端。
代替:
Math.round(client.ws.ping)
使用:
Math.round(message.client.ws.ping)