const db = require("../db.js"); const util = require("../util.js"); const documentation = { "make guide ": { auth: true, description: "Creates a new guide." }, "delete guide ": { auth: true, description: "Deletes a guide." }, "guides": { auth: false, description: "Lists all keywords that will trigger a guide." } }; const commands = { "make guide": msg => { if (!util.isAuthorised(msg.member)) return; let content = msg.content.substring(msg.content.indexOf("make guide") + "make guide ".length); let guideName = content.substring(0, content.indexOf("\n")).trim(); let guideContent = content.substring(content.indexOf("\n")).trim(); let guide = db.get("guides").find({ name: guideName }); if (!guide.isUndefined().value()) { guide.assign({ content: guideContent }).write(); } else { db.get("guides") .push({ name: guideName, content: guideContent }) .write(); } msg.channel.send( `${msg.author.toString()} Added/updated "${guideName}"!` ); }, "delete guide": (msg, s) => { if (!util.isAuthorised(msg.member)) return; let guideName = s.substring("delete guide ".length).trim(); let val = db.get("guides").find({ name: guideName }); if (val.isUndefined().value()) { msg.channel.send(`${msg.author.toString()} No guide "${guideName}"!`); return; } db.get("guides") .remove({ name: guideName }) .write(); msg.channel.send( `${msg.author.toString()} Removed guide "${guideName}"!` ); }, "guides": msg => { let guides = db .get("guides") .map(g => g.name) .reduce((p, c) => `${p}\n${c}`, "\n") .value(); msg.channel.send(`${msg.author.toString()} Ping me with one of the following keywords for a guide related to the topic:\n\`\`\`${guides}\`\`\``); } }; const onDirectMention = (msg, content, actionsDone) => { if (actionsDone) return false; if(msg.attachments.size > 0 || content.length == 0) return false; let parts = content.trim().split(" "); let guide = db .get("guides") .map(g => Object.assign({ parts: g.name.toLowerCase().split(" ") }, g)) .sortBy(g => g.parts.length) .maxBy(k => db._.intersection(parts, k.parts).length) .value(); let hits = guide !== undefined && db._.intersection(guide.name.toLowerCase().split(" "), parts).length > 0; if (hits) { msg.channel.send(guide.content); return true; } return false; }; module.exports = { commands: commands, onDirectMention: onDirectMention, documentation: documentation };