diff --git a/bot.js b/bot.js index 4ddfaf4..29d9a88 100644 --- a/bot.js +++ b/bot.js @@ -23,6 +23,11 @@ async function help(chan, sub) { var sub = "default" } if (sub === "default") { + bot.say(chan, ' ____ ___ ___ ____________ _________ __') + bot.say(chan, ' / __ `__ \\/ _ \\/ ___/ ___/ / / / ___/ / / /') + bot.say(chan, ' / / / / / / __/ / / /__/ /_/ / / / /_/ / ') + bot.say(chan, '/_/ /_/ /_/\\___/_/ \\___/\\__,_/_/ \\__, / ') + bot.say(chan, ' /____/ ') bot.say(chan, 'Mercury - https://git.supernets.org/hogwart7/mercury') bot.say(chan, 'm!feed [FEED] [ENTRIES] - Return the last x amount of entries from any RSS feed') bot.say(chan, "m!set [OPTION] [VALUE] - run r!help set for details") @@ -48,12 +53,33 @@ async function feed(chan, provfeed, n) { }); } +async function twitter(chan, provfeed, n) { + if (provfeed === undefined) { + bot.say(chan, "No account has been provided.") + } + if (n === undefined) { + var n = 5; + } + const worker = new Worker('./commands/twitter.js', { + workerData: { + provfeed, + n + } + }); + worker.once('message', (string) => { + console.log('Received output from twitter worker, posting.'); + bot.say(chan, string); + }); +} + bot.addListener('message', function(nick, to, text, from) { var args = text.split(' '); if (args[0] === 'm!help') { help(to, args[1]); } else if (args[0] === 'm!feed') { feed(to, args[1], args[2]); + } else if (args[0] === 'm!twitter') { + twitter(to, args[1], args[2]) } }); diff --git a/commands/twitter.js b/commands/twitter.js new file mode 100644 index 0000000..7762192 --- /dev/null +++ b/commands/twitter.js @@ -0,0 +1,50 @@ +const config = require('../config/default.json') +const { parentPort, workerData } = require('worker_threads'); +const { provfeed, n } = workerData; +let Parser = require('rss-parser'); +let parser = new Parser({ + headers: {'User-Agent': config.feed.useragent}, +}); +const striptags = require("striptags"); +const timer = ms => new Promise(res => setTimeout(res, ms)) + + +async function sendUpstream(content) { + var output = content.join("\n") + parentPort.postMessage(output); + process.exit() +} + +async function fetchFeed(feedURL, n) { + var content = []; + var randomNitter = config.twitter.nitter_instances[Math.floor(Math.random() * config.twitter.nitter_instances.length)]; + var feedURL = "https://" + randomNitter + "/" + feedURL + "/rss" + let newFeed = await parser.parseURL(feedURL); + console.log(newFeed.items.length); + if (n > newFeed.items.length) { + var n = newFeed.items.length; + content.push("[08WARNING] Your requested post amount exceeded the total available. Reverting to " + newFeed.items.length); + } + //for (let i = 0; i < newFeed.items.length; i++) { + for (let i = 0; i < n; i++) { + await timer(50); + var data = newFeed.items[i] + var title = data.title.replace(/(\r\n|\n|\r)/gm, " ") //remove line breaks + .replace(/\s{2,}/g, ' ') //idk + var title = striptags(title); + var body = data.contentSnippet.replace(/(\r\n|\n|\r)/gm, " ") //remove line breaks + .replace(/\s{2,}/g, ' ') //idk + var body = striptags(body); + if (body.length >= config.feed.body_max_chars) { + var truncatedString = body.substring(0,config.feed.body_max_chars); + var body = truncatedString + "..." + } + console.log(data); + var string = "15[11" + data.pubDate + "15] 08" + data.creator + " " + body + " " + data.link; + var output = string; + content.push(output) + } + sendUpstream(content); +} + +fetchFeed(provfeed, n);