Discord.js Ping数字有问题

时间:2017-04-19 17:06:28

标签: javascript bots ping discord

所以我最近决定制作一个Discord机器人,并且已经完成了一些没有问题的教程。但是,当我尝试发出ping命令时(你知道,那种说“你的ping是137 ms”),我得到的数字没有意义。

-627 ms32 ms1001 ms-10 ms238 ms等数字。基本上是-10001000之间的所有内容。

现在纠正我,如果我错了,但我很确定得到负数意味着我在发出响应之前我甚至要求它,我几乎可以肯定我没有写一个预知机器人:p

我花了一些时间在线寻找我得到奇怪ping号的原因,但我想出了zilch。我心想,“嗯......也许我错了。”所以我看了其他人如何用discord.js生成他们的号码。

... aaaand我撞墙了。据我所知,没有人尝试用discord.js生成ping号码。如果他们有,他们没有在网上分享他们的宝贵发现。至少,这就是我的样子。 (如果您有这样的教程或帖子的链接,请发送给我)

我用${Date.now() - message.createdTimestamp}生成数字这是我发现生成它们的唯一方法,所以如果有人有更好的方法,我很乐意看到它。

该代码片段适合我的其余代码(是的,它是一个非常无聊的机器人):

const Discord = require('discord.js');
const client = new Discord.Client();
const token = require('./token.json').token;

client.on('ready', () => {
    console.log('Bot is up and running!');
});

var prefix = "?"

client.on('message', message => {
    if (message.author.bot) return;
    if (!message.content.startsWith(prefix)) return;

    if (message.content.startsWith(prefix + 'ping')) {
        message.channel.sendMessage('Pong! Your ping is `' + `${Date.now() - message.createdTimestamp}` + ' ms`');
    }
});

client.login(token);

如果有人能告诉我为什么我会得到负数,或者给我一个更好的方法来产生它们,我将非常感激。提前谢谢。

5 个答案:

答案 0 :(得分:1)

您遇到的ping的变化是由于您的时钟和远程时钟之间的差异以及用于计算时间戳不完全准确的消息ID。

在跳转到ping的意义之前,您必须决定要测量的内容。如果您要测量往返时间以发送消息并将相同的消息发回到不和谐的话,您可能会发送不和谐消息,启动计时器。然后当承诺解决时,检查已经过了多长时间。

你也可以按照心跳ping的另一个答案的建议使用.ping。

您也可以ping api端点,但您可能只会测量延迟到cloudflare ...

答案 1 :(得分:0)

您可能会得到不同的结果,因为Date.now基于您的计算机时钟而message.createdTimestamp来自Discord服务器(而非您的计算机)时钟。

没有人共享ping功能是因为它只是在读取客户端对象属性client.ping

https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=ping

答案 2 :(得分:0)

尝试一下:

client.on('message', message => {
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;
if (message.content.startsWith(prefix + 'ping')) {
    msg.channel.send({embed: {
        color: 0x2ed32e,
        fields: [{
            name: "Pong",
            value: "My Ping: " + Math.round(client.ping) + ' ms'
      }
     ],
}
})
}})

我希望这对c有帮助:

答案 3 :(得分:0)

您无法获得其他用户的实际ping。但是你可以近距离接触。

您知道使用系统时钟对您不起作用,因为它与实际服务器不同步。

您的机器人可以发送一条消息,然后对其进行编辑。然后,您有两个时间戳记:

var resMsg = await msg.channel.send('Ping is being appreciated... :bar_chart:');
    resMsg.edit('Ping: ' + Math.round((resMsg.createdTimestamp - msg.createdTimestamp) - bot.ping)));

减去bot的ping会消除提交消息时它对API的延迟。

希望我能帮上忙!

答案 4 :(得分:-3)

我很抱歉您的Discord机器人遇到了这个问题。我使用您的代码来分析问题,并提出了这个解决方案。你看到你有:

${Date.now() - message.createdTimestamp}

好吧,你所要做的就是在“Date.now()”和“message.createdTimestamp”周围交换

您将从中获得的是:

${message.createdTimestamp - Date.now()}

我尝试过这种方法,但效果很好。它给了我最准确的结果。

希望这个答案能帮到你!