diff --git a/.gitignore b/.gitignore index ad46b30..9a1b2f4 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,7 @@ typings/ # next.js build output .next + +config.json +blacklist.json +holidaybot.bat \ No newline at end of file diff --git a/README.md b/README.md index 07a0ca0..5dc2840 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Default prefix is `h]` * `ping` - Pong! * `stats` - Shows bot statistics like uptime, lib versions, etc. * `h [region]` - Displays holidays in the specified region or server region on command (if enabled) -* `set` - +* `set` - Sets server-specific settings (Manage Server permission required) * `set prefix ` - Changes the prefix used on this server (default: `h]`) * `set region ` - Changes the region to any valid tz/zoneinfo database region. See list here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. This is used for the daily posting region, as well as the default region used when `h [region]` is run. By default, this will be the timezone associated with the server region. * `set adult ` - Enables/disables content that may not be safe for viewing by children (default: `off`/`false`) diff --git a/commands/about.js b/commands/about.js index 38e1a45..e5244c5 100644 --- a/commands/about.js +++ b/commands/about.js @@ -1,6 +1,6 @@ const Discord = require("discord.js"); -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); diff --git a/commands/blacklist.js b/commands/blacklist.js index 79d6afc..fd63f04 100644 --- a/commands/blacklist.js +++ b/commands/blacklist.js @@ -1,17 +1,16 @@ -const Discord = require("discord.js"); -let clc = require("cli-color") -let moment = require("moment") -require("moment-timezone"); -require("moment-duration-format"); const config = require("../config.json"); const fs = require("fs") const bl = require("../blacklist.json"); const updateBL = (bl) => { fs.writeFile ("./blacklist.json", JSON.stringify(bl, null, 4), function(err) { if (err) throw err; - } - ); -} + }); +}; +let clc = require("cli-color"); +let moment = require("moment"); +require("moment-timezone"); +require("moment-duration-format"); + module.exports.run = async (client, message, args, cmdHook, roCMD) => { let prefixDBResult = await client.db.r.table("guilds").get(message.guild.id).getField("prefix").run() diff --git a/commands/die.js b/commands/die.js index 129b7ba..ef14934 100644 --- a/commands/die.js +++ b/commands/die.js @@ -1,9 +1,8 @@ -const Discord = require("discord.js"); -let clc = require("cli-color") -let moment = require("moment") +const config = require("../config.json"); +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); -const config = require("../config.json"); module.exports.run = async (client, message, args, cmdHook, roCMD) => { if(message.author.id === config.ownerID) { diff --git a/commands/eval.js b/commands/eval.js index d81e695..61ae2c8 100644 --- a/commands/eval.js +++ b/commands/eval.js @@ -1,9 +1,9 @@ const Discord = require("discord.js"); -let clc = require("cli-color") -let moment = require("moment") +const config = require("../config.json"); +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); -const config = require("../config.json"); module.exports.run = async (client, message, args, cmdHook, roCMD) => { if(message.author.id === config.ownerID) { diff --git a/commands/h.js b/commands/h.js index f02cf0f..19d3b55 100644 --- a/commands/h.js +++ b/commands/h.js @@ -1,5 +1,5 @@ -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); const RSSParser = require("rss-parser"); diff --git a/commands/help.js b/commands/help.js index 356e32b..569d653 100644 --- a/commands/help.js +++ b/commands/help.js @@ -1,6 +1,6 @@ const Discord = require("discord.js"); -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); diff --git a/commands/ping.js b/commands/ping.js index 42e2777..3e6037b 100644 --- a/commands/ping.js +++ b/commands/ping.js @@ -1,5 +1,5 @@ -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); diff --git a/commands/set.js b/commands/set.js index fcd53a0..e5285b6 100644 --- a/commands/set.js +++ b/commands/set.js @@ -1,5 +1,5 @@ let clc = require("cli-color"); -let moment = require("moment") +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); const config = require("../config.json"); @@ -27,44 +27,62 @@ const getDefaultRegion = (guild) => { var defaultRegion = ""; //brazil, us-west, japan, singapore, eu-central, hongkong, us-south, southafrica, us-central, london, us-east, sydney, eu-west, amsterdam, frankfurt, russia - if(guild.region === "brazil") { - defaultRegion = "America/Sao_Paulo"; - } else if(guild.region === "us-west") { - defaultRegion = "America/Los_Angeles"; - } else if(guild.region === "japan") { - defaultRegion = "Asia/Tokyo"; - } else if(guild.region === "singapore") { - defaultRegion = "Asia/Singapore"; - } else if(guild.region === "eu-central") { - defaultRegion = "Europe/Berlin"; - } else if(guild.region === "hongkong") { - defaultRegion = "Asia/Hong_Kong"; - } else if(guild.region === "us-south") { - defaultRegion = "America/Chicago"; - } else if(guild.region === "southafrica") { - defaultRegion = "Africa/Johannesburg"; - } else if(guild.region === "us-central") { - defaultRegion = "America/Chicago"; - } else if(guild.region === "london") { - defaultRegion = "Europe/London"; - } else if(guild.region === "us-east") { - defaultRegion = "America/Toronto"; - } else if(guild.region === "sydney") { - defaultRegion = "Australia/Sydney"; - } else if(guild.region === "eu-west") { - defaultRegion = "Europe/Paris"; - } else if(guild.region === "amsterdam") { - defaultRegion = "Europe/Amsterdam"; - } else if(guild.region === "frankfurt") { - defaultRegion = "Europe/Berlin"; - } else if(guild.region === "russia") { - defaultRegion = "Europe/Moscow"; - } else { - defaultRegion = "UTC"; - } + switch(guild.region) { + case "brazil": + defaultRegion = "America/Sao_Paulo"; + break; + case "us-west": + defaultRegion = "America/Los_Angeles"; + break; + case "japan": + defaultRegion = "Asia/Tokyo"; + break; + case "singapore": + defaultRegion = "Asia/Singapore"; + break; + case "eu-central": + defaultRegion = "Europe/Berlin"; + break; + case "hongkong": + defaultRegion = "Asia/Hong_Kong"; + break; + case "us-south": + defaultRegion = "America/Chicago"; + break; + case "southafrica": + defaultRegion = "Africa/Johannesburg"; + break; + case "us-central": + defaultRegion = "America/Chicago"; + break; + case "london": + defaultRegion = "Europe/London"; + break; + case "us-east": + defaultRegion = "America/Toronto"; + break; + case "sydney": + defaultRegion = "Australia/Sydney"; + break; + case "eu-west": + defaultRegion = "Europe/Paris"; + break; + case "amsterdam": + defaultRegion = "Europe/Amsterdam"; + break; + case "frankfurt": + defaultRegion = "Europe/Berlin"; + break; + case "russia": + defaultRegion = "Europe/Moscow"; + break; + default: + defaultRegion = "UTC"; + break; + }; return defaultRegion; -} +}; module.exports.run = async (client, message, args, cmdHook, roCMD) => { if(message.member.permissions.has("MANAGE_GUILD") || message.author.id === config.ownerID) { @@ -185,6 +203,23 @@ module.exports.run = async (client, message, args, cmdHook, roCMD) => { } else if(prop === "dailyChannel") { const [prop, ...ignored] = args; let nDC = message.mentions.channels.first() + if(!nDC.permissionsFor(message.guild.me).has("SEND_MESSAGES")) { + console.log("[" + clc.red("FAIL") + "] " + "[" + clc.magenta("PERM") + "] " + `${message.author.tag} (ID: ${message.author.id}) ran "${message}" in "${message.guild.name}" (ID: ${message.guild.id})`); + cmdHook.send("`[" + `${moment().format('DD/MM/YYYY] [HH:mm:ss')}` + "]`" + "[**" + "FAIL" + "**] " + "[**" + "PERM" + "**] " + `__${message.author.tag}__ (ID: ${message.author.id}) ran \`${message}\` in __${message.guild.name}__ (ID: ${message.guild.id})`) + return message.channel.send({embed: { + color: 0xc6373e, + author: { + name: client.user.username, + icon_url: client.user.displayAvatarURL + }, + title: "Error!", + description: "No permission to send messages in mentioned channel.", + footer: { + icon_url: message.author.displayAvatarURL, + text: message.author.username + } + }})}; + client.db.updateDailyChannel(message.guild.id, nDC.id) } else if(prop === "reset") { @@ -194,7 +229,7 @@ module.exports.run = async (client, message, args, cmdHook, roCMD) => { client.db.updateRegion(message.guild.id, getDefaultRegion(message.guild)); client.db.updateAdult(message.guild.id, false); client.db.updateDaily(message.guild.id, true); - client.db.updateDailyChannel(message.guild.id, getDefaultChannel(message.guild)); + client.db.updateDailyChannel(message.guild.id, getDefaultChannel(message.guild).id); client.db.updateCommand(message.guild.id, true); } else { diff --git a/commands/settings.js b/commands/settings.js index c5137ec..0240a1d 100644 --- a/commands/settings.js +++ b/commands/settings.js @@ -1,5 +1,5 @@ -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); const Discord = require("discord.js"); @@ -7,7 +7,7 @@ const Discord = require("discord.js"); const getDefaultChannel = (guild) => { // get "original" default channel if(guild.channels.has(guild.id)) - return guild.channels.get(message.guild.id) + return guild.channels.get(guild.id) // Check for a "general" channel, which is often default chat const generalChannel = guild.channels.find(channel => channel.name === "general"); @@ -27,44 +27,62 @@ const getDefaultRegion = (guild) => { var defaultRegion = ""; //brazil, us-west, japan, singapore, eu-central, hongkong, us-south, southafrica, us-central, london, us-east, sydney, eu-west, amsterdam, frankfurt, russia - if(guild.region === "brazil") { - defaultRegion = "America/Sao_Paulo"; - } else if(guild.region === "us-west") { - defaultRegion = "America/Los_Angeles"; - } else if(guild.region === "japan") { - defaultRegion = "Asia/Tokyo"; - } else if(guild.region === "singapore") { - defaultRegion = "Asia/Singapore"; - } else if(guild.region === "eu-central") { - defaultRegion = "Europe/Berlin"; - } else if(guild.region === "hongkong") { - defaultRegion = "Asia/Hong_Kong"; - } else if(guild.region === "us-south") { - defaultRegion = "America/Chicago"; - } else if(guild.region === "southafrica") { - defaultRegion = "Africa/Johannesburg"; - } else if(guild.region === "us-central") { - defaultRegion = "America/Chicago"; - } else if(guild.region === "london") { - defaultRegion = "Europe/London"; - } else if(guild.region === "us-east") { - defaultRegion = "America/Toronto"; - } else if(guild.region === "sydney") { - defaultRegion = "Australia/Sydney"; - } else if(guild.region === "eu-west") { - defaultRegion = "Europe/Paris"; - } else if(guild.region === "amsterdam") { - defaultRegion = "Europe/Amsterdam"; - } else if(guild.region === "frankfurt") { - defaultRegion = "Europe/Berlin"; - } else if(guild.region === "russia") { - defaultRegion = "Europe/Moscow"; - } else { - defaultRegion = "UTC"; - } + switch(guild.region) { + case "brazil": + defaultRegion = "America/Sao_Paulo"; + break; + case "us-west": + defaultRegion = "America/Los_Angeles"; + break; + case "japan": + defaultRegion = "Asia/Tokyo"; + break; + case "singapore": + defaultRegion = "Asia/Singapore"; + break; + case "eu-central": + defaultRegion = "Europe/Berlin"; + break; + case "hongkong": + defaultRegion = "Asia/Hong_Kong"; + break; + case "us-south": + defaultRegion = "America/Chicago"; + break; + case "southafrica": + defaultRegion = "Africa/Johannesburg"; + break; + case "us-central": + defaultRegion = "America/Chicago"; + break; + case "london": + defaultRegion = "Europe/London"; + break; + case "us-east": + defaultRegion = "America/Toronto"; + break; + case "sydney": + defaultRegion = "Australia/Sydney"; + break; + case "eu-west": + defaultRegion = "Europe/Paris"; + break; + case "amsterdam": + defaultRegion = "Europe/Amsterdam"; + break; + case "frankfurt": + defaultRegion = "Europe/Berlin"; + break; + case "russia": + defaultRegion = "Europe/Moscow"; + break; + default: + defaultRegion = "UTC"; + break; + }; return defaultRegion; -} +}; module.exports.run = async (client, message, args, cmdHook, roCMD) => { let prefixDBResult = await client.db.r.table("guilds").get(message.guild.id).getField("prefix").run() diff --git a/commands/stats.js b/commands/stats.js index abaa742..e647624 100644 --- a/commands/stats.js +++ b/commands/stats.js @@ -1,6 +1,6 @@ const Discord = require("discord.js"); -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); diff --git a/config.json.example b/config.json.example index e0c73d7..7c3460a 100644 --- a/config.json.example +++ b/config.json.example @@ -3,4 +3,4 @@ "ownerID": "", "whID": "", "whToken": "" - } \ No newline at end of file +} \ No newline at end of file diff --git a/db.js b/db.js index 86e8c44..418b371 100644 --- a/db.js +++ b/db.js @@ -1,7 +1,7 @@ const getDefaultChannel = (guild) => { // get "original" default channel if(guild.channels.has(guild.id)) - return guild.channels.get(message.guild.id) + return guild.channels.get(guild.id); // Check for a "general" channel, which is often default chat const generalChannel = guild.channels.find(channel => channel.name === "general"); @@ -21,47 +21,64 @@ const getDefaultRegion = (guild) => { var defaultRegion = ""; //brazil, us-west, japan, singapore, eu-central, hongkong, us-south, southafrica, us-central, london, us-east, sydney, eu-west, amsterdam, frankfurt, russia - if(guild.region === "brazil") { - defaultRegion = "America/Sao_Paulo"; - } else if(guild.region === "us-west") { - defaultRegion = "America/Los_Angeles"; - } else if(guild.region === "japan") { - defaultRegion = "Asia/Tokyo"; - } else if(guild.region === "singapore") { - defaultRegion = "Asia/Singapore"; - } else if(guild.region === "eu-central") { - defaultRegion = "Europe/Berlin"; - } else if(guild.region === "hongkong") { - defaultRegion = "Asia/Hong_Kong"; - } else if(guild.region === "us-south") { - defaultRegion = "America/Chicago"; - } else if(guild.region === "southafrica") { - defaultRegion = "Africa/Johannesburg"; - } else if(guild.region === "us-central") { - defaultRegion = "America/Chicago"; - } else if(guild.region === "london") { - defaultRegion = "Europe/London"; - } else if(guild.region === "us-east") { - defaultRegion = "America/Toronto"; - } else if(guild.region === "sydney") { - defaultRegion = "Australia/Sydney"; - } else if(guild.region === "eu-west") { - defaultRegion = "Europe/Paris"; - } else if(guild.region === "amsterdam") { - defaultRegion = "Europe/Amsterdam"; - } else if(guild.region === "frankfurt") { - defaultRegion = "Europe/Berlin"; - } else if(guild.region === "russia") { - defaultRegion = "Europe/Moscow"; - } else { - defaultRegion = "UTC"; - } + switch(guild.region) { + case "brazil": + defaultRegion = "America/Sao_Paulo"; + break; + case "us-west": + defaultRegion = "America/Los_Angeles"; + break; + case "japan": + defaultRegion = "Asia/Tokyo"; + break; + case "singapore": + defaultRegion = "Asia/Singapore"; + break; + case "eu-central": + defaultRegion = "Europe/Berlin"; + break; + case "hongkong": + defaultRegion = "Asia/Hong_Kong"; + break; + case "us-south": + defaultRegion = "America/Chicago"; + break; + case "southafrica": + defaultRegion = "Africa/Johannesburg"; + break; + case "us-central": + defaultRegion = "America/Chicago"; + break; + case "london": + defaultRegion = "Europe/London"; + break; + case "us-east": + defaultRegion = "America/Toronto"; + break; + case "sydney": + defaultRegion = "Australia/Sydney"; + break; + case "eu-west": + defaultRegion = "Europe/Paris"; + break; + case "amsterdam": + defaultRegion = "Europe/Amsterdam"; + break; + case "frankfurt": + defaultRegion = "Europe/Berlin"; + break; + case "russia": + defaultRegion = "Europe/Moscow"; + break; + default: + defaultRegion = "UTC"; + break; + }; return defaultRegion; -} - +}; -const rethink = require("rethinkdbdash") +const rethink = require("rethinkdbdash"); module.exports = class { constructor() { @@ -70,16 +87,17 @@ module.exports = class { }) } init() { + if(this.r.table("guilds")) return; return this.r.tableCreate('guilds').run() .then(() => console.log("Guild and settings table created.")) .catch((e) => { if (e.name === "ReqlOpFailedError") { - } else { - console.error(`There was an unexpected error with the database. ${e}. Exiting. Please ignore all the text spammed at the start of console`) - process.exit(1) + } { + console.error(`There was an unexpected error with the database. ${e}. Exiting. Please ignore all the text spammed at the start of console`); + process.exit(1); } }); - } + } createGuild(guild) { return this.r.table('guilds').insert([{ id: guild.id, diff --git a/events/guildCreate.js b/events/guildCreate.js index 03bd963..d625047 100644 --- a/events/guildCreate.js +++ b/events/guildCreate.js @@ -1,5 +1,5 @@ -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); diff --git a/events/guildDelete.js b/events/guildDelete.js index 891e7e5..3702906 100644 --- a/events/guildDelete.js +++ b/events/guildDelete.js @@ -1,5 +1,5 @@ -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); diff --git a/events/guildUpdate.js b/events/guildUpdate.js index 4595efd..8cafb32 100644 --- a/events/guildUpdate.js +++ b/events/guildUpdate.js @@ -1,5 +1,5 @@ -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); diff --git a/events/message.js b/events/message.js index 95c176f..565f7f8 100644 --- a/events/message.js +++ b/events/message.js @@ -3,8 +3,7 @@ const clc = require("cli-color"); const updateBL = (bl) => { fs.writeFile ("./blacklist.json", JSON.stringify(bl, null, 4), function(err) { if (err) throw err; - } - ); + }); } module.exports.run = async (client, message) => { diff --git a/events/ready.js b/events/ready.js index ef02c34..f0c4975 100644 --- a/events/ready.js +++ b/events/ready.js @@ -1,5 +1,5 @@ -let clc = require("cli-color") -let moment = require("moment") +let clc = require("cli-color"); +let moment = require("moment"); require("moment-timezone"); require("moment-duration-format"); diff --git a/index.js b/index.js index 657e810..ab7626a 100644 --- a/index.js +++ b/index.js @@ -2,18 +2,20 @@ const Discord = require("discord.js"); const client = new Discord.Client(); const config = require("./config.json"); const dbFile = require("./db.js"); -client.db = new dbFile(); -client.db.init(); -const fs = require("fs") +const fs = require("fs"); const RSSParser = require("rss-parser"); const moment = require('moment'); -require('moment-timezone'); -require("moment-duration-format") const clc = require("cli-color"); -const bl = require("./blacklist.json"); + +require('moment-timezone'); +require("moment-duration-format"); + +client.db = new dbFile(); +client.db.init(); + client.cmdHook = new Discord.WebhookClient(config.whID, config.whToken); client.commands = new Discord.Collection(); -let tzArray = moment.tz.names() +let tzArray = moment.tz.names(); const cron = require('node-cron'); var log = console.log; @@ -21,7 +23,7 @@ fs.readdir("./commands/", (err, files) => { if (err) console.error(err) files.forEach(file => { if (!file.endsWith(".js")) return; - let cmdFunction = require(`./commands/${file}`) + let cmdFunction = require(`./commands/${file}`); client.commands.set(cmdFunction.help.name, cmdFunction); }); }); @@ -33,7 +35,7 @@ fs.readdir("./events/", (err, files) => { let eventFunc = require(`./events/${file}`); let eventName = file.split(".")[0]; - client.on(eventName, (...args) => eventFunc.run(client, ...args)) + client.on(eventName, (...args) => eventFunc.run(client, ...args)); }); }); @@ -59,6 +61,25 @@ console.log = function () { log.apply(console, [formatConsoleDate(new Date()) + first_parameter].concat(other_parameters)); }; +const getDefaultChannel = (guild) => { + // get "original" default channel + if(guild.channels.has(guild.id)) + return guild.channels.get(guild.id); + + // Check for a "general" channel, which is often default chat + const generalChannel = guild.channels.find(channel => channel.name === "general"); + if (generalChannel) + return generalChannel; + // Now we get into the heavy stuff: first channel in order where the bot can speak + // hold on to your hats! + return guild.channels + .filter(c => c.type === "text" && + c.permissionsFor(guild.client.user).has("SEND_MESSAGES")) + .sort((a, b) => a.position - b.position || + Long.fromString(a.id).sub(Long.fromString(b.id)).toNumber()) + .first(); + } + client.on('error', () => {}); let parser = new RSSParser(); @@ -67,36 +88,37 @@ for(let tz of tzArray) { let scheduleWait = require("util").promisify(setTimeout); for(let guild of client.guilds.array()) { let wait = require("util").promisify(setTimeout); - let regionDBResult = await client.db.r.table("guilds").get(guild.id).getField("region").run() - let dailyDBResult = await client.db.r.table("guilds").get(guild.id).getField("daily").run() - let adultDBResult = await client.db.r.table("guilds").get(guild.id).getField("adult").run() - let dailyChannelDBResult = await client.db.r.table("guilds").get(guild.id).getField("dailyChannel").run() - if(regionDBResult === tz && dailyDBResult === true && adultDBResult === false) { - let items = "" - parser.parseURL(`https://www.checkiday.com/rss.php?tz=${tz}`, function(err, feed) { - feed.items.forEach(item => items += `\n\n` + "• " + `**${item.title}**` + "") - client.channels.get(`${dailyChannelDBResult}`).send({embed: { - color: 0x3a1cbb, + let regionDBResult = await client.db.r.table("guilds").get(guild.id).getField("region").run(); + let dailyDBResult = await client.db.r.table("guilds").get(guild.id).getField("daily").run(); + let adultDBResult = await client.db.r.table("guilds").get(guild.id).getField("adult").run(); + let dailyChannelDBResult = await client.db.r.table("guilds").get(guild.id).getField("dailyChannel").run(); + let dailyCObj = client.channels.get(`${dailyChannelDBResult}`); + let dailyAdult = "" + if(adultDBResult === true) { + dailyAdult = "&adult=true" + } + if(regionDBResult === tz && dailyDBResult === true) { + if(!dailyCObj.permissionsFor(guild.me).has("SEND_MESSAGES")) { + console.log("[" + clc.red("FAIL") + "] " + "[" + clc.magenta("PERM") + "] " + `Attempted to daily post in "${guild.name}" but permission was revoked.`); + client.cmdHook.send("`[" + `${moment().format('DD/MM/YYYY] [HH:mm:ss')}` + "]`" + "[**" + "FAIL" + "**] " + "[**" + "PERM" + "**] " + `Attempted to daily post in \`${guild.name}\` but permission was revoked.`) + client.channels.get(`${getDefaultChannel(guild).id}`).send({embed: { + color: 0xc6373e, author: { - name: client.user.username, - icon_url: client.user.displayAvatarURL + name: client.user.username, + icon_url: client.user.displayAvatarURL }, - title: `Today's Holidays in region ${tz}`, - url: "https://checkiday.com", - fields: [{ - name: `${feed.pubDate}`.slice(0, 16), - value: items - }], + title: "Error!", + description: `Attempted to daily post in <#${dailyChannelDBResult}>, but permission to send messages was revoked.`, footer: { icon_url: client.user.displayAvatarURL, text: "HolidayBot Daily Posting" } - }}); - }); - } else if(regionDBResult === tz && dailyDBResult === true && adultDBResult === true) { - let items = "" - parser.parseURL(`https://www.checkiday.com/rss.php?tz=${tz}&adult=true`, function(err, feed) { - feed.items.forEach(item => items += `\n\n` + "• " + `**${item.title}**` + "") + }}) + continue; + }; + let items = ""; + parser.parseURL(`https://www.checkiday.com/rss.php?tz=${tz}${dailyAdult}`, function(err, feed) { + feed.items.forEach(item => items += `\n\n` + "• " + `**${item.title}**` + ""); client.channels.get(`${dailyChannelDBResult}`).send({embed: { color: 0x3a1cbb, author: { @@ -117,9 +139,8 @@ for(let tz of tzArray) { }); } else continue; console.log("[" + clc.green("SUCC") + "] " + `Daily Posted in "${guild.name}" (ID: ${guild.id})`); - client.cmdHook.send("`[" + `${moment().format('DD/MM/YYYY] [HH:mm:ss')}` + "]`" + "[**" + "SUCC" + "**] " + `Daily Posted in in __${guild.name}__ (ID: ${guild.id})`) + client.cmdHook.send("`[" + `${moment().format('DD/MM/YYYY] [HH:mm:ss')}` + "]`" + "[**" + "SUCC" + "**] " + `Daily Posted in \`${guild.name}\` (ID: ${guild.id})`); await wait(5000); - continue; } await scheduleWait(5000); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d517e67 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,684 @@ +{ + "name": "holidaybot", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "addressparser": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-0.1.3.tgz", + "integrity": "sha1-npq0PSV+GueE4d9fWAyfUkD1iHQ=" + }, + "ajv": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "array-indexofobject": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-indexofobject/-/array-indexofobject-0.0.1.tgz", + "integrity": "sha1-qqEo5iybPDWAlFaMIZ/2T+SJ1Co=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + } + } + }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "cli-color": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz", + "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==", + "requires": { + "ansi-regex": "^2.1.1", + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.14", + "timers-ext": "^0.1.5" + } + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "^0.10.9" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "discord.js": { + "version": "11.4.2", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.4.2.tgz", + "integrity": "sha512-MDwpu0lMFTjqomijDl1Ed9miMQe6kB4ifKdP28QZllmLv/HVOJXhatRgjS8urp/wBlOfx+qAYSXcdI5cKGYsfg==", + "requires": { + "long": "^4.0.0", + "prism-media": "^0.0.3", + "snekfetch": "^3.6.4", + "tweetnacl": "^1.0.0", + "ws": "^4.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "es5-ext": { + "version": "0.10.46", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", + "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "feedparser": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/feedparser/-/feedparser-1.1.4.tgz", + "integrity": "sha1-F4Rb6ErT/NmG2u4S/kIfi1TfDe8=", + "requires": { + "addressparser": "~0.1.3", + "array-indexofobject": "~0.0.1", + "readable-stream": "~1.0.17", + "sax": "~0.6.0" + }, + "dependencies": { + "sax": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", + "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=" + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "requires": { + "es5-ext": "~0.10.2" + } + }, + "memoizee": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", + "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", + "requires": { + "d": "1", + "es5-ext": "^0.10.45", + "es6-weak-map": "^2.0.2", + "event-emitter": "^0.3.5", + "is-promise": "^2.1", + "lru-queue": "0.1", + "next-tick": "1", + "timers-ext": "^0.1.5" + } + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "requires": { + "mime-db": "~1.37.0" + } + }, + "moment": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.23.0.tgz", + "integrity": "sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==" + }, + "moment-duration-format": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.2.2.tgz", + "integrity": "sha1-uVdhLeJgFsmtnrYIfAVFc+USd3k=" + }, + "moment-timezone": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", + "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "node-cron": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-2.0.3.tgz", + "integrity": "sha512-eJI+QitXlwcgiZwNNSRbqsjeZMp5shyajMR81RZCqeW0ZDEj4zU9tpd4nTh/1JsBiKbF8d08FCewiipDmVIYjg==", + "requires": { + "opencollective-postinstall": "^2.0.0", + "tz-offset": "0.0.1" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "opencollective-postinstall": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.1.tgz", + "integrity": "sha512-saQQ9hjLwu/oS0492eyYotoh+bra1819cfAT5rjY/e4REWwuc8IgZ844Oo44SiftWcJuBiqp0SA0BFVbmLX0IQ==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "prism-media": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.3.tgz", + "integrity": "sha512-c9KkNifSMU/iXT8FFTaBwBMr+rdVcN+H/uNv1o+CuFeTThNZNTOrQ+RgXA1yL/DeLk098duAeRPP3QNPNbhxYQ==" + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "rethinkdbdash": { + "version": "2.3.31", + "resolved": "https://registry.npmjs.org/rethinkdbdash/-/rethinkdbdash-2.3.31.tgz", + "integrity": "sha512-6nXrKFjdg2Ug0YpdmPWSvyD/2EisHnFNt4FWZ74dcXGK48ievSv+cNFTmVv+KjLi6I9CCf6w4CKZ6yCYTfMfdQ==", + "requires": { + "bluebird": ">= 3.0.1" + } + }, + "rss-feed-emitter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rss-feed-emitter/-/rss-feed-emitter-2.0.1.tgz", + "integrity": "sha512-8NKLKx17lUcB7DJRL/TMHS24SJTtNQgQdmZ9xgtDre/mSddM9RyXwn0Z2HG+uZruHIjcgDfKilkU9MhoXnzP6g==", + "requires": { + "bluebird": "3.0.5", + "feedparser": "1.1.4", + "lodash": "4.17.5", + "request": "2.88.0", + "tiny-emitter": "1.0.1" + }, + "dependencies": { + "bluebird": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.0.5.tgz", + "integrity": "sha1-L/nQfJs+2ynW0oD+B1KDZefs05I=" + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + } + } + }, + "rss-parser": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.5.2.tgz", + "integrity": "sha512-tpD+psqq1v6yqH0aLZtmnK0yp5PmewYrHlAonrUIEepEJSqUq553raC3sY6Tw/3DxsnZg8fsa/nSU5VwBZYsyg==", + "requires": { + "entities": "^1.1.1", + "xml2js": "^0.4.19" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "snekfetch": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz", + "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw==" + }, + "sshpk": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", + "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "requires": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "tiny-emitter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-1.0.1.tgz", + "integrity": "sha1-VaWHGs0SvuEGOPlb65uv2Jgwp8Y=" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", + "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" + }, + "tz-offset": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tz-offset/-/tz-offset-0.0.1.tgz", + "integrity": "sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ==" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" + } + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..fd8748b --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "holidaybot", + "version": "1.0.0", + "description": "A discord bot created with discord.js that spits out real holidays that you may have never heard of before.", + "main": "index.js", + "homepage": "https://github.com/AustinTi/HolidayBot", + "repository": "github:AustinTi/HolidayBot", + "scripts": { + "start": "node index.js" + }, + "keywords": [], + "author": "AustinTi", + "license": "GPL-3.0", + "dependencies": { + "cli-color": "^1.4.0", + "discord.js": "^11.4.2", + "moment": "^2.23.0", + "moment-duration-format": "^2.2.2", + "moment-timezone": "^0.5.23", + "node-cron": "^2.0.3", + "rethinkdbdash": "^2.3.31", + "rss-parser": "^3.5.2" + } +}