UNPKG

2.56 kBJavaScriptView Raw
1const log = logger.withScope('errorHandler')
2const Sentry = require('@sentry/node')
3
4const bannedErrors = [
5 'Token/username/password not found.', // incorrect config
6 'Missing Permissions', // incorrect Discord permissions
7 'Incorrect login details were provided.', // incorrect Discord token
8 'Access token missing!', // incorrect Facebook credentials
9 'MQTT connection failed' // Facebook MQTT connection fail
10]
11
12const dataPath = process.env.DATA_PATH !== 'undefined' ? process.env.DATA_PATH : undefined
13
14module.exports = async error => {
15 if (!(error instanceof Error)) {
16 if (typeof error === 'string') error = new Error(error)
17 if (error.err || error.error) {
18 let err = error.err || error.error
19 if (err instanceof Error) {
20 error = err
21 }
22 }
23 }
24 log.error(error)
25 if (!bannedErrors.some(banned => error.toString().includes(banned))) Sentry.captureException(error)
26
27 console.log('')
28 log.warn(`Logs from NPM are unnecessary and don't give much information.
29 Miscord logs folder:
30 ${dataPath || require('../lib/config/getConfigDir')()}/logs`)
31
32 if (global.discord && discord.channels && discord.channels.error) {
33 try {
34 let errorMessage = error instanceof Error
35 ? `${error.message}\n${error.stack}`
36 : typeof error !== 'string' ? JSON.stringify(error) : error
37 if (errorMessage.length >= 1900) {
38 for (let i = 0; i < errorMessage.length; i += 1900) {
39 await discord.channels.error.send(errorMessage.substring(i, i + 1900), { code: true })
40 }
41 } else {
42 await discord.channels.error.send(errorMessage, { code: true })
43 }
44 } catch (err) {
45 log.fatal(err)
46 Sentry.captureException(err)
47 } finally {
48 await Sentry.getCurrentHub().getClient().close(2000)
49 await discord.client.destroy()
50 console.error('close')
51 }
52 } else {
53 await Sentry.getCurrentHub().getClient().close(2000)
54 if (global.discord) await discord.client.destroy()
55 console.error('close')
56 }
57}
58module.exports.initSentry = () => {
59 const pkg = require('../package.json')
60 Sentry.init({
61 dsn: 'https://58fe91e28af9416eade1597c9c5448c0@sentry.miscord.net/2',
62 maxBreadcrumbs: 0, // important, as it shows console messages
63 release: `miscord@${pkg.version}`
64 })
65 Sentry.configureScope(scope => {
66 scope.setTag('is_packaged', Boolean(process.pkg).toString().toLowerCase())
67 scope.setTag('platform', require('os').platform())
68 scope.setTag('version', pkg.version)
69 scope.setTag('node_version', process.version)
70 })
71}