【问题标题】:Trouble with Discord.js Ping NumbersDiscord.js Ping 号码的问题
【发布时间】:2017-09-16 01:13:24
【问题描述】:

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

诸如-627 ms32 ms1001 ms-10 ms238 ms 等数字。基本上是-10001000 之间的任何东西。

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

我花了一些时间在网上寻找为什么我收到奇怪的 ping 号码的原因,但我想出了 zilch。我心想,“嗯......也许我生成它们是错误的。”因此,我查看了其他人如何使用 discord.js 生成 他们的 数字...

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

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

那个 sn-p 正好适合我的其余代码(是的,它是一个非常无聊的机器人):

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);

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

【问题讨论】:

    标签: javascript bots ping discord


    【解决方案1】:

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

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

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

    您也可以 ping api 端点,尽管您可能只会测量您对 cloudflare 的延迟...

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        您无法获得其他用户的实际 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
        

        减去机器人的 ping 将消除它在提交消息时对 API 的延迟。

        希望我能帮上忙!

        【讨论】:

          【解决方案4】:

          试试这个:

          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: 有帮助:

          【讨论】:

            【解决方案5】:
            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
            

            【讨论】:

              【解决方案6】:

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

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

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

              你将获得的结果是:

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

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

              希望这个答案对你有所帮助!

              【讨论】:

              • 这不起作用,因为由于时区的原因,discord 返回的时间戳可能与您的服务器不同。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-12-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-09
              • 2020-04-29
              • 2018-10-21
              相关资源
              最近更新 更多