LoginSignup
1
1

More than 1 year has passed since last update.

【22日目】discord.jsで応答速度を表すPingコマンドを作ろう

Last updated at Posted at 2022-12-21

はじめに

こんにちは、なりかくんです。
今回は、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

まあ適当にイメージ図を作ったのですが、多分こんな感じです。
image.png

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を出しています。

実際に実行してみるとこのようになります。
image.png

今回作成したコード全体は以下のようになります。

ping.js
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`);
	},
};

以上です、最後までお読みいただきありがとうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1