diff --git a/.gitignore b/.gitignore index 1e1baaa..9c81996 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules/ -nodemon.json \ No newline at end of file +nodemon.json +*.log \ No newline at end of file diff --git a/commands/music/earrape.js b/commands/music/earrape.js index 3484ad1..c071b67 100644 --- a/commands/music/earrape.js +++ b/commands/music/earrape.js @@ -1,5 +1,16 @@ const { Command } = require('discord.js-commando'); const { MessageEmbed } = require('discord.js'); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class Play extends Command { constructor(client) { @@ -33,8 +44,8 @@ module.exports = class Play extends Command { const embed = new MessageEmbed().setColor('#000099').setTitle(`:loud_sound: Earrape ${message.guild.music.sfx.earrape ? 'on' : 'off'}`); return await message.say({ embed }); } - } catch (err) { - console.error(err); + } catch(err) { + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } diff --git a/commands/music/pause.js b/commands/music/pause.js index 8b5daae..d9a242f 100644 --- a/commands/music/pause.js +++ b/commands/music/pause.js @@ -1,5 +1,16 @@ const { Command } = require('discord.js-commando'); const { MessageEmbed } = require('discord.js'); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class Play extends Command { constructor(client) { @@ -36,8 +47,8 @@ module.exports = class Play extends Command { const embed = new MessageEmbed().setColor('#000099').setTitle(':pause_button: Paused player'); return await message.say({ embed }); } - } catch (err) { - console.error(err); + } catch(err) { + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } diff --git a/commands/music/play.js b/commands/music/play.js index 61d873b..9fea22c 100644 --- a/commands/music/play.js +++ b/commands/music/play.js @@ -4,6 +4,17 @@ const Youtube = require('simple-youtube-api'); const ffmpeg = require('fluent-ffmpeg'); const puppeteer = require('puppeteer'); const youtube = new Youtube(process.env.YOUTUBE_API_KEY); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class Play extends Command { constructor(client) { @@ -223,7 +234,7 @@ module.exports = class Play extends Command { } } } catch(err) { - console.error(err); + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(':x: Track is private or I just can\'t play this for some other reason'); return message.say({ embed }); } diff --git a/commands/music/queue.js b/commands/music/queue.js index 4a8a672..1d48674 100644 --- a/commands/music/queue.js +++ b/commands/music/queue.js @@ -1,5 +1,16 @@ const { Command } = require('discord.js-commando'); const { MessageEmbed } = require('discord.js'); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class Play extends Command { constructor(client) { @@ -36,7 +47,7 @@ module.exports = class Play extends Command { return await message.say({ embed }); } } catch(err) { - console.error(err); + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } diff --git a/commands/music/resume.js b/commands/music/resume.js index e9285bb..d985aeb 100644 --- a/commands/music/resume.js +++ b/commands/music/resume.js @@ -1,5 +1,16 @@ const { Command } = require('discord.js-commando'); const { MessageEmbed } = require('discord.js'); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class Play extends Command { constructor(client) { @@ -33,8 +44,8 @@ module.exports = class Play extends Command { const embed = new MessageEmbed().setColor('#000099').setTitle(':arrow_forward: Resumed player'); return await message.say({ embed }); } - } catch (err) { - console.error(err); + } catch(err) { + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } diff --git a/commands/music/search.js b/commands/music/search.js index 9319ab4..abda520 100644 --- a/commands/music/search.js +++ b/commands/music/search.js @@ -2,6 +2,17 @@ const { Command } = require('discord.js-commando'); const { MessageEmbed } = require('discord.js'); const Youtube = require('simple-youtube-api'); const youtube = new Youtube(process.env.YOUTUBE_API_KEY); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class JoinCommand extends Command { constructor(client) { @@ -14,7 +25,7 @@ module.exports = class JoinCommand extends Command { args: [ { key: 'query', - prompt: 'what do you want to listen to?', + prompt: 'what do you want to search for in youtube?', type: 'string', validate: query => query.length > 0 } @@ -91,8 +102,8 @@ module.exports = class JoinCommand extends Command { return await message.say({ embed }); } } - } catch (err) { - console.error(err); + } catch(err) { + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } diff --git a/commands/music/seek.js b/commands/music/seek.js index 8aecc65..ae4a7e0 100644 --- a/commands/music/seek.js +++ b/commands/music/seek.js @@ -1,5 +1,16 @@ const { Command } = require('discord.js-commando'); const { MessageEmbed } = require('discord.js'); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class JoinCommand extends Command { constructor(client) { @@ -12,7 +23,7 @@ module.exports = class JoinCommand extends Command { args: [ { key: 'query', - prompt: 'where do you want to seek?', + prompt: 'to what time do you want to seek? (HH:MM:SS)', type: 'string', validate: query => query.length > 0 && query.match(/(\d+:)?\d{2}:\d{2}/) } @@ -48,8 +59,8 @@ module.exports = class JoinCommand extends Command { const embed = new MessageEmbed().setColor('#000099').setTitle(`:musical_note: Sought to ${query}`); return await message.say({ embed }); } - } catch (err) { - console.error(err); + } catch(err) { + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } diff --git a/commands/music/skip.js b/commands/music/skip.js index 714e1e2..2dd564e 100644 --- a/commands/music/skip.js +++ b/commands/music/skip.js @@ -1,5 +1,16 @@ const { Command } = require('discord.js-commando'); const { MessageEmbed } = require('discord.js'); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class Play extends Command { constructor(client) { @@ -31,8 +42,8 @@ module.exports = class Play extends Command { const embed = new MessageEmbed().setColor('#000099').setTitle(':track_next: Skipped current track'); return await message.say({ embed }); } - } catch (err) { - console.error(err); + } catch(err) { + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } diff --git a/commands/music/stop.js b/commands/music/stop.js index b31ff42..ff3350e 100644 --- a/commands/music/stop.js +++ b/commands/music/stop.js @@ -1,5 +1,16 @@ const { Command } = require('discord.js-commando'); const { MessageEmbed } = require('discord.js'); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class Play extends Command { constructor(client) { @@ -37,7 +48,7 @@ module.exports = class Play extends Command { return await message.say({ embed }); } } catch(err) { - console.error(err); + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } diff --git a/commands/music/volume.js b/commands/music/volume.js index 03dbe28..212835f 100644 --- a/commands/music/volume.js +++ b/commands/music/volume.js @@ -1,5 +1,16 @@ const { Command } = require('discord.js-commando'); const { MessageEmbed } = require('discord.js'); +const winston = require('winston'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); module.exports = class Play extends Command { constructor(client) { @@ -16,7 +27,7 @@ module.exports = class Play extends Command { args: [ { key: 'query', - prompt: 'specify the volume (greater than 0)', + prompt: 'specify the volume (more than 0)', type: 'string', validate: query => query.length > 0 && parseInt(query) >= 0 && parseInt(query) <= 200 } @@ -39,8 +50,8 @@ module.exports = class Play extends Command { const embed = new MessageEmbed().setColor('#000099').setTitle(`:sound: Volume set to ${query}%`); return await message.say({ embed }); } - } catch (err) { - console.error(err); + } catch(err) { + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } diff --git a/index.js b/index.js index 9ebb403..383c15c 100644 --- a/index.js +++ b/index.js @@ -1,8 +1,19 @@ const { CommandoClient } = require('discord.js-commando'); const { Structures } = require('discord.js'); const { MessageEmbed } = require('discord.js'); -const path = require('path'); +const winston = require('winston'); const ytdl = require('ytdl-core'); +const path = require('path'); + +const logger = winston.createLogger({ + transports: [ + new winston.transports.Console(), + new winston.transports.File({ filename: 'logs.log' }), + ], + format: winston.format.combine( + winston.format.printf(log => `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()} - [${log.level.toUpperCase()}] - ${log.message}`), + ) +}); Structures.extend('Guild', Guild => { class MusicGuild extends Guild { @@ -89,8 +100,8 @@ Structures.extend('Guild', Guild => { voiceChannel.leave(); throw err; }); - } catch (err) { - console.error(err); + } catch(err) { + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } @@ -140,7 +151,7 @@ Structures.extend('Guild', Guild => { } }, 1000); } catch(err) { - console.error(err); + logger.log('error', err); const embed = new MessageEmbed().setColor('#ff0000').setTitle(`:x: Error occured: ${err.message}`); return message.say({ embed }); } @@ -183,8 +194,10 @@ client.once('ready', () => { client.user.setActivity('amsa7 lak7el'); }); -client.login(process.env.BOT_TOKEN); +client.on('debug', msg => logger.log('debug', msg)); +client.on('warn', msg => logger.log('warn', msg)); +client.on('error', msg => logger.log('error', msg)); -client.on('error', console.error); +process.on('unhandledRejection', err => logger.log('error', err)); -process.on('unhandledRejection', error => console.error('Uncaught Promise Rejection', error)); \ No newline at end of file +client.login(process.env.BOT_TOKEN); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index abdcf04..7eafb8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -338,6 +338,15 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -351,6 +360,34 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -471,6 +508,16 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, "discord.js": { "version": "12.2.0", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.2.0.tgz", @@ -494,6 +541,14 @@ "require-all": "^3.0.0" } }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.x" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -502,6 +557,11 @@ "once": "^1.4.0" } }, + "env-variable": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", + "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -646,6 +706,11 @@ "yauzl": "^2.10.0" } }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -654,6 +719,11 @@ "pend": "~1.2.0" } }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -894,6 +964,11 @@ } } }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -981,6 +1056,11 @@ "isobject": "^3.0.1" } }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -1027,6 +1107,31 @@ "graceful-fs": "^4.1.11" } }, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "requires": { + "colornames": "^1.1.1" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "logform": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, "m3u8stream": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.5.tgz", @@ -1334,6 +1439,11 @@ "wrappy": "1" } }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -1618,6 +1728,14 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + } + }, "simple-youtube-api": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/simple-youtube-api/-/simple-youtube-api-5.2.1.tgz", @@ -1780,6 +1898,11 @@ "extend-shallow": "^3.0.0" } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -1887,6 +2010,11 @@ } } }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -1938,6 +2066,11 @@ "repeat-string": "^1.6.1" } }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -2035,6 +2168,51 @@ "string-width": "^1.0.2 || 2" } }, + "winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "requires": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "requires": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 7450aaf..8f47c7c 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "puppeteer": "^3.0.2", "simple-youtube-api": "^5.2.1", "sodium": "^3.0.2", + "winston": "^3.2.1", "ytdl-core": "^2.1.2" } }