galactic-bot/middleware/logger/transports/DiscordWebhook.js

54 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-04-13 22:38:10 +02:00
const Transport = require('winston-transport');
const { WebhookClient } = require('discord.js');
const { username } = require('os').userInfo();
const options = require('../../../options.json');
//eslint-disable-next-line no-control-regex
const regex = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/gu;
2020-04-13 22:38:10 +02:00
class DiscordWebhook extends Transport {
constructor(opts) {
super(opts);
2021-06-18 02:11:55 +02:00
if(options.logger.webhook) {
this.webhookClient = new WebhookClient(
options.logger.webhook.id,
options.logger.webhook.token
);
}
}
log(info, callback) {
setImmediate(() => {
this.emit('logged', info);
});
2021-06-18 02:11:55 +02:00
if(!this.webhookClient) return undefined;
const message = info.message.replace(regex, '')
.replace(new RegExp(options.bot.token, 'gu'), '<redacted>')
.replace(new RegExp(username, 'gu'), '<redacted>');
const developers = [
'nolan',
'navy',
'sema'
];
const random = developers[Math.floor(Math.random() * developers.length)];
const embed = {
color: 0xe88388,
timestamp: new Date(),
description: `\`\`\`${message}\`\`\``,
footer: {
text: `probably ${random}'s fault`
}
};
this.webhookClient.send('', { embeds: [embed] });
callback();
}
}
2020-04-13 22:38:10 +02:00
module.exports = DiscordWebhook;