Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. const Discord = require('discord.js');
  2. const client = new Discord.Client();
  3.  
  4. client.on('message', interpretMessage);
  5.  
  6. secretToken = "Nice try Kyle";
  7. client.login(secretToken).catch(console.log);
  8.  
  9. function interpretMessage(receivedMessage)
  10. {
  11. try
  12. {
  13. content = receivedMessage.content;
  14. if (receivedMessage.author != client.user && content.includes("@"))
  15. {
  16. console.log(`Interpreting message "${content}"`);
  17. potentialPings = content.match(/@[^@#:]*(?=\s+|$)/g);
  18. console.log(potentialPings);
  19. guildMembers = receivedMessage.guild.members.array();
  20. originalMentionedUsers = receivedMessage.mentions;
  21.  
  22. usersToMention = [];
  23. messageToPost = "";
  24. for (let ping of potentialPings)
  25. {
  26. for (let member of guildMembers)
  27. {
  28. regexPattern = getRegExpFromNickname(member.displayName)
  29.  
  30. if(regexPattern)
  31. {
  32. pingWithoutAtSymbol = ping.substring(1)
  33. execResults = regexPattern.exec(pingWithoutAtSymbol)
  34. if(execResults && execResults[0] == pingWithoutAtSymbol && !(member.user in originalMentionedUsers) && !(member in usersToMention))
  35. {
  36. usersToMention.push(member);
  37. }
  38. }
  39. }
  40. }
  41.  
  42. messageToPost = usersToMention.join(" ");
  43. console.log(`Posting "${messageToPost}"`);
  44. if(messageToPost)
  45. {
  46. receivedMessage.channel.send(messageToPost);
  47. }
  48. else
  49. {
  50. console.log("Empty message");
  51. }
  52. }
  53. }
  54. catch(e)
  55. {
  56. console.log(e);
  57. }
  58. }
  59. // //Returns a RegExp object of nickname if it can be represented as a regex, otherwise, returns null.
  60. function getRegExpFromNickname(nickname)
  61. {
  62. //Found on stackoverflow. Apparently javascript doesn't have a .count() method.
  63. slashesCount = (nickname.match(/\//g) || []).length;
  64. if (nickname[0] == "/" && slashesCount >= 2) //We can't just check the front and back of the name, because there might be flags included
  65. {
  66. lastSlashIndex = nickname.lastIndexOf("/");
  67.  
  68. regexString = nickname.substring(1, lastSlashIndex);
  69.  
  70. flags = "";
  71. if (lastSlashIndex != nickname.length - 1)
  72. {
  73. flags = nickname.substring(lastSlashIndex + 1);
  74. }
  75.  
  76. regexPattern = null;
  77. try
  78. {
  79. regexPattern = new RegExp(regexString, flags); //Attempts to build a regex. If it succeeds, the name must be a regex.
  80. return regexPattern;
  81. }
  82. catch (e)
  83. {
  84. return null;
  85. }
  86. }
  87.  
  88. return null;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement