quote.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const db = require("../db.js");
  2. const util = require("../util.js");
  3. const quotePattern = /add quote by "([^"]+)"\s*(.*)/i;
  4. function minify(str, maxLength) {
  5. let result = str.replace("\n", "");
  6. if(result.length > maxLength)
  7. result = `${result.substring(0, maxLength - 3)}...`;
  8. return result;
  9. }
  10. const commands = {
  11. "add quote": (msg, c) => {
  12. if(!util.isAuthorised(msg.author))
  13. return;
  14. let result = quotePattern.exec(c);
  15. if(result == null)
  16. return;
  17. let author = result[1].trim();
  18. let message = result[2].trim();
  19. db.get("quotes").push({
  20. author: author,
  21. message: message
  22. }).write();
  23. msg.channel.send(`${msg.author.toString()} Added quote #${db.get("quotes").size().value()}!`);
  24. },
  25. "random quote": (msg) => {
  26. if(db.get("quotes").size().value() == 0){
  27. msg.channel.send("I have no quotes!");
  28. return;
  29. }
  30. let quote = db.get("quotes").randomElement().value();
  31. let index = db.get("quotes").indexOf(quote).value();
  32. msg.channel.send(`Quote #${index + 1}:\n*"${quote.message}"*\n- ${quote.author}`);
  33. },
  34. "remove quote": (msg, c) => {
  35. let quoteNum = c.substring("remove quote".length).trim();
  36. let val = parseInt(quoteNum);
  37. if(isNaN(val) || db.get("quotes").size().value() < val - 1)
  38. return;
  39. db.get("quotes").pullAt(val - 1).write();
  40. msg.channel.send(`${msg.author.toString()} Removed quote #${val}!`);
  41. },
  42. "list quotes": msg => {
  43. if(!util.isAuthorised(msg.author)) {
  44. msg.channel.send(`${msg.author.toString()} To prevent spamming, only bot moderators can view all quotes!`);
  45. return;
  46. }
  47. if(db.get("quotes").size().value() == 0){
  48. msg.channel.send("I have no quotes!");
  49. return;
  50. }
  51. let quotes = db.get("quotes").reduce((prev, curr, i) => `${prev}[${i+1}] "${minify(curr.message, 10)}" by ${curr.author}\n`, "").value();
  52. msg.channel.send(`${msg.author.toString()}I know the following quotes:\n\`\`\`${quotes}\`\`\``);
  53. }
  54. };
  55. module.exports = {
  56. commands: commands
  57. };