mercury/bot.js

132 lines
4.9 KiB
JavaScript
Raw Normal View History

2023-10-02 02:11:25 +00:00
var config = require('./config/default.json');
2023-10-02 02:11:25 +00:00
//var uconfig = require('./config/usersettings.json');
2023-10-02 02:11:23 +00:00
var irc = require("irc");
var fs = require("fs");
var readline = require('readline');
const { Worker } = require('worker_threads');
//var randomWords = require('better-random-words');
2023-10-02 02:11:25 +00:00
warningMsg = ''+config.colours.brackets+'['+config.colours.warning+'WARNING'+config.colours.brackets+']'
errorMsg = ''+config.colours.brackets+'['+config.colours.error+'ERROR'+config.colours.brackets+']'
2023-10-02 02:11:25 +00:00
2023-10-02 02:11:25 +00:00
var bot = new irc.Client(config.irc.server, config.irc.nickname, {
channels: config.irc.channels,
secure: config.irc.ssl,
port: config.irc.port,
autoRejoin: config.irc.autorejoin,
userName: config.irc.username,
realName: config.irc.realname,
floodProtection: config.irc.floodprotection,
floodProtectionDelay: config.irc.floodprotectiondelay
2023-10-02 02:11:23 +00:00
});
const timer = ms => new Promise(res => setTimeout(res, ms))
2023-10-02 02:11:25 +00:00
const isValidUrl = urlString=> {
var urlPattern = new RegExp('^(https?:\\/\\/)?'+ // validate protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // validate domain name
'((\\d{1,3}\\.){3}\\d{1,3}))'+ // validate OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // validate port and path
'(\\?[;&a-z\\d%_.~+=-]*)?'+ // validate query string
'(\\#[-a-z\\d_]*)?$','i'); // validate fragment locator
return !!urlPattern.test(urlString);
}
function openPostWorker(chan, command, d1, d2, d3, d4, d5) {
const worker = new Worker(`./commands/${command}.js`, {
workerData: {
d1, d2, d3, d4, d5
}
});
worker.once('message', (string) => {
console.log(`${command} worker has signalled it has completed, sending output to IRC`);
bot.say(chan, string);
});
}
2023-10-02 02:11:23 +00:00
async function help(chan, sub) {
if (sub === undefined) {
var sub = "default"
}
if (sub === "default") {
2023-10-02 02:11:24 +00:00
bot.say(chan, ' ____ ___ ___ ____________ _________ __')
bot.say(chan, ' / __ `__ \\/ _ \\/ ___/ ___/ / / / ___/ / / /')
bot.say(chan, ' / / / / / / __/ / / /__/ /_/ / / / /_/ / ')
bot.say(chan, '/_/ /_/ /_/\\___/_/ \\___/\\__,_/_/ \\__, / ')
bot.say(chan, ' /____/ ')
2023-10-02 02:11:25 +00:00
bot.say(chan, 'Mercury RSS Client - https://git.supernets.org/hogwart7/mercury')
2023-10-02 02:11:25 +00:00
bot.say(chan, 'm!feed [USER/FEED/ALIAS] [ENTRIES] - Return the last x amount of entries from any RSS feed or your own saved feeds (if you have saved feeds)')
2023-10-02 02:11:24 +00:00
bot.say(chan, "m!twitter [USER] [ENTRIES] - Return the last x amount of tweets from a particular user")
2023-10-02 02:11:25 +00:00
bot.say(chan, "m!opt [CATEGORY] [OPTION] [VALUE] - Control bot options, see wiki for info on usage.")
2023-10-02 02:11:23 +00:00
}
}
2023-10-02 02:11:25 +00:00
async function opt(chan, user, setting, setting2, value, value2) {
openPostWorker(chan, 'options', user, setting, setting2, value, value2)
}
2023-10-02 02:11:25 +00:00
async function feed(chan, nick, provfeed, n) {
2023-10-02 02:11:25 +00:00
var userconf = fs.readFileSync('./config/usersettings.json')
var uconfig = JSON.parse(userconf)
2023-10-02 02:11:24 +00:00
if (provfeed === undefined) {
2023-10-02 02:11:25 +00:00
bot.say(chan, errorMsg+" No feed has been provided.")
return;
2023-10-02 02:11:25 +00:00
} else if (provfeed === 'me' ) {
var provfeed = nick;
2023-10-02 02:11:23 +00:00
}
2023-10-02 02:11:24 +00:00
if (n === undefined) {
2023-10-02 02:11:25 +00:00
var n = config.feed.default_amount;
2023-10-02 02:11:23 +00:00
}
2023-10-02 02:11:25 +00:00
2023-10-02 02:11:25 +00:00
console.log(isValidUrl(provfeed))
console.log(provfeed === nick)
console.log(uconfig[nick].alias !== undefined)
if (isValidUrl(provfeed) === true) { //URL Lookup
openPostWorker(chan, 'feed-preset', provfeed, n);
} else if (provfeed === nick) { //User Feed Lookup
if ( uconfig[nick] !== undefined ) { //If users nickname exists in json file
openPostWorker(chan, 'feed-list', provfeed, n, nick);
} else { //If it does not
2023-10-02 02:11:25 +00:00
bot.say(chan, "You have no saved feeds")
return;
}
} else if (uconfig[nick].alias !== undefined ) { //Alias Lookup
2023-10-02 02:11:25 +00:00
var provfeed = uconfig[nick].alias[provfeed]
openPostWorker(chan, "feed-preset", provfeed, n);
} else {
bot.say(chan, 'Not sure how you managed to get this error, but good job')
2023-10-02 02:11:25 +00:00
}
2023-10-02 02:11:23 +00:00
}
2023-10-02 02:11:24 +00:00
async function twitter(chan, provfeed, n) {
if (provfeed === undefined) {
2023-10-02 02:11:25 +00:00
bot.say(chan, errorMsg+" No account has been provided.")
return;
2023-10-02 02:11:24 +00:00
}
if (n === undefined) {
2023-10-02 02:11:25 +00:00
var n = config.twitter.default_amount;
2023-10-02 02:11:24 +00:00
}
openPostWorker(chan, "twitter", provfeed, n)
2023-10-02 02:11:24 +00:00
}
2023-10-02 02:11:23 +00:00
bot.addListener('message', function(nick, to, text, from) {
var args = text.split(' ');
2023-10-02 02:11:25 +00:00
if (args[0] === config.irc.prefix+'help') {
2023-10-02 02:11:23 +00:00
help(to, args[1]);
2023-10-02 02:11:25 +00:00
} else if (args[0] === config.irc.prefix+'feed') {
2023-10-02 02:11:25 +00:00
feed(to, nick, args[1], args[2]);
2023-10-02 02:11:25 +00:00
} else if (args[0] === config.irc.prefix+'twitter') {
2023-10-02 02:11:24 +00:00
twitter(to, args[1], args[2])
2023-10-02 02:11:25 +00:00
} else if (args[0] === config.irc.prefix+'opt') {
2023-10-02 02:11:25 +00:00
opt(to, nick, args[1], args[2], args[3], args[4])
2023-10-02 02:11:23 +00:00
}
});
bot.addListener('error', function(message) {
console.log('error: ', message);
});
2023-10-02 02:11:24 +00:00
console.log('Starting Mercury');