プレフィックスコマンドからスラッシュコマンドへの移転
!pingという発言に対してpong!と返すサンプルを例にして、スラッシュコマンドに移転する際の変更点を書いていきます。
code:js
const { Client, GatewayIntentBits } = require("discord.js");
const client = new Client({
intents: [
GatewayIntentBits.Guild,
GatewayIntentBits.GuildMessage,
GatewayIntentBits.MessageContent
]
})
const prefix = "!";
client.on("messageCreate", (message) => {
if (message.author.id === client.user.id) return;
if (!message.content.startsWith(prefix) return;
if (command === "ping") {
return message.reply("pong!");
};
});
これを、/pingを使用したらpong!と返すように変更すると、
code:js
const { Client, GatewayIntentBits } = require("discord.js");
const client = new Client({
intents: [
GatewayIntentBits.Guild
]
})
client.on("interactionCreate", (interaction) => {
if (!interaction.isChatInputCommand()) return;
const command = interaction.commandName
if (command === "ping") {
return interaction.reply("pong!");
};
});
変更点
スラッシュコマンドはメッセージ関連がなくても使用できるため、
code:diff
- GatewayIntentBits.GuildMessages
- GatewayIntentBits.MessageContent
イベント名が変更
code:diff
- client.on("messageCreate", (message) => {})
+ client.on("interactionCreate", (interaction) => {})
BOT自身がスラッシュコマンドを使用することはないため、
code:diff
- if (message.author.id === client.user.id) return
コマンドの形式の判別方法が異なる
code:diff
- message.content.startsWith(prefix)
+ interaction.isChatInputCommand()
commandの設定方法が異なる
code:diff
+ const command = interaction.commandName
返信方法
code:diff
- message.reply
+ interaction.reply
他は基本的にmessageをinteractionに置き換えればいい。