所以我最近决定制作一个 Discord 机器人,并且已经顺利完成了一些教程。但是,当我尝试发出 ping 命令时(你知道,那种显示“您的 ping 是 137 ms
”的命令),我得到了没有意义的数字。
Numbers such as -627 ms
, 32 ms
, 1001 ms
, -10 ms
, 238 ms
.基本上介于 -1000
和 1000
之间的任何东西。
如果我错了,请纠正我,但我很确定得到负数意味着我在请求之前就发送了响应,而且我几乎可以肯定我没有写一个预知机器人 :P
我花了一些时间在网上寻找我收到奇怪的 ping 号码的原因,但我想出了 zilch。我心想,“嗯……也许我生成错误了。”所以我研究了其他人如何使用 discord.js 生成 他们的 数字…
…aaa 我碰壁了。据我所知,没有人尝试过使用 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);
如果有人能给我一个为什么我得到负数的原因,或者给我一个更好的方法来生成它们,我将非常感激。提前致谢。
原文由 user7890094 发布,翻译遵循 CC BY-SA 4.0 许可协议
您遇到的 ping 变化是由于您的时钟和远程时钟之间的变化以及用于计算时间戳的消息 ID 不是那么准确。
在跳转到 ping 的一种含义之前,您必须决定要测量什么。如果你想测量发送消息和从 discord 返回相同消息的往返时间,你可能会发送一条 discord 消息,启动一个计时器。然后当承诺解决时检查已经过了多少时间。
您也可以按照心跳 ping 的另一个答案中的建议使用 .ping 。
您也可以 ping api 端点,尽管您可能只会测量到 cloudflare 的延迟……