diff --git a/.gitignore b/.gitignore index 5c4c39f..9586414 100644 --- a/.gitignore +++ b/.gitignore @@ -131,5 +131,4 @@ dist .env scratch -config/default.json -commands/godwords.js \ No newline at end of file +config/default.json \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 6afd324..90d8d2c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,6 @@ FROM node:16 -RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app +RUN mkdir -p /home/node/app/node_modules \ + && chown -R node:node /home/node/app WORKDIR /home/node/app USER node COPY --chown=node:node package*.json ./ diff --git a/README.md b/README.md index aad6023..34a4361 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,12 @@ RSS Parser for IRC +This bot is currently in development and not fully functioning. Do not use in production. + ## Commands -- m!set [OPTION] [VALUE] - Changes a bot setting, more info to be added here later. +- `m!feed [FEED] [ENTRIES]` - Return the last x amount of entries from any RSS feed. +- `m!set [OPTION] [VALUE]` - Changes a bot setting, more info to be added here later. ## Deployment diff --git a/bot.js b/bot.js index b5e1e2f..766bdd1 100644 --- a/bot.js +++ b/bot.js @@ -5,7 +5,7 @@ var readline = require('readline'); const { Worker } = require('worker_threads'); //var randomWords = require('better-random-words'); -var connconfig = { //edit your shit here +var connconfig = { server: config.get('irc.server'), port: config.get('irc.port'), SSL: config.get('irc.port'), @@ -34,53 +34,36 @@ async function help(chan, sub) { } if (sub === "default") { bot.say(chan, 'Mercury - https://git.supernets.org/hogwart7/mercury') + bot.say(chan, 'm!l5 [FEED] - Return the last 5 entries in any RSS feed.') bot.say(chan, "m!set [OPTION] [VALUE] - run r!help set for details") } } - -async function rspam(chan, amt) { - var arr = [] - if (amt > 10000) { - bot.say(chan, "no") - } else { - if (amt === undefined) { - var amt = 100 - } - for(var i=0; i < amt; i++){ - var string = generateRandomString(70); - await timer(2); - arr.push(string) - } - var output = arr.join("\n") - bot.say(chan, output); +async function feed(chan, provfeed, n) { + if (provfeed === undefined) { + bot.say(chan, "No feed has been provided.") } -} - - -async function godwords(chan, amt) { - if (amt > 100000) { - bot.say(chan, "no") - } else { - if (amt === undefined) { - var amt = 50 - } - const worker = new Worker('./commands/godwords.js', { - workerData: { - amt - } - }); - worker.once('message', (string) => { - console.log('Received string from worker, posting.'); - bot.say(chan, string); - }); + if (n === undefined) { + var n = 5; } + const worker = new Worker('./commands/feed.js', { + workerData: { + provfeed, + n + } + }); + worker.once('message', (string) => { + console.log('Received output from last5 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]); } }); @@ -88,4 +71,4 @@ bot.addListener('error', function(message) { console.log('error: ', message); }); -console.log('Starting Fascinus'); \ No newline at end of file +console.log('Starting Mercury'); \ No newline at end of file diff --git a/commands/godwords.js b/commands/godwords.js deleted file mode 100644 index 9cbabc7..0000000 --- a/commands/godwords.js +++ /dev/null @@ -1,16 +0,0 @@ -const { parentPort, workerData } = require('worker_threads'); -const { amt } = workerData; -var randomWords = require('../lib/randomword'); - -var output = []; -var string = []; -var text = []; -for(var i=0; i < amt; i++){ - var word = randomWords({ exactly: 1 }); - text.push(word); -} -var string = text.join(" ") - -output.push(string); -parentPort.postMessage(output); -process.exit() \ No newline at end of file diff --git a/config/example.default.json b/config/example.default.json index ddd91a8..d04c7bf 100644 --- a/config/example.default.json +++ b/config/example.default.json @@ -9,5 +9,9 @@ "nickname": "mercury", "username": "mercury", "realname": "git.supernets.org/hogwart7/mercury" + }, + "feed": { + "useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 13.4; rv:109.0) Gecko/20100101 Firefox/114.0", + "body_max_chars": "200" } } \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 70238b1..f40fd20 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,5 +5,4 @@ services: build: . restart: always volumes: - - './config/default.json:/home/node/app/config/default.json' - - './config/settings.txt:/home/node/app/config/settings.txt' \ No newline at end of file + - './config:/home/node/app/config' \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ff2fe4d..d970ff3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,10 +7,13 @@ "": { "name": "mercury", "version": "1.0.0", + "license": "ISC", "dependencies": { "config": "^3.3.9", "fs": "^0.0.1-security", - "irc": "^0.5.2" + "irc": "^0.5.2", + "rss-parser": "^3.13.0", + "striptags": "^3.2.0" } }, "node_modules/config": { @@ -24,6 +27,14 @@ "node": ">= 10.0.0" } }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", @@ -94,6 +105,45 @@ "engines": { "node": ">=0.6" } + }, + "node_modules/rss-parser": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.13.0.tgz", + "integrity": "sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==", + "dependencies": { + "entities": "^2.0.3", + "xml2js": "^0.5.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/striptags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", + "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } } }, "dependencies": { @@ -105,6 +155,11 @@ "json5": "^2.2.3" } }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, "fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", @@ -153,6 +208,39 @@ "requires": { "nan": "^2.3.3" } + }, + "rss-parser": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.13.0.tgz", + "integrity": "sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==", + "requires": { + "entities": "^2.0.3", + "xml2js": "^0.5.0" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "striptags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", + "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" + }, + "xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" } } } diff --git a/package.json b/package.json index 42c31e2..bb04dc7 100644 --- a/package.json +++ b/package.json @@ -6,11 +6,13 @@ "dependencies": { "config": "^3.3.9", "fs": "^0.0.1-security", - "irc": "^0.5.2" + "irc": "^0.5.2", + "rss-parser": "^3.13.0", + "striptags": "^3.2.0" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "hogwart7", - "license": "" + "license": "ISC" }