From e299e0d330d43c4a92859dd6e99d707bbb3b174c Mon Sep 17 00:00:00 2001 From: Daniel afx Date: Wed, 23 Mar 2022 05:22:00 +0200 Subject: [PATCH] remove modules --- modules/autoreact.js | 29 --- modules/event.js | 513 ---------------------------------------- modules/eventquick.js | 133 ----------- modules/filter.js | 70 ------ modules/filteremotes.js | 34 --- modules/filterinvite.js | 45 ---- modules/filterlink.js | 92 ------- modules/fun.js | 55 ----- modules/joinreact.js | 29 --- modules/poll.js | 29 --- modules/producing.js | 212 ----------------- modules/qdance.js | 65 ----- modules/sus.js | 27 --- modules/tools.js | 60 ----- modules/welcome.js | 40 ---- 15 files changed, 1433 deletions(-) delete mode 100644 modules/autoreact.js delete mode 100644 modules/event.js delete mode 100644 modules/eventquick.js delete mode 100644 modules/filter.js delete mode 100644 modules/filteremotes.js delete mode 100644 modules/filterinvite.js delete mode 100644 modules/filterlink.js delete mode 100644 modules/fun.js delete mode 100644 modules/joinreact.js delete mode 100644 modules/poll.js delete mode 100644 modules/producing.js delete mode 100644 modules/qdance.js delete mode 100644 modules/sus.js delete mode 100644 modules/tools.js delete mode 100644 modules/welcome.js diff --git a/modules/autoreact.js b/modules/autoreact.js deleted file mode 100644 index e4431b7..0000000 --- a/modules/autoreact.js +++ /dev/null @@ -1,29 +0,0 @@ -const discord = require("discord.js"); - -class AutoReactModule -{ - constructor(config, client, bot) - { - this.config = config; - /** @type {discord.Client} */ - this.client = client; - this.bot = bot; - } - - /** - * @param {discord.Message} msg - * @param {Boolean} edited - */ - onMessage(msg, edited) - { - if (edited) { - return; - } - - if (msg.content.match(new RegExp(this.config.match, "i"))) { - msg.react(this.config.emoji); - } - } -} - -module.exports = AutoReactModule; diff --git a/modules/event.js b/modules/event.js deleted file mode 100644 index e68070c..0000000 --- a/modules/event.js +++ /dev/null @@ -1,513 +0,0 @@ -var fs = require("fs"); -var moment = require("moment"); - -var cmdsplit = require("./../cmdsplit"); - -class EventSchedule -{ - constructor(config, client, bot) - { - this.event = config; - this.client = client; - this.bot = bot; - - this.lastNotFound = new Date(1970, 1, 1); - this.lastNow = new Date(1970, 1, 1); - - this.loadSchedule(this.event.file); - } - - loadSchedule(filename) - { - console.log('Loading schedule: "' + filename + '"'); - - this.schedule = JSON.parse(fs.readFileSync(filename)); - - for (var i = 0; i < this.schedule.length; i++) { - let stage = this.schedule[i]; - - console.log("Event channel: " + stage.channel); - this.client.channels.fetch(stage.channel).then(channel => { - stage.channel = channel; - this.updateChannel(stage); - }).catch(() => { - console.error("Unable to find channel for stage \"" + stage.stage + "\""); - }); - - var newResponses = []; - for (var expression in stage.responses) { - let newResponse = { - match: new RegExp(expression, "i"), - msg: stage.responses[expression] - }; - newResponses.push(newResponse); - } - stage.responses = newResponses; - - stage.channelExtra = null; - if (stage.extra_channel !== undefined) { - this.client.channels.fetch(stage.extra_channel).then(channel => { - stage.channelExtra = channel; - }).catch(() => { - console.error("Unable to find channel for stage \"" + stage.stage + "\""); - }); - } - - var streamDelay = stage.streamdelay; - - for (var j = 0; j < stage.sets.length; j++) { - var set = stage.sets[j]; - var dateArray = set.slice(0, 5); - dateArray[1] -= 1; // months are 0-indexed, for some reason. even in the moment library! - - var setDate = moment(dateArray).add(streamDelay, 'm'); - var newSet = { - date: setDate, - name: set[5], - report: moment() > setDate, - report_5min: moment().add(5, 'm') > setDate, - nothing: (set[5] === undefined || set[5] == "Nothing"), - who: set[6] - }; - - stage.sets[j] = newSet; - } - } - } - - getStage(stage) - { - for (var i = 0; i < this.schedule.length; i++) { - var s = this.schedule[i]; - if (s.stage == stage) { - return s; - } - } - return null; - } - - getStageByChannel(channel) - { - for (var i = 0; i < this.schedule.length; i++) { - var s = this.schedule[i]; - if (s.channel == channel) { - return s; - } - } - return null; - } - - findSets(query) - { - query = query.toLowerCase(); - - var ret = []; - for (var i = 0; i < this.schedule.length; i++) { - var stage = this.schedule[i]; - for (var j = 0; j < stage.sets.length; j++) { - var set = stage.sets[j]; - if (set.nothing) { - continue; - } - if (set.name.toLowerCase().indexOf(query) != -1 || (set.who && set.who.toLowerCase().indexOf(query) != -1)) { - ret.push({ - set: set, - stage: stage - }); - } - } - } - return ret; - } - - getCurrentSet(stage) - { - var date = new Date(); - - for (var i = 0; i < stage.sets.length; i++) { - var set = stage.sets[i]; - if (date < set.date) { - if (i == 0) { - // Happens if no set has started yet on this stage - return null; - } - return stage.sets[i - 1]; - } - } - - // Happens if the last set has been played - return stage.sets[stage.sets.length - 1]; - } - - getNextSet(stage) - { - var date = new Date(); - - for (var i = 0; i < stage.sets.length; i++) { - var set = stage.sets[i]; - if (date < set.date) { - return set; - } - } - - // Happens if this is the final set on this stage - return null; - } - - getNextLiveSet(stage) - { - var date = new Date(); - - for (var i = 0; i < stage.sets.length; i++) { - var set = stage.sets[i]; - if (date < set.date && !set.nothing) { - return set; - } - } - - // Happens if this is the final set on this stage - return null; - } - - onTick() - { - var date = moment(); - - for (var i = 0; i < this.schedule.length; i++) { - var stage = this.schedule[i]; - - var current = this.getCurrentSet(stage); - if (current !== null) { - if (!current.report) { - current.report = true; - if (!current.nothing) { - console.log("Starting now: " + current.name); - var msg = ":red_circle: STARTING NOW: **" + current.name + "**"; - stage.channel.send(msg); - if (stage.channelExtra) { - stage.channelExtra.send(msg); - } - } else { - console.log("Stream is not live anymore."); - var next = this.getNextSet(stage); - if (next !== null && !next.nothing) { - var msg = ":no_entry_sign: Stream is no longer live. Next set is at **" + this.getTimeString(next.date) + "**!"; - stage.channel.send(msg); - if (stage.channelExtra) { - stage.channelExtra.send(msg); - } - } else { - var msg = ":tada: This is the end of the livestream. Thanks for watching."; - stage.channel.send(msg); - if (stage.channelExtra) { - stage.channelExtra.send(msg); - } - } - } - this.updateChannel(stage); - } - } - - var next = this.getNextSet(stage); - if (next !== null && !next.nothing) { - if (date.clone().add(5, 'm') > next.date && !next.report_5min) { - next.report_5min = true; - console.log("Starting in 5 minutes: " + next.name); - var msg = ":warning: **" + next.name + "** starts in 5 minutes!"; - stage.channel.send(msg); - if (stage.channelExtra) { - stage.channelExtra.send(msg); - } - } - } - } - } - - onCmdCurrent(msg) { this.onCmdNp(msg); } - onCmdNow(msg) { this.onCmdNp(msg); } - onCmdNp(msg) - { - var stage = this.getStageByChannel(msg.channel); - if (!stage) { - return; - } - - var current = this.getCurrentSet(stage); - if (current !== null && !current.nothing) { - if (current.who) { - msg.channel.send(":red_circle: Now playing: **" + current.name + "**, started ! (" + current.who + ")"); - } else { - msg.channel.send(":red_circle: Now playing: **" + current.name + "**, started !"); - } - } else { - msg.channel.send("Nobody's playing right now."); - } - } - - onCmdNext(msg) - { - var stage = this.getStageByChannel(msg.channel); - if (!stage) { - return; - } - - var next = this.getNextSet(stage); - if (next) { - var localTime = "**" + this.getTimeString(next.date) + "**"; - localTime += " ()"; - - if (next.name) { - if (next.who) { - msg.channel.send(":arrow_forward: Next up: **" + next.name + "**, at " + localTime + " (" + next.who + ")"); - } else { - msg.channel.send(":arrow_forward: Next up: **" + next.name + "**, at " + localTime); - } - } else { - msg.channel.send(":arrow_forward: The stream ends at " + localTime); - } - } else { - msg.channel.send("There's nothing playing next."); - } - } - - getScheduleString(stage, limit, starttime) - { - var ret = ""; - - if (stage.unconfirmed) { - ret = ":warning: **Note:** Set times are not confirmed!\n"; - } - - if (!starttime) { - starttime = moment(stage.sets[0].date).clone().subtract(1, 'm'); - } - - var lines = 0; - for (var i = 0; i < stage.sets.length; i++) { - var set = stage.sets[i]; - if (starttime > set.date) { - continue; - } - - if (limit && lines == limit) { - ret += "(limited, use `.fullschedule` for the full schedule)\n"; - break; - } - lines++; - - if (set.nothing) { - ret += "- (), the stream will be offline :no_entry_sign:\n"; - } else { - if (set.who) { - ret += "- (): **" + set.name + "** (" + set.who + ")\n"; - } else { - ret += "- (): **" + set.name + "**\n"; - } - } - } - - if (lines == 0) { - ret = "We have nothing left! :frowning:"; - } else if (limit) { - ret = ":calendar_spiral: Next " + limit + " sets are:\n" + ret.trim(); - } else { - ret = ":calendar_spiral: The full schedule:\n" + ret.trim(); - } - - return ret; - } - - onCmdTimetable(msg) { this.onCmdSchedule(msg); } - onCmdSched(msg) { this.onCmdSchedule(msg); } - onCmdSchedule(msg) - { - var stage = this.getStageByChannel(msg.channel); - if (!stage) { - return; - } - - msg.channel.send(this.getScheduleString(stage, 5, moment())); - } - - onCmdFullSched(msg) { this.onCmdFullSchedule(msg); } - onCmdFullSchedule(msg) - { - var stage = this.getStageByChannel(msg.channel); - if (!stage) { - return; - } - - var text = this.getScheduleString(stage); - while (text.length > 0) { - msg.author.send(text.substr(0, 2000)).catch(console.error); - text = text.substr(2000); - } - - msg.reply("I've DM'd you the full schedule."); - } - - onCmdFind(msg) - { - var query = Array.from(arguments).slice(1).join(" ").trim(); - if (query.length < 3) { - return; - } - - var results = this.findSets(query); - - var ret = ""; - if (results.length == 0) { - ret = "I found nothing :frowning:"; - // Avoid spamming "I found nothing" when jokers do .find a meaning of life - var now = new Date(); - if ((now - this.lastNotFound) < 60 * 1000) { - return; - } - this.lastNotFound = now; - } else { - var date = new Date(); - for (var i = 0; i < results.length; i++) { - var res = results[i]; - - var localTime = "**" + this.getTimeString(res.set.date) + "**"; - localTime += " ()"; - - var stageMessage = ""; - if (this.schedule.length > 1) { - stageMessage = " on **" + res.stage.stage + "** " + res.stage.emoji + " stage!"; - } - - if (date > res.date) { - ret += res.set.name + " already played on \n"; - } else { - ret += res.set.name + " plays on \n"; - } - } - } - - msg.channel.send(":calendar_spiral: " + ret.trim()); - } - - onCmdReloadSchedule(msg) - { - if (!this.bot.isAdmin(msg.member)) { - return; - } - - this.loadSchedule(this.event.file); - msg.reply("schedule reloaded!"); - } - - onMessage(msg) - { - var inStage = false; - - for (var i = 0; i < this.schedule.length; i++) { - var stage = this.schedule[i]; - if (stage.channel.id != msg.channel.id) { - continue; - } - - inStage = true; - - for (var j = 0; j < stage.responses.length; j++) { - var r = stage.responses[j]; - var match = msg.content.match(r.match); - if (match) { - var sendMessage = r.msg; - for (var k = 0; k < match.length; k++) { - sendMessage = sendMessage.replace("$" + k, match[k]); - } - msg.channel.send(sendMessage); - return true; - } - } - } - - var isCommand = msg.content.startsWith("."); - - var parse = []; - if (isCommand) { - parse = cmdsplit(msg.content); - } - - // Outside-channel schedule command - if (isCommand && this.schedule.length > 1 && !inStage && (parse[0] == ".schedule" || parse[0] == ".timetable" || parse[0] == ".sched" || parse[0] == ".current" || parse[0] == ".now")) { - // Avoid spamming long .now message when jokers spam .now - var now = new Date(); - if ((now - this.lastNow) < 60 * 1000) { - return true; - } - this.lastNow = now; - - var ret = "**LIVE**\n"; - for (var i = 0; i < this.schedule.length; i++) { - var stage = this.schedule[i]; - - var current = this.getCurrentSet(stage); - var next = this.getNextSet(stage); - - if (current === null && next !== null && next.date.date() != moment(now).date()) { - continue; - } - - if (current !== null && !current.nothing) { - ret += stage.emoji + " " + stage.stage + ": **" + current.name + "**"; - } else { - ret += stage.emoji + " " + stage.stage + ": Not live"; - } - - if (next !== null && !next.nothing) { - ret += ", next: " + next.name; - } else { - ret += "."; - } - - ret += " " + stage.channel.toString() + "\n"; - } - msg.channel.send(ret.trim()); - return true; - } - - return false; - } - - getTimeString(date) - { - return ""; - } - - updateChannel(stage) - { - if (typeof(stage.channel) == "string") { - return; - } - - var line = ""; - - var current = this.getCurrentSet(stage); - var next = this.getNextLiveSet(stage); - - if ((current === null || current.nothing) && next === null) { - line += " :tada: Thanks for watching."; - } else { - if (current !== null && !current.nothing) { - line += " __" + current.name + "__ "; - } else { - line += " :no_entry_sign: __Not currently live__."; - } - - if (next !== null) { - line += " :arrow_forward: Next: __" + next.name + "__ "; - } else { - line += " :warning: This is the last set!"; - } - - line += " :link: " + stage.url; - } - - stage.channel.setTopic(stage.emoji + " " + line, "Automated bot action for event"); - } -} - -module.exports = EventSchedule; diff --git a/modules/eventquick.js b/modules/eventquick.js deleted file mode 100644 index 10ca353..0000000 --- a/modules/eventquick.js +++ /dev/null @@ -1,133 +0,0 @@ -class EventQuickModule -{ - constructor(config, client, bot) - { - this.event = config; - this.client = client; - this.bot = bot; - - this.current = ''; - this.ended = false; - if (this.event.current !== undefined) { - this.current = this.event.current; - } - - this.channel = client.channels.resolve(this.event.channel); - this.updateChannel(); - } - - onCmdIlink(msg, link) - { - if (!this.bot.isMod(msg.member)) { - return; - } - - this.event.link = link; - - console.log("New impromptu event link: " + this.event.link); - msg.channel.send(":link: The livestream can be found here: <" + this.event.link + ">"); - - msg.delete(); - this.updateChannel(); - } - - onCmdInow(msg) - { - if (!this.bot.isMod(msg.member)) { - return; - } - - if (arguments.length == 1) { - return; - } - - this.current = Array.from(arguments).slice(1).join(" ").trim(); - this.ended = false; - - console.log("Starting now: " + this.current); - msg.channel.send(":red_circle: STARTING NOW: **" + this.current + "**"); - - msg.delete(); - this.updateChannel(); - } - - onCmdIoffline(msg) - { - if (!this.bot.isMod(msg.member)) { - return; - } - - this.current = ""; - this.ended = false; - - console.log("Stream is offline!"); - msg.channel.send(":no_entry_sign: Stream is temporarily offline."); - - msg.delete(); - this.updateChannel(); - } - - onCmdIend(msg) - { - if (!this.bot.isMod(msg.member)) { - return; - } - - this.current = ""; - this.ended = true; - - console.log("End of event!"); - msg.channel.send(":tada: Thank you for tuning in."); - - msg.delete(); - this.updateChannel(); - } - - onCmdCurrent(msg) { this.onCmdNp(msg); } - onCmdNow(msg) { this.onCmdNp(msg); } - onCmdNp(msg) - { - if (this.current != "") { - msg.channel.send(":red_circle: Now playing: **" + this.current + "**"); - } else { - msg.channel.send(":robot: There's currently no set playing."); - } - } - - onCmdNext(msg) - { - msg.channel.send(":robot: This is an event without a timetable."); - } - - onCmdLink(msg) - { - msg.channel.send(":link: The livestream can be found here: <" + this.event.link + ">"); - } - - updateChannel() - { - var line = ""; - - if (this.ended) { - line = ":tada: Thank you for tuning in."; - } else { - if (this.current == "") { - line = ":no_entry_sign: Not currently live."; - } else { - line = "__" + this.current + "__"; - } - - if (this.event.link !== undefined) { - line += " :link: " + this.event.link; - } - } - - if (this.event.emoji) { - line = this.event.emoji + " " + line; - } - - this.channel.setTopic(line); - } -} - -module.exports = EventQuickModule; diff --git a/modules/filter.js b/modules/filter.js deleted file mode 100644 index 44f7ae4..0000000 --- a/modules/filter.js +++ /dev/null @@ -1,70 +0,0 @@ -const discord = require("discord.js"); -const RedditRadio = require("../RedditRadio"); - -class FilterModule -{ - constructor(config, client, bot) - { - this.config = config; - - /** @type {discord.Client} */ - this.client = client; - - /** @type {RedditRadio} */ - this.bot = bot; - - if (this.config.channel) { - if (!this.config.channels) { - this.config.channels = []; - } - this.config.channels.push(this.config.channel); - } - } - - /** - * @param {discord.Message} msg - * @param {Boolean} edited - */ - onMessage(msg, edited) - { - if (this.bot.isMod(msg.member)) { - return; - } - - var shouldDelete = false; - - // Only filter if we're in the right channel - if (this.config.channels) { - var isInChannel = false; - for (const channelID of this.config.channels) { - if (msg.channel.id == channelID) { - isInChannel = true; - break; - } - } - if (!isInChannel) { - return; - } - } - - // Check for bad words (case insensitive) - if (this.config.words && msg.content.toLowerCase().match(this.config.words)) { - shouldDelete = true; - } - - // Check for bad tokens (case sensitive) - if (this.config.tokens && msg.content.match(this.config.tokens)) { - shouldDelete = true; - } - - if (shouldDelete) { - var usermessage = this.config.usermessage || "Your recent message has been automatically deleted. Please take another look at the rules in #info. We automatically delete messages for things like piracy and advertising."; - - msg.delete(); - this.bot.addLogMessage("Deleted unwanted message from " + msg.author.toString() + " in " + msg.channel.toString() + ": `" + msg.content.replace('`', '\\`') + "`"); - msg.author.send(usermessage).catch(console.error); - } - } -} - -module.exports = FilterModule; diff --git a/modules/filteremotes.js b/modules/filteremotes.js deleted file mode 100644 index 1628d73..0000000 --- a/modules/filteremotes.js +++ /dev/null @@ -1,34 +0,0 @@ -const discord = require("discord.js"); -const RedditRadio = require("../RedditRadio"); - -class FilterEmotesModule -{ - constructor(config, client, bot) - { - this.config = config; - - /** @type {discord.Client} */ - this.client = client; - - /** @type {RedditRadio} */ - this.bot = bot; - } - - /** - * @param {discord.Message} msg - * @param {Boolean} edited - */ - onMessage(msg, edited) - { - var limit = this.config.limit || 14; - - var emotes = msg.content.toLowerCase().match(/(|\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/g); - if (emotes && emotes.length > limit) { - msg.delete(); - this.bot.addLogMessage("Deleted message from " + msg.member.toString() + " in " + msg.channel.toString() + " that contained " + emotes.length + " emotes"); - msg.author.send("You posted too many emojis. Calm down a little bit!").catch(console.error); - } - } -} - -module.exports = FilterEmotesModule; diff --git a/modules/filterinvite.js b/modules/filterinvite.js deleted file mode 100644 index f14c019..0000000 --- a/modules/filterinvite.js +++ /dev/null @@ -1,45 +0,0 @@ -const discord = require("discord.js"); -const RedditRadio = require("../RedditRadio"); - -class FilterInviteModule -{ - constructor(config, client, bot) - { - this.config = config; - - /** @type {discord.Client} */ - this.client = client; - - /** @type {RedditRadio} */ - this.bot = bot; - } - - /** - * @param {discord.Message} msg - * @param {Boolean} edited - */ - onMessage(msg, edited) - { - if (this.bot.isMod(msg.member)) { - return; - } - - var inviteLinks = msg.content.matchAll(/(discord\.gg|discord\.com\/invite|discordapp\.com\/invite)\/([A-Za-z0-9]+)/gi); - for (const link of inviteLinks) { - var inviteCode = link[2]; - - var isWhitelisted = false; - if (this.config.whitelist) { - isWhitelisted = (this.config.whitelist.indexOf(inviteCode) != -1); - } - - if (!isWhitelisted) { - msg.delete(); - this.bot.addLogMessage("Deleted Discord invite link from " + msg.author.toString() + " in " + msg.channel.toString() + ": `" + msg.content.replace('`', '\\`') + "`"); - msg.author.send("Your recent message has been automatically deleted. Please do not post Discord invite links without prior permission from a moderator or admin.").catch(console.error); - } - } - } -} - -module.exports = FilterInviteModule; diff --git a/modules/filterlink.js b/modules/filterlink.js deleted file mode 100644 index 8f9ec14..0000000 --- a/modules/filterlink.js +++ /dev/null @@ -1,92 +0,0 @@ -const discord = require("discord.js"); -const RedditRadio = require("../RedditRadio"); - -var moment = require("moment"); - -class FilterLinkModule -{ - constructor(config, client, bot) - { - this.config = config; - - /** @type {discord.Client} */ - this.client = client; - - /** @type {RedditRadio} */ - this.bot = bot; - - /** @type {String[]} */ - this.permitted = []; - } - - isPermitted(member) - { - var delay = this.config.minutes || 60; - var minutes = moment().diff(member.joinedTimestamp, "minutes"); - - if (minutes >= delay) { - return true; - } - - // Check the list of permitted users with .permit - var permittedIndex = this.permitted.indexOf(member.id); - if (permittedIndex != -1) { - if (minutes >= delay) { - this.permitted.splice(permittedIndex, 1); - } - return true; - } - - return false; - } - - /** - * @param {discord.Message} msg - * @param {Boolean} edited - */ - onMessage(msg, edited) - { - if (msg.content.match(/https?:\/\//i) || msg.content.match(/\.[a-z]{2,3}\//i) || msg.content.match(/(bit.ly|shorturl.at|tiny.cc)/i)) { - msg.guild.members.fetch(msg.author).then((member) => { - if (this.isPermitted(member)) { - return; - } - - msg.delete(); - msg.author.send("Your recent message has been automatically deleted. Brand new members can't post links for a short while, to combat spam. Check #info for more information about the rules. If you think this message is in error, please DM one of the mods.").catch(console.error); - - var minutes = moment().diff(member.joinedTimestamp, "minutes"); - this.bot.addLogMessage("Deleted link from " + member.toString() + " in " + msg.channel.toString() + " who joined " + minutes + " minutes ago. Deleted message:\n```" + msg.content + "```"); - }); - } - } - - /** - * @param {discord.Message} msg - * @param {String} user - */ - onCmdPermit(msg, user) - { - if (!this.bot.isMod(msg.member)) { - return; - } - - var mentions = ""; - var num = 0; - msg.mentions.members.each(member => { - if (this.isPermitted(member)) { - return; - } - this.permitted.push(member.id); - mentions += member.toString() + " "; - num++; - }); - - if (num > 0) { - msg.channel.send(mentions + "A moderator has permitted you to post links!"); - this.bot.addLogMessage(msg.member.toString() + " has permitted " + mentions + "to post links"); - } - } -} - -module.exports = FilterLinkModule; diff --git a/modules/fun.js b/modules/fun.js deleted file mode 100644 index 5f0471a..0000000 --- a/modules/fun.js +++ /dev/null @@ -1,55 +0,0 @@ -const discord = require("discord.js"); -const RedditRadio = require("../RedditRadio"); - -class FunModule -{ - constructor(config, client, bot) - { - this.config = config; - - /** @type {discord.Client} */ - this.client = client; - - /** @type {RedditRadio} */ - this.bot = bot; - } - - /** - * @param {discord.Message} msg - * @param {Boolean} edited - */ - onMessage(msg, edited) - { - if (msg.content.toLowerCase() == "good bot") { - msg.channel.send(msg.member.toString() + " Thanks"); - return; - } - - if (msg.content.toLowerCase() == "bad bot") { - msg.channel.send(msg.member.toString() + " I'm sorry :sob: If I did something wrong, you can report a bug! "); - return; - } - - if (msg.content.toLowerCase() == "kut bot") { - msg.channel.send(msg.member.toString() + " nou sorry hoor"); - return; - } - - if (msg.content.toLowerCase().indexOf("am i the only one") != -1 && msg.member !== null) { - msg.channel.send(msg.member.toString() + " Probably not."); - return; - } - - if (msg.content.toLowerCase().indexOf(".shrug") != -1) { - msg.channel.send("\xaf\\\\\\_<:headykappa:330110432209797123>\\_/\xaf"); - return; - } - - if (msg.content.toLowerCase() == "<@!327816989114630145> ") { - msg.channel.send(""); - return; - } - } -} - -module.exports = FunModule; diff --git a/modules/joinreact.js b/modules/joinreact.js deleted file mode 100644 index 105d3da..0000000 --- a/modules/joinreact.js +++ /dev/null @@ -1,29 +0,0 @@ -const discord = require("discord.js"); - -class JoinReactModule -{ - constructor(config, client, bot) - { - this.config = config; - /** @type {discord.Client} */ - this.client = client; - this.bot = bot; - } - - /** - * @param {discord.Message} msg - * @param {Boolean} edited - */ - onMessage(msg, edited) - { - if (msg.system && msg.type == "GUILD_MEMBER_JOIN") { - setTimeout(() => { - try { - msg.react(this.config.emoji || "👋"); - } catch (err) { console.error(err); } - }, 2000); - } - } -} - -module.exports = JoinReactModule; diff --git a/modules/poll.js b/modules/poll.js deleted file mode 100644 index 9ff4a1b..0000000 --- a/modules/poll.js +++ /dev/null @@ -1,29 +0,0 @@ -const discord = require("discord.js"); -const RedditRadio = require("../RedditRadio"); - -class PollModule -{ - constructor(config, client, bot) - { - this.config = config; - - /** @type {discord.Client} */ - this.client = client; - - /** @type {RedditRadio} */ - this.bot = bot; - } - - /** - * @param {discord.Message} msg - */ - onCmdPoll(msg) - { - (async () => { - await msg.react("👍"); - await msg.react("👎"); - })(); - } -} - -module.exports = PollModule; diff --git a/modules/producing.js b/modules/producing.js deleted file mode 100644 index 9927fef..0000000 --- a/modules/producing.js +++ /dev/null @@ -1,212 +0,0 @@ -var colors = require("colors"); -var moment = require("moment"); - -const ffmpeg = require('fluent-ffmpeg'); - -class ProducingModule -{ - constructor(config, client, bot) - { - this.config = config; - this.client = client; - this.bot = bot; - - this.client.on("messageReactionAdd", (r, user) => { this.onMessageReactionAdd(r, user); }); - this.client.on("messageReactionRemove", (r, user) => { this.onMessageReactionRemove(r, user); }); - - if (!this.bot.mongodb) { - console.error("The producing module requires MongoDB to be connected to a database!"); - return; - } - - this.collUsers = this.bot.mongodb.collection("users"); - this.collFiles = this.bot.mongodb.collection("files"); - this.collFilesFeedback = this.bot.mongodb.collection("files_feedback"); - } - - async getOrCreateUser(id) - { - var user = await this.collUsers.findOne({ id: id }); - if (!user) { - user = { - id: id, - files_uploaded: 0, - feedback_given: 0 - }; - await this.collUsers.insertOne(user); - } - return user; - } - - async getNumberOfFeedbackGiven(userId) - { - var result = await this.collFilesFeedback.aggregate([ - { $match: { user: userId } }, - { $group: { _id: "$msg", count: { $sum: 1 } } }, - { $count: "count" } - ]).next(); - - if (!result) { - return 0; - } - return result.count; - } - - onMessageReactionAdd(r, user) - { - if (user == this.client.user) { - return; - } - - var msg = r.message; - if (msg.channel.id != this.config.channel) { - return; - } - - if (user == msg.author) { - return; - } - - if (this.config.reactions.indexOf(r.emoji.name) == -1) { - return; - } - - this.collFilesFeedback.insertOne({ - time: new Date(), - msg: msg.id, - msg_user: msg.author.id, - user: user.id, - emoji: r.emoji.name - }); - } - - onMessageReactionRemove(r, user) - { - if (user == this.client.user) { - return; - } - - var msg = r.message; - if (msg.channel.id != this.config.channel) { - return; - } - - if (user == msg.author) { - return; - } - - if (this.config.reactions.indexOf(r.emoji.name) == -1) { - return; - } - - this.collFilesFeedback.deleteOne({ - msg: msg.id, - user: user.id, - emoji: r.emoji.name - }); - } - - onMessage(msg, edited) - { - if (msg.channel.id != this.config.channel) { - return false; - } - - if (edited) { - return false; - } - - (async () => { - var user = await this.getOrCreateUser(msg.author.id); - - var filenames = ""; - var numFiles = 0; - - msg.attachments.each(async a => { - if (!a.name.match(/.*\.(wav|mp3|ogg|flac)/)) { - return; - } - - filenames += a.name + " "; - numFiles++; - - var logUsername = msg.author.username + '#' + msg.author.discriminator; - console.log(logUsername + " uploaded " + a.name.red.underline); - - this.collUsers.updateOne({ id: user.id }, { - $inc: { files_uploaded: 1 } - }); - - /* - statsmessage = false - feedbackmessage = false - spectrumpic = false - */ - - if (this.config.spectrumpic) { - new Promise((resolve, reject) => { - let path = '/tmp/waveform-' + msg.id + '.png'; - let cmd = ffmpeg(a.url); - cmd.complexFilter([ - '[0:a] showspectrumpic=s=400x70:color=nebulae:legend=false [tmp1]', - //'[0:a] showwavespic=s=400x70:colors=0xFFFFFFFF:filter=peak [tmp2]', - //'[tmp1][tmp2] overlay=y=0:format=rgb:alpha=premultiplied [tmp3]', - '[tmp1] drawbox=0:0:400:70:black', - ]); - cmd.frames(1); - cmd.on('error', err => { - reject(err); - }); - cmd.on('end', () => { - msg.channel.send({ - files: [{ - attachment: path, - name: 'waveform.png', - }], - }).then(resolve).catch(reject); - }); - cmd.save(path); - }).catch(err => { - console.error('ffmpeg waveform failed!', err); - }); - } - - for (var i = 0; i < this.config.reactions.length; i++) { - await msg.react(this.config.reactions[i]); - } - }); - - if (numFiles > 0) { - var numFeedbackGiven = await this.getNumberOfFeedbackGiven(user.id); - - if (this.config.statsmessage) { - msg.channel.send("**Give " + msg.member.displayName + " your feedback!** :outbox_tray: " + (user.files_uploaded + 1) + " / :bulb: " + numFeedbackGiven); - } - - if (this.config.feedbackmessage) { - if (numFeedbackGiven < user.files_uploaded) { - msg.channel.send(msg.member.toString() + " Remember to give others feedback, too! :ok_hand:"); - } - } - } - })(); - - return false; - } - - async onCmdStats(msg) - { - if (msg.channel.id != this.config.channel) { - return; - } - - var user = await this.getOrCreateUser(msg.author.id); - - var numFeedbackReceived = await this.collFilesFeedback.countDocuments({ msg_user: user.id }); - var numFeedbackGiven = await this.getNumberOfFeedbackGiven(user.id); - - msg.channel.send(":bar_chart: " + msg.member.toString() + ", you have uploaded **" + (user.files_uploaded || 0) + "** files, given **" + numFeedbackGiven + "** feedback reactions, and received **" + numFeedbackReceived + "**."); - } -} - -module.exports = ProducingModule; diff --git a/modules/qdance.js b/modules/qdance.js deleted file mode 100644 index 4462c65..0000000 --- a/modules/qdance.js +++ /dev/null @@ -1,65 +0,0 @@ -var discord = require("discord.js"); -var http = require("https"); - -class QdanceModule -{ - get(dir) - { - return new Promise((resolve, reject) => { - http.get("https://feed.q-dance.com/onair", function(res) { - var data = ""; - res.setEncoding("utf8"); - res.on("data", function(chunk) { data += chunk; }); - res.on("end", function() { - var obj = JSON.parse(data); - if (dir == -1) { - resolve(obj.TrackData.PreviousPlaying); - } else if (dir == 0) { - resolve(obj.TrackData.NowPlaying); - } else if (dir == 1) { - resolve(obj.TrackData.NextPlaying); - } - reject('Unknown track direction!'); - }); - }); - }); - } - - makeEmbed(track, title) - { - var embed = new discord.MessageEmbed({ - title: title, - description: track.Artist + " - " + track.Title, - hexColor: "#D26F1C" - }); - embed.setAuthor("Q-dance Radio", "https://4o4.nl/20170908JHxVy.png"); - embed.setThumbnail(track.CoverImage); - return embed; - } - - async onCmdQdnp(msg) - { - var track = await this.get(0); - msg.channel.send({ - embeds: [ this.makeEmbed(track, "Q-dance Radio is now playing:") ], - }); - } - - async onCmdQdnext(msg) - { - var track = await this.get(1); - msg.channel.send({ - embeds: [ this.makeEmbed(track, "Next track on Q-dance Radio:") ], - }); - } - - async onCmdQdprev(msg) - { - var track = await this.get(-1); - msg.channel.send({ - embeds: [ this.makeEmbed(track, "Previous track on Q-dance Radio:") ], - }); - } -} - -module.exports = QdanceModule; diff --git a/modules/sus.js b/modules/sus.js deleted file mode 100644 index 53b49b7..0000000 --- a/modules/sus.js +++ /dev/null @@ -1,27 +0,0 @@ -const discord = require("discord.js"); - -var moment = require("moment"); - -class SusModule -{ - constructor(config, client, bot) - { - this.config = config; - /** @type {discord.Client} */ - this.client = client; - this.bot = bot; - } - - /** - * @param {discord.GuildMember} member - */ - onMemberJoin(member) - { - if (moment().diff(member.user.createdAt, "hours") < 48) { - this.bot.addLogMessage("<:skepticalpepe:743455915935662133> Brand new user account joined: " + member.user.toString() - + " (account created )"); - } - } -} - -module.exports = SusModule; diff --git a/modules/tools.js b/modules/tools.js deleted file mode 100644 index 84f6297..0000000 --- a/modules/tools.js +++ /dev/null @@ -1,60 +0,0 @@ -var moment = require("moment"); - -class ToolsModule -{ - constructor(config, client, bot) - { - this.client = client; - this.bot = bot; - } - - onCmdJoinTime(msg) { this.onCmdJoinDate(msg); } - onCmdJoinDate(msg) - { - msg.guild.members.fetch(msg.author).then((member) => { - var joinedAt = moment(member.joinedTimestamp); - msg.reply("you joined this server **** - "); - }); - } - - onCmdSlow(msg, seconds) - { - if (!this.bot.isMod(msg.member)) { - return; - } - - msg.channel.setRateLimitPerUser(parseInt(seconds)); - msg.delete(); - } - - async onCmdUserInfo(msg, user) - { - if (!this.bot.isMod(msg.member)) { - return; - } - - try { - var member = await msg.guild.members.fetch(user); - } catch { - var fetcheduser = await this.client.users.fetch(user); - var createdAt = moment(fetcheduser.createdTimestamp); - - msg.channel.send( - "**Info for non-member " + fetcheduser.tag + "**:\n" + - ":alarm_clock: Account age: **** - " - ); - return; - } - - var joinedAt = moment(member.joinedTimestamp); - var createdAt = moment(member.user.createdTimestamp); - - msg.channel.send( - "**Info for member " + member.toString() + "**:\n" + - ":alarm_clock: Join time: **** - \n" + - ":alarm_clock: Account age: **** - " - ); - } -} - -module.exports = ToolsModule; diff --git a/modules/welcome.js b/modules/welcome.js deleted file mode 100644 index d897b08..0000000 --- a/modules/welcome.js +++ /dev/null @@ -1,40 +0,0 @@ -const discord = require("discord.js"); - -class WelcomeModule -{ - constructor(config, client, bot) - { - this.config = config; - /** @type {discord.Client} */ - this.client = client; - this.bot = bot; - } - - /** - * @param {discord.GuildMember} member - */ - async onMemberJoin(member) - { - var msg = this.config.messageprefix; - - var msgIndex = Math.floor(Math.random() * this.config.messages.length); - msg += ' ' + this.config.messages[msgIndex]; - msg = msg.replace('', '**' + member.user.username + '**'); - //msg = msg.replace('', member.toString()); - //^ Commented out because mentions for newly joined members are broken on the client - - var channel = await this.client.channels.fetch(this.config.channel); - var message = await channel.send(msg); - /* - var message = await channel.send({ - content: msg, - allowedMentions: { - users: [] - } - }); - */ - message.react(this.config.emoji || "👋"); - } -} - -module.exports = WelcomeModule;