Browse Source

Merge pull request #6 from bluddy/master

Handle too long articles, convert html
master
Benji 2 years ago
committed by GitHub
parent
commit
098da23326
3 changed files with 23 additions and 10 deletions
  1. 4
      app/config.json
  2. 24
      app/models/feed-data.js
  3. 5
      package.json

4
app/config.json

@ -1,6 +1,6 @@
{
"maxCacheSize": 100,
"feedCheckInterval": 10000,
"charLimit": 500,
"charLimit": 1920,
"viewFeedsPaginationLimit": 10
}
}

24
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.)?)/, "");
}
}

5
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": {},

Loading…
Cancel
Save