diff --git a/experiments/skin-database/DiscordWinstonTransport.js b/experiments/skin-database/DiscordWinstonTransport.js new file mode 100644 index 00000000..2b228c05 --- /dev/null +++ b/experiments/skin-database/DiscordWinstonTransport.js @@ -0,0 +1,17 @@ +const { Transport } = require("winston"); + +class DiscordWinstonTransport extends Transport { + constructor(channel) { + super(); + this._channel = channel; + } + + async log(info, callback) { + const { message, ...rest } = info; + await this._channel.send(`${message}`); + // Perform the writing to the remote service + callback(); + } +} + +module.exports = DiscordWinstonTransport; diff --git a/experiments/skin-database/discord-bot/index.js b/experiments/skin-database/discord-bot/index.js index 021419bf..41ff2ca2 100644 --- a/experiments/skin-database/discord-bot/index.js +++ b/experiments/skin-database/discord-bot/index.js @@ -3,6 +3,9 @@ const path = require("path"); const Discord = require("discord.js"); const config = require("../config"); const logger = require("../logger"); +const DiscordWinstonTransport = require("../DiscordWinstonTransport"); + +const CAPTBARITONE_USER_ID = "254029485463044116"; const client = new Discord.Client(); @@ -53,17 +56,33 @@ client.on("message", async message => { return; } const command = rawCommand.slice(1); - logger.info('User triggered WebampBot command', {command, user: message.author.username, args, channel: message.channel.name || 'DM'}); + logger.info("User triggered WebampBot command", { + command, + user: message.author.username, + args, + channel: message.channel.name || "DM" + }); const handler = handlers[command]; - if(handler == null) { - logger.warn('Unknown command', {command, user: message.author.username, args}); + if (handler == null) { + logger.warn("Unknown command", { + command, + user: message.author.username, + args + }); return; } handler(message, args); }); client.on("error", e => { - logger.error('The WebSocket encountered an error:', e); + logger.error("The WebSocket encountered an error:", e); }); -client.login(config.discordToken); +async function main() { + await client.login(config.discordToken); + const captbaritone = await client.fetchUser(CAPTBARITONE_USER_ID); + const channel = await captbaritone.createDM(); + logger.add(new DiscordWinstonTransport(channel)); +} + +main(); diff --git a/experiments/skin-database/logger.js b/experiments/skin-database/logger.js index 02a640df..4d0e7e97 100644 --- a/experiments/skin-database/logger.js +++ b/experiments/skin-database/logger.js @@ -1,18 +1,16 @@ -const { createLogger, format, transports } = require('winston'); +const { createLogger, format, transports } = require("winston"); const logger = createLogger({ - level: 'info', + level: "info", format: format.combine( format.timestamp({ - format: 'YYYY-MM-DD HH:mm:ss' + format: "YYYY-MM-DD HH:mm:ss", }), format.errors({ stack: true }), format.splat(), format.json() ), - transports: [ - new transports.File({ filename: 'combined.log' }) - ] + transports: [new transports.File({ filename: "combined.log" })], }); module.exports = logger;