From aeba653e9f34b5080035ace7916ecd5285367ee5 Mon Sep 17 00:00:00 2001 From: benji7425 Date: Wed, 20 Sep 2017 00:04:04 +0100 Subject: [PATCH] Update for proper compatibility with current core code --- .gitignore | 3 +-- .npmrc | 2 +- .vscode/launch.json | 6 +++++- .vscode/settings.json | 7 ------- app/index.js | 41 +++++++++++++++++++++++----------------- app/models/feed-data.js | 2 +- app/models/guild-data.js | 18 +++++++++++++++++- package.json | 2 +- 8 files changed, 50 insertions(+), 31 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index 0cde457..8ac4226 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -### Discord bots #### -*-data.json +guilds.json token.json log diff --git a/.npmrc b/.npmrc index f5357d5..cda16d5 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,2 @@ save=true -save-exact=true +save-exact=true \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 7ff9bca..61fafd7 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,7 +8,11 @@ "type": "node", "request": "launch", "name": "Launch Program", - "program": "${workspaceRoot}/app/index.js" + "program": "${workspaceRoot}/app/index.js", + "args":[ + "token.json", + "guilds.json" + ] } ] } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 261d736..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "files.exclude": { - "log": true, - "token.json": true, - "_config.yml": true - } -} diff --git a/app/index.js b/app/index.js index 7c427b1..3e81ee3 100644 --- a/app/index.js +++ b/app/index.js @@ -4,11 +4,12 @@ const GuildData = require("./models/guild-data.js"); const FeedData = require("./models/feed-data.js"); const Config = require("./config.json"); -function onReady(client, guildsData) { +//IMPLEMENTATIONS// +function onReady(coreClient) { return new Promise((resolve, reject) => { - parseLinksInGuilds(client.guilds, guildsData) - .then(() => checkFeedsInGuilds(client.guilds, guildsData)) - .then(() => setInterval(() => checkFeedsInGuilds(client.guilds, guildsData), Config.feedCheckIntervalSec * 1000)) + parseLinksInGuilds(coreClient.actual.guilds, coreClient.guildsData) + .then(() => checkFeedsInGuilds(coreClient.actual.guilds, coreClient.guildsData)) + .then(() => setInterval(() => checkFeedsInGuilds(coreClient.actual.guilds, coreClient.guildsData), Config.feedCheckIntervalSec * 1000)) .then(resolve) .catch(reject); }); @@ -19,9 +20,10 @@ function onTextMessage(message, guildData) { if (message.channel.name === feedData.channelName) feedData.cachedLinks.push(...GetUrls(message.content)); //spread the urlSet returned by GetUrls into the cache array }); + return Promise.resolve(); } -function addFeed({ guildData, message, client }) { +function addFeed({ command, params, guildData, botName, message, coreClient }) { const feedUrl = [...GetUrls(message.content)][0]; const channel = message.mentions.channels.first(); @@ -39,7 +41,7 @@ function addFeed({ guildData, message, client }) { return new Promise((resolve, reject) => { //ask the user if they're happy with the details they set up, save if yes, don't if no - Core.util.ask(client, message.channel, message.member, "Are you happy with this (yes/no)?\n" + feedData.toString()) + Core.util.ask(coreClient.actual, message.channel, message.member, "Are you happy with this (yes/no)?\n" + feedData.toString()) .then(responseMessage => { //if they responded yes, save the feed and let them know, else tell them to start again @@ -56,7 +58,7 @@ function addFeed({ guildData, message, client }) { }); } -function removeFeed({ params, guildData, botName }) { +function removeFeed({ command, params, guildData, botName, message, coreClient }) { const idx = guildData.feeds.findIndex(feed => feed.id === params[2]); if (!Number.isInteger(idx)) return Promise.reject("Can't find feed with id " + params[2]); @@ -65,13 +67,14 @@ function removeFeed({ params, guildData, botName }) { return Promise.resolve("Feed removed!"); } -function viewFeeds(guildData) { +function viewFeeds({ command, params, guildData, botName, message, coreClient }) { if (!guildData) return Promise.reject("Guild not setup"); return Promise.resolve(guildData.feeds.map(f => f.toString()).join("\n")); } +//INTERNAL FUNCTIONS// function checkFeedsInGuilds(guilds, guildsData) { Object.keys(guildsData).forEach(key => guildsData[key].checkFeeds(guilds)); } @@ -86,12 +89,16 @@ function parseLinksInGuilds(guilds, guildsData) { return Promise.all(promises); } -module.exports = { - onReady, - onTextMessage, - addFeed, - removeFeed, - viewFeeds -}; - -Core.bootstrap(require("../" + process.argv[2]), module.exports, GuildData, require("./commands.json")); \ No newline at end of file +//CLIENT SETUP// +const token = require("../" + process.argv[2]).token, + dataFile = process.argv[3], + commands = require("./commands.json"), + implementations = { + onReady, + onTextMessage, + addFeed, + removeFeed, + viewFeeds + }; +const client = new Core.Client(token, dataFile, commands, implementations, GuildData); +client.bootstrap(); \ No newline at end of file diff --git a/app/models/feed-data.js b/app/models/feed-data.js index 223a499..0cd4338 100644 --- a/app/models/feed-data.js +++ b/app/models/feed-data.js @@ -1,5 +1,5 @@ //my imports -const DiscordUtil = require("discordjs-util"); +const DiscordUtil = require("../../discord-bot-core").util; //external lib imports const Dns = require("dns"); //for host resolution checking diff --git a/app/models/guild-data.js b/app/models/guild-data.js index 9fc920e..51adcb4 100644 --- a/app/models/guild-data.js +++ b/app/models/guild-data.js @@ -1,7 +1,23 @@ const DiscordUtil = require("../../discord-bot-core").util; +const FeedData = require("./feed-data.js"); module.exports = class GuildData { - constructor({ id }) { + constructor({ id, feeds }) { this.id = id; + this.feeds = (feeds || []).map(feed => new FeedData(feed)); + } + + cachePastPostedLinks(guild) { + const promises = []; + + this.feeds.forEach(feed => { + promises.push(feed.updatePastPostedLinks(guild).catch(DiscordUtil.dateError)); + }); + + return Promise.all(promises); + } + + checkFeeds(guilds) { + this.feeds.forEach(feed => feed.check(guilds.get(this.id))); } }; \ No newline at end of file diff --git a/package.json b/package.json index 6580f55..47fcf3c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "app/index.js", "scripts": { "postinstall": "cd ./discord-bot-core && npm install", - "start": "node app/index.js token.json" + "start": "node app/index.js token.json guilds.json" }, "dependencies": { "discord.js": "11.1.0",