diff --git a/src/index.ts b/src/index.ts index 95fb7c4..ef498ae 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import { Client, GatewayIntentBits, Events, Collection } from 'discord.js'; +import { Client, GatewayIntentBits, Events, Collection, CommandInteraction, CommandInteractionOption, ApplicationCommandOptionType } from 'discord.js'; import * as fs from 'fs'; const { token } = JSON.parse(fs.readFileSync('./config.json', 'utf8')); import * as path from 'path'; @@ -55,12 +55,39 @@ bot.on(Events.ClientReady, async () => { log.nonsense(`| ${prettyBytes(memory.rss)} memory usage, ${prettyBytes(memory.heapUsed)} / ${prettyBytes(memory.heapTotal)} heap usage`); }); +function stringifyArg(arg: CommandInteractionOption): string { + switch (arg.type) { + case ApplicationCommandOptionType.Boolean: + case ApplicationCommandOptionType.Integer: + case ApplicationCommandOptionType.Number: + case ApplicationCommandOptionType.String: + return `${arg.name}:${arg.value}`; + case ApplicationCommandOptionType.Channel: + return `${arg.name}:${arg.channel?.id}`; + case ApplicationCommandOptionType.Role: + return `${arg.name}:${arg.role?.id}`; + case ApplicationCommandOptionType.User: + return `${arg.name}:${arg.user?.id}`; + case ApplicationCommandOptionType.Mentionable: + return `${arg.name}:${arg.channel?.id || arg.user?.id || arg.role?.id}`; + case ApplicationCommandOptionType.Attachment: + return `${arg.name}:`; + case ApplicationCommandOptionType.Subcommand: + case ApplicationCommandOptionType.SubcommandGroup: + return `${arg.name} ${arg.options?.map(stringifyArg)}`; + } +} + +function stringifyCommand(cmd: CommandInteraction) { + return `/${cmd.commandName} ${cmd.options.data.map(stringifyArg)}`; +} + bot.on(Events.InteractionCreate, async (interaction) => { if (interaction.isCommand()) { const command = interaction.client.commands.get(interaction.commandName); if (!command) return; - log.nonsense(`/${command.data.name} ${interaction.options.data.map(opt => `${opt.name}:${opt.value || opt.user?.id || opt.role?.id || opt.message?.id || opt.member || opt.channel?.id || '?'}`)}`); + log.nonsense(stringifyCommand(interaction)); try { await command.execute(interaction, interaction.member);