所以我最近决定制作一个Discord机器人,并且一直在毫无问题地进行一些教程。但是,当我尝试发出ping命令(您知道“您的ping为137 ms
”类型)时,我得到了没有意义的数字。
[诸如-627 ms
,32 ms
,1001 ms
,-10 ms
,238 ms
的数字。基本上-1000
和1000
之间的所有内容。
现在纠正我,如果我错了,但是我很确定得到负数意味着我什至在没有要求之前就已经发送了响应,而且我几乎可以肯定我没有写一个有意识的机器人: P
我花了一些时间在网上寻找为什么我得到奇怪的ping数字的原因,但是我想到了zilch。我对自己说:“嗯.....也许我把它们错了。”因此,我研究了其他人如何使用discord.js生成their数字...
... 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);
[如果有人能给我一个我得到负数的原因,或者给我一种更好的方法来产生它们,我将非常感谢。预先感谢。
您遇到的ping变化是由于您的时钟和远程时钟之间的变化以及消息ID用于计算时间戳的准确性不高所致。
在跳到ping的含义之前,您必须确定要测量的内容。如果要测量往返时间以发送消息并从不和谐中获取相同的消息,则可能会发送不和谐消息,请启动计时器。然后当诺言解决时,检查已经过去了多少时间。
您也可以按照其他答案中的建议使用.ping进行心跳ping。
您也可以对api端点执行ping操作,尽管您可能只在衡量cloudflare的延迟...
[您可能会得到不同的结果,因为Date.now
是基于计算机的时钟,而message.createdTimestamp
来自Discord服务器(而不是计算机)的时钟。
之所以没有人共享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
减去自动程序的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:
很抱歉,您的Discord机器人遇到了这个问题。我使用您的代码来分析问题,并提出了此解决方案。您会发现自己的状况:
${Date.now() - message.createdTimestamp}
嗯,您所要做的就是在“ Date.now()”和“ message.createdTimestamp”之间进行交换
您将从中获得的是:
${message.createdTimestamp - Date.now()}
我尝试了这种方法,效果很好。它给了我最准确的结果。
希望此答案对您有所帮助!