はじめに
こんにちは、なりかくんです。
今回は、discord.jsで応答速度を表すPingコマンドを作ってみようと思います。
WebSocket Ping
まず一つ目に計測するのがWebSocket Pingです。これは、WebSocket ClientとWebSocket Serverの間の応答速度を計測しています。
具体的にはライブラリのこの辺のコードを見れば大体わかると思います(投げやり)
https://github.com/discordjs/discord.js/blob/main/packages/discord.js/src/client/websocket/WebSocketShard.js#L643
discord.jsでは以下のようなコードで取得できます。
client.ws.ping
API Endpoint Ping
次にAPI Endpoint Pingを計測します。これは、今の時間からメッセージが投稿された時間を引いて計算します。
discord.jsでは以下のようなコードで取得できます。
Date.now() - message.createdTimestamp
スラッシュコマンドで作ってみる
では今回は、スラッシュコマンドで作成します。少し上記の説明とは違う点はあります。
以下のようなコードになりました。
await interaction.reply(`WebSocket Ping: ${interaction.client.ws.ping}ms\nAPI Endpoint Ping: ...`);
let msg = await interaction.fetchReply();
await interaction.editReply(`WebSocket Ping: ${interaction.client.ws.ping}ms\nAPI Endpoint Ping: ${msg.createdTimestamp - interaction.createdTimestamp}ms`);
まず、最初にメッセージを送信してその送信したメッセージの時間とスラッシュコマンドで発生したinteractionを引いてAPI Endpoint Pingを出しています。
今回作成したコード全体は以下のようになります。
const { SlashCommandBuilder } = require('discord.js');
module.exports = {
data: new SlashCommandBuilder()
.setName('ping')
.setDescription('Pongを返します'),
async execute(interaction) {
await interaction.reply(`WebSocket Ping: ${interaction.client.ws.ping}ms\nAPI Endpoint Ping: ...`);
let msg = await interaction.fetchReply();
await interaction.editReply(`WebSocket Ping: ${interaction.client.ws.ping}ms\nAPI Endpoint Ping: ${msg.createdTimestamp - interaction.createdTimestamp}ms`);
},
};
以上です、最後までお読みいただきありがとうございました。