mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2025-09-05 09:41:27 +03:00
feat: improve error handling
This commit is contained in:
@@ -108,4 +108,4 @@ module.exports = class EditButton extends Button {
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
|
22
src/listeners/autocomplete/error.js
Normal file
22
src/listeners/autocomplete/error.js
Normal 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,
|
||||
});
|
||||
}
|
||||
};
|
@@ -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 + ' '),
|
||||
},
|
||||
]),
|
||||
],
|
||||
|
@@ -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 + ' '),
|
||||
},
|
||||
]),
|
||||
],
|
||||
|
51
src/listeners/menus/error.js
Normal file
51
src/listeners/menus/error.js
Normal 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));
|
||||
}
|
||||
};
|
51
src/listeners/modals/error.js
Normal file
51
src/listeners/modals/error.js
Normal 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));
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user