在命令处理程序中获取API延迟

时间:2020-08-25 09:31:49

标签: javascript discord.js

为我的机器人执行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()
    }
}

2 个答案:

答案 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)