DiscordJS-Example/commands/response/slash.js

145 lines
3.8 KiB
JavaScript

import {
ModalBuilder,
TextInputBuilder,
ActionRowBuilder,
SlashCommandBuilder,
PermissionFlagsBits,
ModalSubmitInteraction,
AutocompleteInteraction,
ChatInputCommandInteraction,
TextInputStyle
} from 'discord.js';
import { Guilds, Keywords, Responses } from '../../database.js';
/** @param {ChatInputCommandInteraction} interaction */
async function createResponse(interaction) {}
/** @param {ChatInputCommandInteraction} interaction */
async function addResponse(interaction) {}
/** @param {ChatInputCommandInteraction} interaction */
async function removeResponse(interaction) {}
/** @param {ChatInputCommandInteraction} interaction */
async function listResponse(interaction) {}
/** @param {ChatInputCommandInteraction} interaction */
async function infoResponse(interaction) {}
/** @param {AutocompleteInteraction} interaction */
async function addAutocomplete(interaction) {}
/** @param {AutocompleteInteraction} interaction */
async function removeAutocomplete(interaction) {}
/** @param {AutocompleteInteraction} interaction */
async function infoAutocomplete(interaction) {}
export const data = new SlashCommandBuilder()
.setName('response')
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages)
.setDescription('Event based responses to specific messages with keywords.')
.addSubcommand((subcommand) =>
subcommand
.setName('create')
.setDescription('Creates a new event based response.')
.addStringOption((option) =>
option
.setName('keyword')
.setDescription('The keyword to trigger the response.')
.setRequired(true)
)
)
.addSubcommand((subcommand) =>
subcommand
.setName('add')
.setDescription('Registers a response to a keyword.')
.addStringOption((option) =>
option
.setName('keyword')
.setDescription('The keyword to trigger the response.')
.setAutocomplete(true)
.setRequired(true)
)
)
.addSubcommand((subcommand) =>
subcommand
.setName('remove')
.setDescription('Unregisters a response to a keyword.')
.addStringOption((option) =>
option
.setName('type')
.setDescription('The type of data to be removed.')
.setRequired(true)
.addChoices(
{ name: 'Keyword', value: 'keyword' },
{ name: 'Response', value: 'response' }
)
)
.addStringOption((option) =>
option
.setName('name')
.setDescription('The name of the data to be removed.')
.setAutocomplete(true)
.setRequired(true)
)
)
.addSubcommand((subcommand) =>
subcommand.setName('list').setDescription('Lists all registered keywords.')
)
.addSubcommand((subcommand) =>
subcommand
.setName('info')
.setDescription('Shows information about a registered keyword.')
.addStringOption((option) =>
option
.setName('keyword')
.setDescription('The keyword to show the details of.')
.setAutocomplete(true)
.setRequired(true)
)
);
/** @param {ModalSubmitInteraction} interaction */
export async function modalSubmit(interaction) {
// Only executable in 'add' subcommand
}
/** @param {AutocompleteInteraction} interaction */
export async function autocomplete(interaction) {
const { options } = interaction;
switch (options.getSubcommand()) {
case 'add':
addAutocomplete(interaction);
break;
case 'remove':
removeAutocomplete(interaction);
break;
case 'info':
infoAutocomplete(interaction);
break;
}
}
/** @param {ChatInputCommandInteraction} interaction */
export async function execute(interaction) {
const { options } = interaction;
switch (options.getSubcommand()) {
case 'create':
createResponse(interaction);
break;
case 'add':
addResponse(interaction);
break;
case 'remove':
removeResponse(interaction);
break;
case 'list':
listResponse(interaction);
break;
case 'info':
infoResponse(interaction);
break;
}
}