const { createLogger, format, transports, config } = require('winston'); const { combine, label, printf } = format; const moment = require('moment'); const chalk = require('chalk'); class Logger { constructor(manager) { this.manager = manager; this.logger = createLogger({ transports: [ new transports.Console(), new transports.File({ filename: `logs/${this.date.replace(/ /g, '-')}.log` }), new transports.File({ filename: `logs/${this.date.replace(/ /g, '-')}-error.log`, level: 'error' }) ] }); this.client .on('shardCreate', (shard) => this.write(shard, "Shard created.", 'DEBUG')) .on('message', (shard, message) => this._handleMessage(shard, message)); } //Messages coming from the shards process.send functions. async _handleMessage(shard, message) { if(message._ready || message._disconnect || message._reconnecting || message._sFetchProp || message._sEval || message._sRespawnAll) return undefined; //Properties used for discord.js internal sharding, must filter for. } //The MAIN function for writing everything to the logger. async write(shard, string = '', type = 'silly') { if(!config.npm.levels[type]) return undefined; const header = `[${this.date}][shard-${this._shardId(shard)}]`; //[04/02/2020 12:52:20][shard-00] this.logger.log(type, string) } _shardId(shard) { const id = shard.id; return `${id}`.length === 1 ? `0${id}` : `${id}`; } get date() { return moment().format("MM-DD-YYYY hh:mm:ss"); } } module.exports = Logger;