それで私は最近 Discord ボットを作ることに決め、問題なくいくつかのチュートリアルを行っていました。しかし、pingコマンド(「あなたのpingは_137 ms
_」と表示される種類)を作成しようとすると、意味のない番号が表示されました。
_-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);
_
誰かが私が負の数を取得している理由を教えてくれたり、それらを生成するためのより良い方法を教えてくれたら、私は非常に感謝しています。前もって感謝します。
発生しているpingの変動は、クロックとリモートクロックの間の変動、およびタイムスタンプの計算に使用されるメッセージIDがそれほど正確ではないためです。
Pingの1つの意味にジャンプする前に、何を測定するかを決定する必要があります。メッセージを送信し、同じメッセージを不和から戻すためのラウンドトリップ時間を測定する場合は、不和メッセージを送信してタイマーを開始する可能性があります。次に、約束が解決したら、どれだけの時間が経過したかを確認します。
ハートビートpingの別の回答で提案されているように、.pingを使用することもできます。
おそらくcloudflareへの遅延を測定するだけですが、APIエンドポイントにpingを実行することもできます...
これを試して:
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に役立つことを願っています:
他のユーザーの実際のpingを取得することはできません。しかし、あなたはかなり近づくことができます。
システムの時計は実際のサーバーと同期していないため、使用しても機能しないことをご存知でしょう。
ボットはメッセージを送信し、その後編集することができます。次に、2つのタイムスタンプがあります。
var resMsg = await msg.channel.send('Ping is being appreciated... :bar_chart:');
resMsg.edit('Ping: ' + Math.round((resMsg.createdTimestamp - msg.createdTimestamp) - bot.ping)));
ボットのpingを差し引くと、メッセージの送信中にAPIへの待ち時間がなくなります。
私が助けることができることを願っています!
Date.now
はコンピューターの時計に基づいており、message.createdTimestamp
は(コンピューターではなく)Discordサーバーの時計からのものであるため、異なる結果が得られる場合があります。
誰もping機能を共有していない理由は、クライアントオブジェクトのプロパティclient.ping
を読み取っているだけだからです。
https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=ping