quote.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. const db = require("../db.js");
  2. const util = require("../util.js");
  3. const documentation = {
  4. "add quote by \"<author>\" <NEWLINE> <quote>": {
  5. auth: true,
  6. description: "Adds a quote"
  7. },
  8. "remove quote <quote_index>": {
  9. auth: true,
  10. description: "Removes quote. Use \"quotes\" to get the <quote_index>!"
  11. },
  12. "quotes": {
  13. auth: true,
  14. description: "Lists all known quotes."
  15. },
  16. "random quote": {
  17. auth: false,
  18. description: "Shows a random quote by someone special..."
  19. }
  20. };
  21. const quotePattern = /add quote by "([^"]+)"\s*(.*)/i;
  22. function minify(str, maxLength) {
  23. let result = str.replace("\n", "");
  24. if (result.length > maxLength)
  25. result = `${result.substring(0, maxLength - 3)}...`;
  26. return result;
  27. }
  28. const commands = {
  29. "add quote": (msg, c) => {
  30. if (!util.isAuthorised(msg.member))
  31. return;
  32. let result = quotePattern.exec(c);
  33. if (result == null)
  34. return;
  35. let author = result[1].trim();
  36. let message = result[2].trim();
  37. db.get("quotes").push({
  38. author: author,
  39. message: message
  40. }).write();
  41. msg.channel.send(`${msg.author.toString()} Added quote #${db.get("quotes").size().value()}!`);
  42. },
  43. "random quote": (msg) => {
  44. if (db.get("quotes").size().value() == 0) {
  45. msg.channel.send("I have no quotes!");
  46. return;
  47. }
  48. let quote = db.get("quotes").randomElement().value();
  49. let index = db.get("quotes").indexOf(quote).value();
  50. msg.channel.send(`Quote #${index + 1}:\n*"${quote.message}"*\n- ${quote.author}`);
  51. },
  52. "remove quote": (msg, c) => {
  53. let quoteNum = c.substring("remove quote".length).trim();
  54. let val = parseInt(quoteNum);
  55. if (isNaN(val) || db.get("quotes").size().value() < val - 1)
  56. return;
  57. db.get("quotes").pullAt(val - 1).write();
  58. msg.channel.send(`${msg.author.toString()} Removed quote #${val}!`);
  59. },
  60. "quotes": msg => {
  61. if (!util.isAuthorised(msg.member)) {
  62. msg.channel.send(`${msg.author.toString()} To prevent spamming, only bot moderators can view all quotes!`);
  63. return;
  64. }
  65. if (db.get("quotes").size().value() == 0) {
  66. msg.channel.send("I have no quotes!");
  67. return;
  68. }
  69. let quotes = db.get("quotes").reduce((prev, curr, i) => `${prev}[${i+1}] "${minify(curr.message, 10)}" by ${curr.author}\n`, "\n").value();
  70. msg.channel.send(`${msg.author.toString()}I know the following quotes:\n\`\`\`${quotes}\`\`\``);
  71. }
  72. };
  73. module.exports = {
  74. commands: commands,
  75. documentation: documentation
  76. };