From c689d4db1883f7fce1ec0e842c7709efd71b36e1 Mon Sep 17 00:00:00 2001 From: Romitou Date: Tue, 24 Aug 2021 22:40:09 +0200 Subject: [PATCH 1/5] :bug: Fix current versioning --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 134949a4..efe0f539 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "swan", - "version": "2.1.3", + "version": "2.1.4", "description": "Bot discord de Skript-MC.", "main": "./src/main.ts", "scripts": { From 8e6e466d749b374f76bdbdcc1526ddc1777b72ce Mon Sep 17 00:00:00 2001 From: Romitou Date: Tue, 24 Aug 2021 23:41:33 +0200 Subject: [PATCH 2/5] :goal_net: Properly catch errors --- src/listeners/client/error.ts | 8 +++++--- src/listeners/commandHandler/error.ts | 6 ++++-- src/listeners/inhibitorHandler/error.ts | 8 +++++--- src/listeners/listenerHandler/error.ts | 8 +++++--- src/listeners/mongodb/error.ts | 8 +++++--- src/listeners/process/uncaughtException.ts | 8 +++++--- src/listeners/process/unhandledRejection.ts | 8 +++++--- src/listeners/taskHandler/error.ts | 8 +++++--- 8 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/listeners/client/error.ts b/src/listeners/client/error.ts index 1365e440..a2d77cea 100644 --- a/src/listeners/client/error.ts +++ b/src/listeners/client/error.ts @@ -1,4 +1,4 @@ -import { captureException } from '@sentry/node'; +import { captureException, flush } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -10,11 +10,13 @@ class ClientErrorListener extends Listener { }); } - public exec(error: Error): void { + public async exec(error: Error): Promise { Logger.error('Oops, something went wrong with the Swan Client!'); if (process.env.NODE_ENV === 'production') { captureException(error); - throw new Error(error.stack); + await flush(5000); + // eslint-disable-next-line node/no-process-exit + process.exit(1); } else { Logger.error(error.stack); } diff --git a/src/listeners/commandHandler/error.ts b/src/listeners/commandHandler/error.ts index dfd870a1..7f17de24 100644 --- a/src/listeners/commandHandler/error.ts +++ b/src/listeners/commandHandler/error.ts @@ -1,4 +1,4 @@ -import { captureException } from '@sentry/node'; +import { captureException, flush } from '@sentry/node'; import { Listener } from 'discord-akairo'; import type { Command } from 'discord-akairo'; import type { Message } from 'discord.js'; @@ -22,7 +22,9 @@ class CommandHandlerErrorListener extends Listener { if (process.env.NODE_ENV === 'production') { captureException(error); - throw new Error(error.stack); + await flush(5000); + // eslint-disable-next-line node/no-process-exit + process.exit(1); } else { Logger.error(error.stack); } diff --git a/src/listeners/inhibitorHandler/error.ts b/src/listeners/inhibitorHandler/error.ts index c6df86e5..85d79eec 100644 --- a/src/listeners/inhibitorHandler/error.ts +++ b/src/listeners/inhibitorHandler/error.ts @@ -1,4 +1,4 @@ -import { captureException } from '@sentry/node'; +import { captureException, flush } from '@sentry/node'; import { Listener } from 'discord-akairo'; import type { Inhibitor } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -11,12 +11,14 @@ class InhibitorHandlerErrorListener extends Listener { }); } - public exec(error: Error, inhibitor: Inhibitor): void { + public async exec(error: Error, inhibitor: Inhibitor): Promise { Logger.error('Oops, something went wrong with an inhibitor!'); Logger.detail(`Inhibitor: ${inhibitor.id}`); if (process.env.NODE_ENV === 'production') { captureException(error); - throw new Error(error.stack); + await flush(5000); + // eslint-disable-next-line node/no-process-exit + process.exit(1); } else { Logger.error(error.stack); } diff --git a/src/listeners/listenerHandler/error.ts b/src/listeners/listenerHandler/error.ts index 911a1b78..fb007b37 100644 --- a/src/listeners/listenerHandler/error.ts +++ b/src/listeners/listenerHandler/error.ts @@ -1,4 +1,4 @@ -import { captureException } from '@sentry/node'; +import { captureException, flush } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -10,12 +10,14 @@ class ListenerHandlerErrorListener extends Listener { }); } - public exec(error: Error, listener: Listener): void { + public async exec(error: Error, listener: Listener): Promise { Logger.error('Oops, something went wrong with a listener!'); Logger.detail(`Listener: ${listener.id}`); if (process.env.NODE_ENV === 'production') { captureException(error); - throw new Error(error.stack); + await flush(5000); + // eslint-disable-next-line node/no-process-exit + process.exit(1); } else { Logger.error(error.stack); } diff --git a/src/listeners/mongodb/error.ts b/src/listeners/mongodb/error.ts index 265726a3..0a15156e 100644 --- a/src/listeners/mongodb/error.ts +++ b/src/listeners/mongodb/error.ts @@ -1,4 +1,4 @@ -import { captureException } from '@sentry/node'; +import { captureException, flush } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -10,12 +10,14 @@ class MongodbErrorListener extends Listener { }); } - public exec(error: Error): void { + public async exec(error: Error): Promise { Logger.error('Oops, something went wrong with MongoDB!'); Logger.detail('Please make sure MongoDB is running.'); if (process.env.NODE_ENV === 'production') { captureException(error); - throw new Error(error.stack); + await flush(5000); + // eslint-disable-next-line node/no-process-exit + process.exit(1); } else { Logger.error(error.stack); } diff --git a/src/listeners/process/uncaughtException.ts b/src/listeners/process/uncaughtException.ts index 1ea580f6..81705a99 100644 --- a/src/listeners/process/uncaughtException.ts +++ b/src/listeners/process/uncaughtException.ts @@ -1,4 +1,4 @@ -import { captureException } from '@sentry/node'; +import { captureException, flush } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -10,11 +10,13 @@ class UncaughtExceptionListener extends Listener { }); } - public exec(error: Error): void { + public async exec(error: Error): Promise { Logger.error('Oops, something went wrong with Swan! (uncaughtException)'); if (process.env.NODE_ENV === 'production') { captureException(error); - throw new Error(error.stack); + await flush(5000); + // eslint-disable-next-line node/no-process-exit + process.exit(1); } else { Logger.error(error.stack); Logger.warn('An uncaughtException just occurred. Swan is now in an undefined state. Continuing using it might lead to unforeseen and unpredictable issues.'); diff --git a/src/listeners/process/unhandledRejection.ts b/src/listeners/process/unhandledRejection.ts index 71cdc564..0ae16d36 100644 --- a/src/listeners/process/unhandledRejection.ts +++ b/src/listeners/process/unhandledRejection.ts @@ -1,4 +1,4 @@ -import { captureException } from '@sentry/node'; +import { captureException, flush } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -10,11 +10,13 @@ class UnhandledRejectionListener extends Listener { }); } - public exec(error: Error): void { + public async exec(error: Error): Promise { Logger.error('Oops, something went wrong with Swan! (unhandledRejection)'); if (process.env.NODE_ENV === 'production') { captureException(error); - throw new Error(error.stack); + await flush(5000); + // eslint-disable-next-line node/no-process-exit + process.exit(1); } else { Logger.error(error.stack); } diff --git a/src/listeners/taskHandler/error.ts b/src/listeners/taskHandler/error.ts index 29d1c26c..b6a1c852 100644 --- a/src/listeners/taskHandler/error.ts +++ b/src/listeners/taskHandler/error.ts @@ -1,4 +1,4 @@ -import { captureException } from '@sentry/node'; +import { captureException, flush } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; import type Task from '@/app/structures/Task'; @@ -11,13 +11,15 @@ class TaskHandlerErrorListener extends Listener { }); } - public exec(error: Error, task: Task): void { + public async exec(error: Error, task: Task): Promise { Logger.error('Oops, something went wrong with a task!'); Logger.detail(`Task: ${task}`); Logger.detail(`Cron: ${task.cron}`); if (process.env.NODE_ENV === 'production') { captureException(error); - throw new Error(error.stack); + await flush(5000); + // eslint-disable-next-line node/no-process-exit + process.exit(1); } else { Logger.error(error.stack); } From 4d33a8c462d965179a7d950188475e1daac7ec24 Mon Sep 17 00:00:00 2001 From: Romitou Date: Wed, 1 Sep 2021 12:45:32 +0200 Subject: [PATCH 3/5] :goal_net: Crash bot only when necessary --- src/listeners/client/error.ts | 14 ++++---------- src/listeners/commandHandler/error.ts | 13 +++---------- src/listeners/inhibitorHandler/error.ts | 14 ++++---------- src/listeners/listenerHandler/error.ts | 14 ++++---------- src/listeners/mongodb/error.ts | 14 ++++---------- src/listeners/process/uncaughtException.ts | 2 +- src/listeners/process/unhandledRejection.ts | 14 ++++---------- src/listeners/taskHandler/error.ts | 14 ++++---------- 8 files changed, 28 insertions(+), 71 deletions(-) diff --git a/src/listeners/client/error.ts b/src/listeners/client/error.ts index a2d77cea..962e76e7 100644 --- a/src/listeners/client/error.ts +++ b/src/listeners/client/error.ts @@ -1,4 +1,4 @@ -import { captureException, flush } from '@sentry/node'; +import { captureException } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -10,16 +10,10 @@ class ClientErrorListener extends Listener { }); } - public async exec(error: Error): Promise { + public exec(error: Error): void { + captureException(error); Logger.error('Oops, something went wrong with the Swan Client!'); - if (process.env.NODE_ENV === 'production') { - captureException(error); - await flush(5000); - // eslint-disable-next-line node/no-process-exit - process.exit(1); - } else { - Logger.error(error.stack); - } + Logger.error(error.stack); } } diff --git a/src/listeners/commandHandler/error.ts b/src/listeners/commandHandler/error.ts index 7f17de24..cdff068e 100644 --- a/src/listeners/commandHandler/error.ts +++ b/src/listeners/commandHandler/error.ts @@ -1,4 +1,4 @@ -import { captureException, flush } from '@sentry/node'; +import { captureException } from '@sentry/node'; import { Listener } from 'discord-akairo'; import type { Command } from 'discord-akairo'; import type { Message } from 'discord.js'; @@ -15,19 +15,12 @@ class CommandHandlerErrorListener extends Listener { } public async exec(error: Error, message: Message, command: Command): Promise { + captureException(error); await message.channel.send(messages.global.oops).catch(noop); Logger.error('Oops, something went wrong with a command!'); Logger.detail(`Command: ${command}`); Logger.detail(`Message: ${message.url}`); - - if (process.env.NODE_ENV === 'production') { - captureException(error); - await flush(5000); - // eslint-disable-next-line node/no-process-exit - process.exit(1); - } else { - Logger.error(error.stack); - } + Logger.error(error.stack); } } diff --git a/src/listeners/inhibitorHandler/error.ts b/src/listeners/inhibitorHandler/error.ts index 85d79eec..f461028f 100644 --- a/src/listeners/inhibitorHandler/error.ts +++ b/src/listeners/inhibitorHandler/error.ts @@ -1,4 +1,4 @@ -import { captureException, flush } from '@sentry/node'; +import { captureException } from '@sentry/node'; import { Listener } from 'discord-akairo'; import type { Inhibitor } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -11,17 +11,11 @@ class InhibitorHandlerErrorListener extends Listener { }); } - public async exec(error: Error, inhibitor: Inhibitor): Promise { + public exec(error: Error, inhibitor: Inhibitor): void { + captureException(error); Logger.error('Oops, something went wrong with an inhibitor!'); Logger.detail(`Inhibitor: ${inhibitor.id}`); - if (process.env.NODE_ENV === 'production') { - captureException(error); - await flush(5000); - // eslint-disable-next-line node/no-process-exit - process.exit(1); - } else { - Logger.error(error.stack); - } + Logger.error(error.stack); } } diff --git a/src/listeners/listenerHandler/error.ts b/src/listeners/listenerHandler/error.ts index fb007b37..2b90b400 100644 --- a/src/listeners/listenerHandler/error.ts +++ b/src/listeners/listenerHandler/error.ts @@ -1,4 +1,4 @@ -import { captureException, flush } from '@sentry/node'; +import { captureException } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -10,17 +10,11 @@ class ListenerHandlerErrorListener extends Listener { }); } - public async exec(error: Error, listener: Listener): Promise { + public exec(error: Error, listener: Listener): void { + captureException(error); Logger.error('Oops, something went wrong with a listener!'); Logger.detail(`Listener: ${listener.id}`); - if (process.env.NODE_ENV === 'production') { - captureException(error); - await flush(5000); - // eslint-disable-next-line node/no-process-exit - process.exit(1); - } else { - Logger.error(error.stack); - } + Logger.error(error.stack); } } diff --git a/src/listeners/mongodb/error.ts b/src/listeners/mongodb/error.ts index 0a15156e..ccffd28d 100644 --- a/src/listeners/mongodb/error.ts +++ b/src/listeners/mongodb/error.ts @@ -1,4 +1,4 @@ -import { captureException, flush } from '@sentry/node'; +import { captureException } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -10,17 +10,11 @@ class MongodbErrorListener extends Listener { }); } - public async exec(error: Error): Promise { + public exec(error: Error): void { + captureException(error); Logger.error('Oops, something went wrong with MongoDB!'); Logger.detail('Please make sure MongoDB is running.'); - if (process.env.NODE_ENV === 'production') { - captureException(error); - await flush(5000); - // eslint-disable-next-line node/no-process-exit - process.exit(1); - } else { - Logger.error(error.stack); - } + Logger.error(error.stack); } } diff --git a/src/listeners/process/uncaughtException.ts b/src/listeners/process/uncaughtException.ts index 81705a99..219847be 100644 --- a/src/listeners/process/uncaughtException.ts +++ b/src/listeners/process/uncaughtException.ts @@ -11,9 +11,9 @@ class UncaughtExceptionListener extends Listener { } public async exec(error: Error): Promise { + captureException(error); Logger.error('Oops, something went wrong with Swan! (uncaughtException)'); if (process.env.NODE_ENV === 'production') { - captureException(error); await flush(5000); // eslint-disable-next-line node/no-process-exit process.exit(1); diff --git a/src/listeners/process/unhandledRejection.ts b/src/listeners/process/unhandledRejection.ts index 0ae16d36..0aebcb3c 100644 --- a/src/listeners/process/unhandledRejection.ts +++ b/src/listeners/process/unhandledRejection.ts @@ -1,4 +1,4 @@ -import { captureException, flush } from '@sentry/node'; +import { captureException } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; @@ -10,16 +10,10 @@ class UnhandledRejectionListener extends Listener { }); } - public async exec(error: Error): Promise { + public exec(error: Error): void { + captureException(error); Logger.error('Oops, something went wrong with Swan! (unhandledRejection)'); - if (process.env.NODE_ENV === 'production') { - captureException(error); - await flush(5000); - // eslint-disable-next-line node/no-process-exit - process.exit(1); - } else { - Logger.error(error.stack); - } + Logger.error(error.stack); } } diff --git a/src/listeners/taskHandler/error.ts b/src/listeners/taskHandler/error.ts index b6a1c852..456fe3ff 100644 --- a/src/listeners/taskHandler/error.ts +++ b/src/listeners/taskHandler/error.ts @@ -1,4 +1,4 @@ -import { captureException, flush } from '@sentry/node'; +import { captureException } from '@sentry/node'; import { Listener } from 'discord-akairo'; import Logger from '@/app/structures/Logger'; import type Task from '@/app/structures/Task'; @@ -11,18 +11,12 @@ class TaskHandlerErrorListener extends Listener { }); } - public async exec(error: Error, task: Task): Promise { + public exec(error: Error, task: Task): void { + captureException(error); Logger.error('Oops, something went wrong with a task!'); Logger.detail(`Task: ${task}`); Logger.detail(`Cron: ${task.cron}`); - if (process.env.NODE_ENV === 'production') { - captureException(error); - await flush(5000); - // eslint-disable-next-line node/no-process-exit - process.exit(1); - } else { - Logger.error(error.stack); - } + Logger.error(error.stack); } } From 48f9aef10c7eac11402e1c6527e1d1f80c28b275 Mon Sep 17 00:00:00 2001 From: Romitou Date: Wed, 1 Sep 2021 13:03:50 +0200 Subject: [PATCH 4/5] :bug: Fix error when no idea is found --- src/commands/fun/idea.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/commands/fun/idea.ts b/src/commands/fun/idea.ts index 123ff368..ec190c39 100644 --- a/src/commands/fun/idea.ts +++ b/src/commands/fun/idea.ts @@ -30,6 +30,11 @@ class IdeaCommand extends Command { const randomIdea = ideas.random(1)[0]; + if (!randomIdea) { + await message.channel.send(config.messages.noIdeaFound); + return; + } + const embed = new MessageEmbed() .setColor(settings.colors.default) .setAuthor( From 5bd823153b0aebe969514d283705f0e7dc312801 Mon Sep 17 00:00:00 2001 From: Romitou Date: Wed, 1 Sep 2021 13:06:26 +0200 Subject: [PATCH 5/5] :bookmark: 2.1.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4c2c595f..92ec897a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "swan", - "version": "2.1.4", + "version": "2.1.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "swan", - "version": "2.1.4", + "version": "2.1.5", "hasInstallScript": true, "license": "GPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index efe0f539..8c19ac18 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "swan", - "version": "2.1.4", + "version": "2.1.5", "description": "Bot discord de Skript-MC.", "main": "./src/main.ts", "scripts": {