diff --git a/app/config.json b/app/config.json index 6842499..54bf843 100644 --- a/app/config.json +++ b/app/config.json @@ -1,6 +1,6 @@ { "maxCacheSize": 100, "feedCheckInterval": 10000, - "charLimit": 500, + "charLimit": 1920, "viewFeedsPaginationLimit": 10 -} \ No newline at end of file +} diff --git a/app/models/feed-data.js b/app/models/feed-data.js index aa78ed5..eed317f 100644 --- a/app/models/feed-data.js +++ b/app/models/feed-data.js @@ -6,6 +6,7 @@ const Core = require("../../core"); const DiscordUtil = require("../../core").util; const GetUrls = require("get-urls"); const Url = require("url"); +const HtmlToText = require("html-to-text"); // @ts-ignore const readFeed = url => promisify(require("rss-parser").parseURL)(url); @@ -54,8 +55,8 @@ module.exports = class FeedData extends Core.BaseEmbeddedData { return new Promise((resolve, reject) => { channel.fetchMessages({ limit: 100 }) .then(messages => { - /* we want to push the links in oldest first, but discord.js returns messages newest first, so we need to reverse them - * discord.js returns a map, and maps don't have .reverse methods, hence needing to spread the elements into an array first */ + /* we want to push the links in oldest first, but discord.js returns messages newest first, so we need to reverse them + * discord.js returns a map, and maps don't have .reverse methods, hence needing to spread the elements into an array first */ [...messages.values()].reverse().forEach(m => this.cache(...GetUrls(m.content))); resolve(); }) @@ -109,10 +110,21 @@ module.exports = class FeedData extends Core.BaseEmbeddedData { function formatPost(article) { let message = ""; + let link = ""; + let title = ""; - if (article.title) message += `\n**${article.title}**`; - if (article.content) message += article.content.length > Config.charLimit ? "\nArticle content too long for a single Discord message!" : `\n${article.content}`; - if (article.link) message += `\n\n${normaliseUrlForDiscord(article.link)}`; + if (article.title) title = `\n**${article.title}**`; + if (article.link) link = `\n\n${normaliseUrlForDiscord(article.link)}`; + + message += title; + + if (article.content) { + let maxLen = Config.charLimit - title.length - link.length - 4; + let sanitized = HtmlToText.fromString(article.content); + message += sanitized.length > maxLen ? `\n${sanitized.substr(0, maxLen)}...` : `\n${sanitized}`; + } + + message += link; return message; } @@ -135,4 +147,4 @@ function normaliseYouTubeUrl(origUrl, parsedUrl) { function normaliseUrlForCache(url) { return normaliseUrlForDiscord(url).replace(/^((https?:\/\/)?(www.)?)/, ""); -} \ No newline at end of file +} diff --git a/package.json b/package.json index 0626b1f..999eaa9 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,12 @@ "dependencies": { "@types/node": "9.3.0", "discord.js": "11.2.0", - "eslint": "4.16.0", + "eslint": "4.19.1", "get-urls": "7.0.0", "jsonfile": "3.0.1", "rss-parser": "2.12.0", - "shortid": "2.2.8" + "shortid": "2.2.8", + "html-to-text": "3.3.0" }, "name": "discord-bot-rss-feed", "devDependencies": {},