better command logging

This commit is contained in:
Jill 2023-11-12 23:32:14 +03:00
parent 6705b0cd4d
commit 5732fee594
Signed by: oat
GPG Key ID: 33489AA58A955108
1 changed files with 29 additions and 2 deletions

View File

@ -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}:<attachment>`;
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);