From 3b234211403c27be487b5888b05791ed6786608a Mon Sep 17 00:00:00 2001 From: "karl.hudgell" Date: Thu, 25 Jun 2020 19:45:38 +0100 Subject: [PATCH] keep going.. --- app.js | 172 ++----- data/bot/chat.js | 63 +++ data/bot/faq/subscriptions.js | 38 ++ data/bot/questions.js | 14 + data/bot/requests/football.js | 47 ++ data/bot/requests/joke.js | 30 ++ data/bot/welcomeMesage.js | 7 + data/group/subs.json | 57 +++ image.png | Bin 0 -> 10985 bytes lib/logger.js | 9 - package-lock.json | 895 +++++++++++++++++++++++++--------- package.json | 6 + 12 files changed, 962 insertions(+), 376 deletions(-) create mode 100644 data/bot/chat.js create mode 100644 data/bot/faq/subscriptions.js create mode 100644 data/bot/questions.js create mode 100644 data/bot/requests/football.js create mode 100644 data/bot/requests/joke.js create mode 100644 data/bot/welcomeMesage.js create mode 100644 data/group/subs.json create mode 100644 image.png delete mode 100644 lib/logger.js diff --git a/app.js b/app.js index 9802fee..67fcc07 100644 --- a/app.js +++ b/app.js @@ -11,6 +11,13 @@ const fs = require('fs'); const logger = require('perfect-logger'); const TelegramBot = require('node-telegram-bot-api'); +const bot_chat = require('./data/bot/chat') +const bot_welcome = require('./data/bot/welcomeMesage') +const bot_questions = require('./data/bot/questions') +const bot_football = require('./data/bot/requests/football') +const bot_joke = require('./data/bot/requests/joke') +const bot_faq_subscriptions = require('./data/bot/faq/subscriptions') + const token = process.env.BOT_TOKEN; const name = process.env.BOT_NAME; const channel = process.env.CHANNEL @@ -31,153 +38,46 @@ const bot = new TelegramBot(token, { // Wlecome Message bot.on('new_chat_members', (msg) => { - const newUserMention = "@" + msg.new_chat_member.first_name + "<\/a>" - bot.sendMessage(msg.chat.id, "Hello " + newUserMention + ", Welcome to " + channel + ". \n\nPlease PM me @" + process.env.BOT_USERNAME + " to find out all needed information about our service before asking an admin or posting in here.\n\nIf you do ask questions, and its obvious you have not spoken to me, you will be booted from the room. This is IPTV, admins don't have time for hand holding.!!!", { parse_mode: "HTML" }); - logger.info("ID - " + msg.new_chat_member.id + " First Name - " + msg.new_chat_member.first_name + " joined the group"); + bot_welcome.welcomeMessage(bot, msg, logger) }); bot.on('message', (msg) => { - // Listen call for "help" - const help = "help"; - if (msg.text && msg.text.toString().toLowerCase().includes(help)) { - const userMention = "@" + msg.from.first_name + "<\/a>" - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Asked for help"); - bot.sendMessage(msg.chat.id, "Hello " + userMention + " please PM me @" + process.env.BOT_USERNAME + " and i'll try to help.", { parse_mode: "HTML" }); - } + bot_chat.help(bot, msg, logger) + // listen for "filelinked code" + bot_chat.filelinked_help(bot, msg, logger) + // listen for "bye" + bot_chat.bye(bot, msg, logger) + // listen for "thank you BOT" + bot_chat.thankYou(bot, msg, logger, name) + // listen for "i love you BOT" + bot_chat.iLoveYou(bot, msg, logger, name) + // listen for "deal" + bot_chat.loveADeal(bot, msg, logger) + // listen for "football today" + bot_football.gamesToday(bot, msg, logger) + // listen for "BOT tell me a joke" + bot_joke.tellMe(bot, msg, logger, name) + // listen for "you there BOT" + bot_chat.youThere(bot, msg, logger, name) + // listen for "fuck off BOT" + bot_chat.fOff(bot, msg, logger, name) + // listen for "what sub should i buy?" + bot_questions.whatSubShouldIBuy(bot, msg, logger) - const help_filelinked = "filelinked code"; - if (msg.text && msg.text.toString().toLowerCase().includes(help_filelinked)) { - const userMention = "@" + msg.from.first_name + "<\/a>" - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Asked for fileLinked code"); - bot.sendMessage(msg.chat.id, "Hello " + userMention + " please PM me @" + process.env.BOT_USERNAME + " and i'll give you the code", { parse_mode: "HTML" }); - } + bot_faq_subscriptions.prices(bot, msg, logger) + + - const bye = "bye"; - if (msg.text && msg.text.toString().toLowerCase().includes(bye)) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Said bye"); - bot.sendMessage(msg.chat.id, "Bye " + msg.from.first_name + ", Hope to see you again."); - } + - const love = "i love you "; - const lovePlus = love + name.toLowerCase() - if (msg.text && msg.text.toString().toLowerCase().includes(lovePlus)) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Said they loved me"); - bot.sendMessage(msg.chat.id, "I love you too " + msg.from.first_name); - } + - const thankYou = "thank you " + name.toLowerCase(); - if (msg.text && msg.text.toString().toLowerCase().includes(thankYou)) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Said thank you"); - bot.sendMessage(msg.chat.id, "You're welcome " + msg.from.first_name); - } + - const footballToday = "football today"; - if (msg.text && msg.text.toString().toLowerCase().includes(footballToday)) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " asked for football today"); - var options = { - method: 'GET', - url: 'https://football-pro.p.rapidapi.com/api/v2.0/livescores', - qs: { tz: 'Europe/London', leagues: '8', include: 'localTeam,visitorTeam' }, - headers: { - 'x-rapidapi-host': 'football-pro.p.rapidapi.com', - 'x-rapidapi-key': process.env.RAPIDAPI_API_KEY, - useQueryString: true - }, - ttl: 18000000 //5 hours - }; - cachedRequest(options, function (error, response, body) { - // console.log(response) - if (error) throw new Error(error); - - // console.log(body); - let jsonBody = JSON.parse(body) - if (jsonBody.data.length > 0) { - bot.sendMessage(msg.chat.id, 'Yes there is!').then(() => { - return jsonBody.data.forEach(function (entry) { - var homeTeam = entry.localTeam.data.name - var awayTeam = entry.visitorTeam.data.name - var startTime = entry.time.starting_at.time - // console.log(entry); - bot.sendMessage(msg.chat.id, homeTeam + " VS " + awayTeam + " @ " + startTime) - }); - }).then(() => { - return bot.sendMessage(msg.chat.id, 'To see what channels the football is streaming on please join @footballontv') - }) - } else { - bot.sendMessage(msg.chat.id, 'Sadly there is no football today :(') - } - }) - } - - const joke = name.toLowerCase() + " tell me a joke"; - if (msg.text && msg.text.toString().toLowerCase().includes(joke)) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " asked for a joke"); - - var options = { - method: 'GET', - url: 'https://joke3.p.rapidapi.com/v1/joke', - // qs: { tz: 'Europe/London', leagues: '8', include: 'localTeam,visitorTeam' }, - headers: { - 'x-rapidapi-host': 'joke3.p.rapidapi.com', - 'x-rapidapi-key': process.env.RAPIDAPI_API_KEY, - useQueryString: true - }, - // ttl: 18000 //5 hours - }; - - request(options, function (error, response, body) { - // console.log(response) - - if (error) throw new Error(error); - let jsonBody = JSON.parse(body) - bot.sendMessage(msg.chat.id, jsonBody.content) - } - ) - } - - const youThere = "you there " + name.toLowerCase() + "?"; - if (msg.text && msg.text.toString().toLowerCase().includes(youThere)) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " asked if im there"); - bot.sendMessage(msg.chat.id, "Always..."); - } - - const fuuk = "fuck off "; - const fuuckPlus = fuuk + name.toLowerCase() - if (msg.text && msg.text.toString().toLowerCase().includes(fuuckPlus)) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " told me to fuck off"); - bot.sendMessage(msg.chat.id, "Fuck off yourself " + msg.from.first_name + "!"); - } - - const whatSubShouldIBuy = "what sub should i buy?" - const subs = ["VIP!", "Premium Plus!", "Old Premium!", "Gold!", "Bronze!", "New Premium!", "KDB!", "Technoid!", "Bluemoon!", "SOL!", "Gambler!", "All of em!"] - if (msg.text && msg.text.toString().toLowerCase().includes(whatSubShouldIBuy)) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Asked what sub to buy"); - const randomSub = subs[Math.floor(Math.random() * subs.length)]; - bot.sendMessage(msg.chat.id, randomSub); - } - - const deal = "deal"; - // const me = 434187971 - // const sarah = 868225940 - // const MANC = 470861863 - if (msg.text && msg.text.toString().toLowerCase().match(/\bdeal\b/)) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Said we got a deal!"); - bot.sendMessage(msg.chat.id, "I LOVE it when " + msg.from.first_name + ", does a deal :)"); - } - - const subPrice = "- subscription prices"; - if (msg.text && msg.text.toString().toLowerCase() === subPrice) { - logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Got subscription Prices"); - bot.sendMessage(msg.chat.id, "PREMIUM PLUS ----£30\nVIP-----------------------£25\nOLD PREMIUM -----£17\nBLUEMOON ---------£15\nKDB --------------------£14\nGOLD ------------------£13\nTECHNOID -----------£13\nBRONZE --------------£10\nSOL ---------------------£10") - .then(() => { - return bot.sendMessage(msg.chat.id, "All of these prices are for 12 Month subscription subs").then(() => { - return bot.sendMessage(msg.chat.id, "Keep an eye out though because we offer special deals on different subs from time to time.") - }) - }) - } + const howToSignUp = "- how to get a subscription?"; if (msg.text && msg.text.toString().toLowerCase() === howToSignUp) { diff --git a/data/bot/chat.js b/data/bot/chat.js new file mode 100644 index 0000000..b5a9380 --- /dev/null +++ b/data/bot/chat.js @@ -0,0 +1,63 @@ +module.exports = { + help: (bot, msg, logger) => { + const help = "help"; + if (msg.text && msg.text.toString().toLowerCase().includes(help)) { + const userMention = "@" + msg.from.first_name + "<\/a>" + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Asked for help"); + bot.sendMessage(msg.chat.id, "Hello " + userMention + " please PM me @" + process.env.BOT_USERNAME + " and i'll try to help.", { parse_mode: "HTML" }); + } + }, + filelinked_help: (bot, msg, logger) => { + const help_filelinked = "filelinked code"; + if (msg.text && msg.text.toString().toLowerCase().includes(help_filelinked)) { + const userMention = "@" + msg.from.first_name + "<\/a>" + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Asked for fileLinked code"); + bot.sendMessage(msg.chat.id, "Hello " + userMention + " please PM me @" + process.env.BOT_USERNAME + " and i'll give you the code", { parse_mode: "HTML" }); + } + }, + bye: (bot, msg, logger) => { + const bye = "bye"; + if (msg.text && msg.text.toString().toLowerCase().includes(bye)) { + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Said bye"); + bot.sendMessage(msg.chat.id, "Bye " + msg.from.first_name + ", Hope to see you again."); + } + }, + iLoveYou: (bot, msg, logger, name) => { + const love = "i love you "; + const lovePlus = love + name.toLowerCase() + if (msg.text && msg.text.toString().toLowerCase().includes(lovePlus)) { + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Said they loved me"); + bot.sendMessage(msg.chat.id, "I love you too " + msg.from.first_name); + } + }, + thankYou: (bot, msg, logger, name) => { + const thankYou = "thank you " + name.toLowerCase(); + if (msg.text && msg.text.toString().toLowerCase().includes(thankYou)) { + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Said thank you"); + bot.sendMessage(msg.chat.id, "You're welcome " + msg.from.first_name); + } + }, + youThere: (bot, msg, logger, name) => { + const youThere = "you there " + name.toLowerCase() + "?"; + if (msg.text && msg.text.toString().toLowerCase().includes(youThere)) { + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " asked if im there"); + bot.sendMessage(msg.chat.id, "Always..."); + } + }, + fOff: (bot, msg, logger, name) => { + const fuuk = "fuck off "; + const fuuckPlus = fuuk + name.toLowerCase() + if (msg.text && msg.text.toString().toLowerCase().includes(fuuckPlus)) { + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " told me to fuck off"); + bot.sendMessage(msg.chat.id, "Fuck off yourself " + msg.from.first_name + "!"); + } + }, + loveADeal: (bot, msg, logger) => { + const deal = "deal"; + if (msg.text && msg.text.toString().toLowerCase().match(/\bdeal\b/)) { + if (msg) + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Said we got a deal!"); + bot.sendMessage(msg.chat.id, "I LOVE it when " + msg.from.first_name + ", does a deal :)"); + } + } +}; \ No newline at end of file diff --git a/data/bot/faq/subscriptions.js b/data/bot/faq/subscriptions.js new file mode 100644 index 0000000..e424240 --- /dev/null +++ b/data/bot/faq/subscriptions.js @@ -0,0 +1,38 @@ +const fs = require('fs'); +const {table} = require('table') +const subs = JSON.parse(fs.readFileSync('./data/group/subs.json', 'utf8')) +const t = require('obj-array-table') +const nodeHtmlToImage = require('node-html-to-image') + +var arrayToTable = require('array-to-table') + + +module.exports = { + prices: (bot, msg, logger) => { + const subPrice = "- subscription prices"; + if (msg.text && msg.text.toString().toLowerCase() === subPrice) { + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Got subscription Prices"); + + + let test = arrayToTable(subs) + + let t = "
" + test + "
" + + nodeHtmlToImage({ + output: './image.png', + html: t + }) + + bot.sendMessage(msg.chat.id, + `First Header | Second Header + ------------- | ------------- + Content Cell | Content Cell + Content Cell | Content Cell`, { parse_mode: "Markdown" }) + .then(() => { + return bot.sendMessage(msg.chat.id, "All of these prices are for 12 Month subscription subs").then(() => { + return bot.sendMessage(msg.chat.id, "Keep an eye out though because we offer special deals on different subs from time to time.") + }) + }) + } + } +} \ No newline at end of file diff --git a/data/bot/questions.js b/data/bot/questions.js new file mode 100644 index 0000000..0940ec2 --- /dev/null +++ b/data/bot/questions.js @@ -0,0 +1,14 @@ +const fs = require('fs'); + +module.exports = { + whatSubShouldIBuy: (bot, msg, logger) => { + const whatSubShouldIBuy = "what sub should i buy" + const subs = JSON.parse(fs.readFileSync('./data/group/subs.json', 'utf8')) + + if (msg.text && msg.text.toString().toLowerCase().includes(whatSubShouldIBuy)) { + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " Asked what sub to buy"); + const randomSub = subs[Math.floor(Math.random() * subs.length)]; + bot.sendMessage(msg.chat.id, randomSub.SUB + "!"); + } + } +} \ No newline at end of file diff --git a/data/bot/requests/football.js b/data/bot/requests/football.js new file mode 100644 index 0000000..a720040 --- /dev/null +++ b/data/bot/requests/football.js @@ -0,0 +1,47 @@ +module.exports = { + gamesToday: (bot, msg, logger) => { + const footballToday = "football today"; + if (msg.text && msg.text.toString().toLowerCase().includes(footballToday)) { + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " asked for football today"); + + var options = { + method: 'GET', + url: 'https://football-pro.p.rapidapi.com/api/v2.0/livescores', + qs: { tz: 'Europe/London', leagues: '8', include: 'localTeam,visitorTeam' }, + headers: { + 'x-rapidapi-host': 'football-pro.p.rapidapi.com', + 'x-rapidapi-key': process.env.RAPIDAPI_API_KEY, + useQueryString: true + }, + ttl: 18000000 //5 hours + }; + + cachedRequest(options, function (error, response, body) { + // console.log(response) + if (error) throw new Error(error); + + // console.log(body); + let jsonBody = JSON.parse(body) + if (jsonBody.data.length > 0) { + bot.sendMessage(msg.chat.id, 'Yes there is!').then(() => { + return jsonBody.data.forEach(function (entry) { + var homeTeam = entry.localTeam.data.name + var awayTeam = entry.visitorTeam.data.name + var startTime = entry.time.starting_at.time + // console.log(entry); + bot.sendMessage(msg.chat.id, homeTeam + " VS " + awayTeam + " @ " + startTime) + }); + }).then(() => { + return bot.sendMessage(msg.chat.id, 'To see what channels the football is streaming on please join @footballontv') + }) + } else { + bot.sendMessage(msg.chat.id, 'Sadly there is no football today :(') + } + }) + } + + + + + } +} \ No newline at end of file diff --git a/data/bot/requests/joke.js b/data/bot/requests/joke.js new file mode 100644 index 0000000..a7d2ffb --- /dev/null +++ b/data/bot/requests/joke.js @@ -0,0 +1,30 @@ +module.exports = { + tellMe: (bot, msg, logger, name) => { + const joke = name.toLowerCase() + " tell me a joke"; + if (msg.text && msg.text.toString().toLowerCase().includes(joke)) { + logger.info("ID - " + msg.from.id + " First Name - " + msg.from.first_name + " asked for a joke"); + + var options = { + method: 'GET', + url: 'https://joke3.p.rapidapi.com/v1/joke', + // qs: { tz: 'Europe/London', leagues: '8', include: 'localTeam,visitorTeam' }, + headers: { + 'x-rapidapi-host': 'joke3.p.rapidapi.com', + 'x-rapidapi-key': process.env.RAPIDAPI_API_KEY, + useQueryString: true + }, + // ttl: 18000 //5 hours + }; + + request(options, function (error, response, body) { + // console.log(response) + + if (error) throw new Error(error); + let jsonBody = JSON.parse(body) + bot.sendMessage(msg.chat.id, jsonBody.content) + } + ) + } + + } +} \ No newline at end of file diff --git a/data/bot/welcomeMesage.js b/data/bot/welcomeMesage.js new file mode 100644 index 0000000..fa4c714 --- /dev/null +++ b/data/bot/welcomeMesage.js @@ -0,0 +1,7 @@ +module.exports = { + welcomeMessage: (bot, msg, logger) => { + const newUserMention = "
@" + msg.new_chat_member.first_name + "<\/a>" + bot.sendMessage(msg.chat.id, "Hello " + newUserMention + ", Welcome to " + channel + ". \n\nPlease PM me @" + process.env.BOT_USERNAME + " to find out all needed information about our service before asking an admin or posting in here.\n\nIf you do ask questions, and its obvious you have not spoken to me, you will be booted from the room. This is IPTV, admins don't have time for hand holding.!!!", { parse_mode: "HTML" }); + logger.info("ID - " + msg.new_chat_member.id + " First Name - " + msg.new_chat_member.first_name + " joined the group"); + } +}; \ No newline at end of file diff --git a/data/group/subs.json b/data/group/subs.json new file mode 100644 index 0000000..cd2ea12 --- /dev/null +++ b/data/group/subs.json @@ -0,0 +1,57 @@ +[ + { + "SUB": "VIP", + "COST": 25, + "STATUS": 1 + }, + { + "SUB": "Premium Plus", + "COST": 30, + "STATUS": 1 + }, + { + "SUB": "Old Premium", + "COST": 17, + "STATUS": 1 + }, + { + "SUB": "Gold", + "COST": 13, + "STATUS": 1 + }, + { + "SUB": "Bronze", + "COST": 10, + "STATUS": 1 + }, + { + "SUB": "KDB", + "COST": 14, + "STATUS": 1 + }, + { + "SUB": "Technoid", + "COST": 13, + "STATUS": 1 + }, + { + "SUB": "Bluemoon", + "COST": 15, + "STATUS": 1 + }, + { + "SUB": "SOL", + "COST": 10, + "STATUS": "X" + }, + { + "SUB": "Gambler", + "COST": "X", + "STATUS": 1 + }, + { + "SUB": "All of em", + "COST": "X", + "STATUS": "X" + } + ] \ No newline at end of file diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..d109df2570b7be98c9328a8c3069c427cac09ea6 GIT binary patch literal 10985 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 q3n_mg= 2.1.2 < 3" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "requires": { - "is-relative": "^0.2.1", - "is-windows": "^0.2.0" - } - }, "is-callable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", @@ -378,6 +644,11 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, "is-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", @@ -386,14 +657,6 @@ "has-symbols": "^1.0.1" } }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "requires": { - "is-unc-path": "^0.1.1" - } - }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -407,19 +670,6 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "requires": { - "unc-path-regex": "^0.1.0" - } - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -430,32 +680,44 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "jade": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", - "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", - "requires": { - "commander": "0.6.1", - "mkdirp": "0.3.0" - }, - "dependencies": { - "commander": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", - "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=" - }, - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=" - } - } - }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, + "jsdom": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.2.0.tgz", + "integrity": "sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw==", + "requires": { + "abab": "^2.0.0", + "acorn": "^6.0.4", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.0.9", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.5", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.5.0", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.2", + "xml-name-validator": "^3.0.0" + } + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -482,15 +744,24 @@ "verror": "1.10.0" } }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, "mime": { "version": "1.6.0", @@ -511,12 +782,11 @@ } }, "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -532,59 +802,23 @@ "minimist": "0.0.8" } }, - "mocha": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", - "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", - "requires": { - "commander": "2.3.0", - "debug": "2.2.0", - "diff": "1.4.0", - "escape-string-regexp": "1.0.2", - "glob": "3.2.11", - "growl": "1.9.2", - "jade": "0.26.3", - "mkdirp": "0.5.1", - "supports-color": "1.2.0", - "to-iso-string": "0.0.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - } - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.1.tgz", - "integrity": "sha512-bJ9nH25Z51HG2QIu66K4dMVyMs6o8bNQpviDnXzG+O/gfNxPU9IpIig0j4pzlO707GcGZ6QA4rWhlRxjJsjnZw==", - "requires": { - "clone": "2.x" - } + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, - "node-persist": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-2.1.0.tgz", - "integrity": "sha1-5lK784haBNrWo1PXQXYXfIORRwc=", + "node-html-to-image": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-html-to-image/-/node-html-to-image-2.1.1.tgz", + "integrity": "sha512-uGWjYeXM1V4DWAWQsmC99KcgnrE82jVHtGzLvN53BadqcovaJOe/5NwBMbn+7k28xrPNEuwbvda0jGv/DvMEwQ==", "requires": { - "is-absolute": "^0.2.6", - "mkdirp": "~0.5.1", - "q": "~1.1.1" + "handlebars": "^4.5.3", + "puppeteer": "^2.0.0" } }, "node-telegram-bot-api": { @@ -605,11 +839,31 @@ "request-promise": "^4.2.2" } }, + "numeral": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", + "integrity": "sha1-StCAk21EPCVhrtnyGX7//iX05QY=" + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, + "obj-array-table": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/obj-array-table/-/obj-array-table-1.0.17.tgz", + "integrity": "sha512-kPdSI2Y9JYYQBuB0PQLiHgKejQMmMYi7jlfNqp1WEQtCRJaTiPtBLxHr4ULHMoEqAQGN0yBSYZMEQC56B9L8kw==", + "requires": { + "dateformat-nodep": "^1.0.0", + "lodash": "^4.16.4", + "numeral": "^2.0.6" + } + }, "object-inspect": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", @@ -639,15 +893,34 @@ "wrappy": "1" } }, - "path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "requires": { - "process": "^0.11.1", - "util": "^0.10.3" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" } }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, "perfect-logger": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/perfect-logger/-/perfect-logger-2.0.1.tgz", @@ -658,16 +931,31 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -687,27 +975,43 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "q": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz", - "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=" + "puppeteer": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.1.tgz", + "integrity": "sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==", + "requires": { + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "mime-types": "^2.1.25", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + } + } }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, - "rapidapi-connect": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/rapidapi-connect/-/rapidapi-connect-0.0.6.tgz", - "integrity": "sha512-uOCBZUhnUVeWFHbwqIhUSV21bAzRfy7GaTxKnW8p6C5dfy5BhmeSWCZftm0uQ/HxSBjRwyWQ4lqDMoZuiCptmQ==", - "requires": { - "chai": "^3.5.0", - "mocha": "^2.5.3", - "request": "^2.72.0", - "ws": "^2.1.0" - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -775,6 +1079,29 @@ "lodash": "^4.17.15" } }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/require-dir/-/require-dir-1.2.0.tgz", + "integrity": "sha512-LY85DTSu+heYgDqq/mK+7zFHWkttVNRXC9NKcKGyuGLdlsfbjEPrIEYdCVrx6hqnJb+xSu3Lzaoo8VnmOhhjNA==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -785,10 +1112,28 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "requires": { + "xmlchars": "^2.1.1" + } + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "sshpk": { "version": "1.16.1", @@ -811,6 +1156,16 @@ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, "string.prototype.trimend": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", @@ -844,21 +1199,35 @@ } } }, - "supports-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", - "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=" + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } }, "throttled-request": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/throttled-request/-/throttled-request-0.1.1.tgz", "integrity": "sha1-QUa3C3elrsozxGMyzxPrnHkelxs=" }, - "to-iso-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", - "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=" - }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -868,6 +1237,14 @@ "punycode": "^2.1.1" } }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "^2.1.0" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -881,20 +1258,24 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=" + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + "uglify-js": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.0.tgz", + "integrity": "sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA==", + "optional": true }, "uri-js": { "version": "4.2.2", @@ -904,21 +1285,6 @@ "punycode": "^2.1.0" } }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -939,25 +1305,92 @@ "extsprintf": "^1.2.0" } }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz", - "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA=", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "requires": { - "safe-buffer": "~5.0.1", - "ultron": "~1.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" - } + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } } } diff --git a/package.json b/package.json index 41e401e..46c2106 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,18 @@ "author": "", "license": "ISC", "dependencies": { + "array-to-table": "^1.0.1", "cached-request": "^2.0.1", "dotenv": "^8.2.0", "fs": "0.0.1-security", + "html-table-builder": "^1.0.1", + "node-html-to-image": "^2.1.1", "node-telegram-bot-api": "^0.50.0", + "obj-array-table": "^1.0.17", "perfect-logger": "^2.0.1", "request": "^2.88.2", + "require-dir": "^1.2.0", + "table": "^5.4.6", "throttled-request": "^0.1.1" } }