メッセージメニューを用いてそのメッセージをピン留め/ピン留め解除するサンプル
code:js
const Discord = require("discord.js");
const GUILD_ID = "123456789012345678"//command deployed to global if undefined
const client = new discord.Client({ intents: 0 });
client.on('ready', () => {
client.application.commands.set({
name: "pin",
type: "MESSAGE"
}).catch(console.error);
});
client.on('interactionCreate', async interaction => {
if (!interaction.isContextMenu()) return;
if (!interaction.guild) return;
if (!interaction.channel.permissionsFor(client.user).has("VIEW_CHANNEL")) return interaction.reply({ content: "botにチャンネルを閲覧する権限がありません", ephemeral: true });
if (!interaction.channel.permissionsFor(client.user).has("MANAGE_MESSAGES")) return interaction.reply({ content: "botにメッセージ管理の権限がありません", ephemeral: true });
const message = interaction.options.getMessage("message");
if (!message.system) return interaction.reply({ content: "システムメッセージはピン留めできません", ephemeral: true });
if (message.pinned) {
message.unpin()
.then(() => interaction.reply("ピン止めを解除しました"))
.catch(console.error)
} else {
message.pin()
.then(() => interaction.reply("ピン止めしました"));
.catch(console.error)
}
});
interaction.options.getMessage("message")で対象のメッセージの取得が可能。
code:js
const {
Client,
GatewayIntentBits,
ContextMenuCommandBuilder,
ApplicationCommandType,
REST,
Routes,
PermissionsBitField
} = require("discord.js");
const client = new Client({
intents: [
//...
]
});
const token = process.env.token;
client.on("ready", async () => {
const rest = new REST({ version: '10' }).setToken(token);
await rest.put(
Routes.applicationCommands(client.user.id),
{
body: [
new ContextMenuCommandBuilder()
.setName("pin")
.setType(ApplicationCommandType.Message)
]
}
);
});
client.on("interactionCreate", async (interaction) => {
if (interaction.isMessageContextMenuCommand()){
if (!interatcion.guild) return;
const { channel } = interaction;
if (!channel.permissionsFor(PermissionsBitField.Flags.ViewChannel))
return interatcion.reply({
content: "BOTにチャンネル閲覧の権限がありません。",
ephemeral: true
});
if (!channel.permissionsFor(PermissionsBitField.Flags.ManageMessages))
return interatcion.reply({
content: "BOTにメッセージ管理の権限がありません。",
ephemeral: true
});
const message = interaction.options.getMessage("message")
if (message.system) return interaction.reply({
content: "システムメッセージはピン留めができません。",
ephemeral: true
});
if (message.pinned){
await message.unpin();
interaction.reply("メッセージのピン留めを解除しました。");
} else {
await message.pin();
interaction.reply("メッセージのピン留めをしました。");
};
};
});
client.login(token);