discord.js ping号码的麻烦



,所以我最近决定制作一个Discord机器人,并且毫无问题地浏览了一些教程。但是,当我尝试制作一个ping命令(您知道,那种说"您的ping是 137 ms"(时,我的数字没有任何意义。

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

现在如果我错了,请纠正我,但是我很确定,要获得负数,这意味着我甚至在要求之前就发送响应,而且我几乎可以肯定我没有写预知机器人:p

我花了一些时间在网上寻找我得到奇怪的ping号码的原因,但我想出了Zilch。我心想,"嗯.....也许我会让他们失去了。"所以我看了其他人如何通过discord.js生成 ...

...我撞墙。据我所知,没有人尝试使用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);

如果有人能给我一个理由,为什么我会得到负数,或者给我更好的生成它们的方法,我将非常感激。预先感谢。

您所遇到的ping的变化是由于时钟与远程时钟之间的变化以及用于计算时间戳的消息ID并非如此准确。

在ping跳入一个含义之前,您必须决定要测量的内容。如果您想衡量发送消息的往返时间并获得相同的消息,则可能会发送不和谐消息,请启动一个计时器。然后,当承诺解决时,检查已经过去了多少时间。

您也可以在心跳ping的另一个答案中使用。

,您也可以ping api端点,尽管您可能只能测量延迟到Cloudflare ...

您可能会得到不同的结果,因为Date.now基于您的计算机时钟,message.createdTimestamp来自Discord Server(不是您的计算机(时钟。

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

https://discord.js.org/#/docs/main/stable/class/websocketmanager?scrollto=ping

您无法获得另一个用户的实际ping。但是你可以很近。

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

您的机器人可以发送消息并在此之后进行编辑。然后,您有两个时间戳:

var resMsg = await msg.channel.send('Ping is being appreciated... :bar_chart:');
    resMsg.edit('Ping: ' + Math.round((resMsg.createdTimestamp - msg.createdTimestamp) - client.ws.ping))); //client.ping has been moved to the WebSocketManager under client.ws.ping

减去bot的ping将在提交消息时删除其与API的延迟。

希望我能提供帮助!

尝试以下:

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.ws.ping) + ' ms' //client.ping has been moved to the WebSocketManager under client.ws.ping
      }
     ],
}
})
}})

我希望这对C:

有所帮助
client.on('messageCreate', message => {
if (message.content === `${config.PREFIX}ping`) {
    message.channel.send("Calculating ...").then(m =>{
        var ping = Math.round((m.createdTimestamp - client.ws.ping) - message.createdTimestamp ); //more closer to discord ping
        setTimeout(() => {
            m.edit(`**Your Ping Is: **${ping}ms`);
        }, 3000);
    });
}) //DISCORD.JS V13

很抱歉,您正在使用Discord Bot面对此问题。我使用您的代码来分析该问题,并提出了此解决方案。您会看到自己的生活:

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

好吧,您要做的就是围绕" date.now(("one_answers" message.createdTimestamp"求换

您将从中获得的目标是:

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

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

希望这个答案对您有帮助!

最新更新