123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- const db = require("../db.js");
- const util = require("../util.js");
- const documentation = {
- "make guide <keywords> <NEWLINE> <content>": {
- auth: true,
- description: "Creates a new guide."
- },
- "delete guide <keywords>": {
- 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
- };
|