feat: improve error handling

This commit is contained in:
Isaac
2023-06-25 13:41:07 +01:00
parent 47fc7bde43
commit e8b95a2f31
10 changed files with 165 additions and 23 deletions

View File

@@ -108,4 +108,4 @@ module.exports = class EditButton extends Button {
);
}
}
};
};

View File

@@ -3,6 +3,11 @@ const {
EmbedBuilder,
} = require('discord.js');
const { diff: getDiff } = require('object-diffy');
const ShortUniqueId = require('short-unique-id');
const uid = new ShortUniqueId();
const getSUID = () => uid.stamp(10);
const uuidRegex = /[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}/g;
@@ -235,6 +240,7 @@ async function logMessageEvent(client, {
module.exports = {
getLogChannel,
getSUID,
logAdminEvent,
logMessageEvent,
logTicketEvent,

View File

@@ -28,6 +28,7 @@ const {
decrypt,
encrypt,
} = new Cryptr(process.env.ENCRYPTION_KEY);
const { getSUID } = require('../logging');
/**
* @typedef {import('@prisma/client').Category &
@@ -682,7 +683,7 @@ module.exports = class TicketManager {
userId: interaction.user.id,
});
} catch (error) {
const ref = require('crypto').randomUUID();
const ref = getSUID();
this.client.log.warn.tickets('An error occurred whilst creating ticket', channel.id);
this.client.log.error.tickets(ref);
this.client.log.error.tickets(error);

View File

@@ -0,0 +1,22 @@
const { Listener } = require('@eartharoid/dbf');
module.exports = class extends Listener {
constructor(client, options) {
super(client, {
...options,
emitter: client.autocomplete,
event: 'error',
});
}
async run({
completer,
error,
interaction,
}) {
this.client.log.error.autocomplete(`"${completer.id}" autocomplete execution error:`, {
error,
interaction,
});
}
};

View File

@@ -3,6 +3,7 @@ const {
EmbedBuilder,
codeBlock,
} = require('discord.js');
const { getSUID } = require('../../lib/logging');
module.exports = class extends Listener {
constructor(client, options) {
@@ -18,7 +19,7 @@ module.exports = class extends Listener {
error,
interaction,
}) {
const ref = require('crypto').randomUUID();
const ref = getSUID();
this.client.log.error.buttons(ref);
this.client.log.error.buttons(`"${button.id}" button execution error:`, error);
let locale = null;
@@ -39,7 +40,7 @@ module.exports = class extends Listener {
.addFields([
{
name: getMessage('misc.error.fields.identifier'),
value: codeBlock(ref),
value: codeBlock(' ' + ref + ' '),
},
]),
],

View File

@@ -3,6 +3,7 @@ const {
EmbedBuilder,
codeBlock,
} = require('discord.js');
const { getSUID } = require('../../lib/logging');
module.exports = class extends Listener {
constructor(client, options) {
@@ -18,7 +19,7 @@ module.exports = class extends Listener {
error,
interaction,
}) {
const ref = require('crypto').randomUUID();
const ref = getSUID();
this.client.log.error.commands(ref);
this.client.log.error.commands(`"${command.name}" command execution error:`, error);
let locale = null;
@@ -39,7 +40,7 @@ module.exports = class extends Listener {
.addFields([
{
name: getMessage('misc.error.fields.identifier'),
value: codeBlock(ref),
value: codeBlock(' ' + ref + ' '),
},
]),
],

View File

@@ -0,0 +1,51 @@
const { Listener } = require('@eartharoid/dbf');
const {
EmbedBuilder,
codeBlock,
} = require('discord.js');
const { getSUID } = require('../../lib/logging');
module.exports = class extends Listener {
constructor(client, options) {
super(client, {
...options,
emitter: client.menus,
event: 'error',
});
}
async run({
menu,
error,
interaction,
}) {
const ref = getSUID();
this.client.log.error.menus(ref);
this.client.log.error.menus(`"${menu.id}" menu execution error:`, error);
let locale = null;
if (interaction.guild) {
locale = (await this.client.prisma.guild.findUnique({
select: { locale: true },
where: { id: interaction.guild.id },
})).locale;
}
const getMessage = this.client.i18n.getLocale(locale);
const data = {
components: [],
embeds: [
new EmbedBuilder()
.setColor('Orange')
.setTitle(getMessage('misc.error.title'))
.setDescription(getMessage('misc.error.description'))
.addFields([
{
name: getMessage('misc.error.fields.identifier'),
value: codeBlock(' ' + ref + ' '),
},
]),
],
};
interaction.reply(data).catch(() => interaction.editReply(data));
}
};

View File

@@ -0,0 +1,51 @@
const { Listener } = require('@eartharoid/dbf');
const {
EmbedBuilder,
codeBlock,
} = require('discord.js');
const { getSUID } = require('../../lib/logging');
module.exports = class extends Listener {
constructor(client, options) {
super(client, {
...options,
emitter: client.modals,
event: 'error',
});
}
async run({
modal,
error,
interaction,
}) {
const ref = getSUID();
this.client.log.error.modals(ref);
this.client.log.error.modals(`"${modal.id}" modal execution error:`, error);
let locale = null;
if (interaction.guild) {
locale = (await this.client.prisma.guild.findUnique({
select: { locale: true },
where: { id: interaction.guild.id },
})).locale;
}
const getMessage = this.client.i18n.getLocale(locale);
const data = {
components: [],
embeds: [
new EmbedBuilder()
.setColor('Orange')
.setTitle(getMessage('misc.error.title'))
.setDescription(getMessage('misc.error.description'))
.addFields([
{
name: getMessage('misc.error.fields.identifier'),
value: codeBlock(' ' + ref + ' '),
},
]),
],
};
interaction.reply(data).catch(() => interaction.editReply(data));
}
};