101 lines
2.3 KiB
TypeScript
101 lines
2.3 KiB
TypeScript
import {
|
|
ChatInputCommandInteraction,
|
|
MessageCreateOptions,
|
|
MessageFlags,
|
|
SlashCommandBuilder,
|
|
TextChannel
|
|
} from 'discord.js';
|
|
import { Command } from '../../commands';
|
|
|
|
const builder = new SlashCommandBuilder()
|
|
.setName('bot-mimic')
|
|
.setDescription('Makes the bot send a message')
|
|
.addStringOption((opt) =>
|
|
opt
|
|
.setName('content')
|
|
.setDescription('The text content of the message')
|
|
.setRequired(false)
|
|
)
|
|
.addAttachmentOption((opt) =>
|
|
opt
|
|
.setName('attachment')
|
|
.setDescription('An attachment for the message')
|
|
.setRequired(false)
|
|
)
|
|
.addStringOption((opt) =>
|
|
opt
|
|
.setName('reply')
|
|
.setDescription('The message ID that the bot should reply to')
|
|
.setRequired(false)
|
|
);
|
|
|
|
const command: Command = {
|
|
name: 'bot-mimic',
|
|
builder: builder,
|
|
ownerOnly: true,
|
|
execute: async (interaction: ChatInputCommandInteraction): Promise<void> => {
|
|
await interaction.deferReply({ flags: MessageFlags.Ephemeral });
|
|
|
|
if (!interaction.channel?.isTextBased()) {
|
|
await interaction.editReply(
|
|
'This command can only be used in a text channel.'
|
|
);
|
|
return;
|
|
}
|
|
|
|
if (!interaction.channel.isSendable()) {
|
|
await interaction.editReply('Channel is not sendable');
|
|
return;
|
|
}
|
|
|
|
const content = interaction.options.getString('content');
|
|
const attachment = interaction.options.getAttachment('attachment');
|
|
const replyId = interaction.options.getString('reply');
|
|
|
|
if (!content && !attachment) {
|
|
await interaction.editReply(
|
|
'Unable to send empty message. Specify content or attachment, or both.'
|
|
);
|
|
return;
|
|
}
|
|
|
|
const channel = interaction.channel as TextChannel;
|
|
const message: MessageCreateOptions = {};
|
|
|
|
if (content) {
|
|
message.content = content;
|
|
}
|
|
|
|
if (replyId) {
|
|
try {
|
|
const replyMessage = await channel.messages.fetch(replyId);
|
|
message.reply = {
|
|
messageReference: replyMessage.id
|
|
};
|
|
} catch {
|
|
await interaction.editReply('Invalid message ID for reply.');
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (attachment) {
|
|
message.files = [
|
|
{
|
|
attachment: attachment.proxyURL,
|
|
name: attachment.name
|
|
}
|
|
];
|
|
}
|
|
|
|
try {
|
|
await channel.send(message);
|
|
await interaction.editReply('Message sent successfully.');
|
|
} catch (error) {
|
|
console.error('Failed to send message:', error);
|
|
await interaction.editReply('Failed to send message.');
|
|
}
|
|
}
|
|
};
|
|
|
|
export default command;
|