Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.52 KB | None | 0 0
  1. // ==UserScript==
  2. // @name GroupmeAlerter
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://*.groupme.com/chats
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. const filterHash = "::>>";
  12.  
  13. const chatNameToFollow = "SPAM 2";
  14. const followingPosters = ["Tomasz Mielewski"];
  15. const followingAll = false; // Debug
  16. const notifyFollowing = true;
  17.  
  18. const showAll = true;
  19. const showNoComments = false;
  20.  
  21. const commentsToCheck = 100;
  22. const checkInterval = 1000;
  23.  
  24. // Error codes
  25. const CHAT_NOT_FOUND = -1;
  26.  
  27. function restoreConsoleLog() {
  28. var i = document.createElement('iframe');
  29. i.style.display='none';
  30. document.body.appendChild(i);
  31. window.console=i.contentWindow.console;
  32. }
  33.  
  34. function getChatElement(name) {
  35. let allChats = document.getElementsByClassName("chat");
  36. for(let i = 0; i < allChats.length; i++) {
  37. if(allChats[i].getElementsByClassName("chat-name")[0].textContent == name)
  38. return allChats[i];
  39. }
  40. return CHAT_NOT_FOUND;
  41. }
  42.  
  43. function getChatMessages(chat) {
  44. return Array.from(chat.getElementsByClassName("message"));
  45. }
  46.  
  47. function getMessagePoster(message) {
  48. return message.getElementsByClassName("nickname")[0].textContent;
  49. }
  50.  
  51. function getMessageBody(message) {
  52. return message.getElementsByClassName("message-text")[0].textContent;
  53. }
  54.  
  55. function compareMessages(a, b) {
  56. if (getMessageBody(a) == getMessageBody(b) &&
  57. getMessagePoster(a) == getMessagePoster(b))
  58. return true;
  59. else
  60. return false;
  61. }
  62.  
  63. function getNewMessagesCount(older, newer) {
  64. let index = newer.length - 1;
  65.  
  66. while(index >= 0) {
  67. if(compareMessages(older[older.length - 1], newer[index])) {
  68. break;
  69. }
  70. index--;
  71. }
  72.  
  73. return newer.length - 1 - index;
  74. }
  75.  
  76. function isFromFollowedPosters(message, posters) {
  77. let poster = getMessagePoster(message);
  78. for(let i = 0; i < posters.length; i++) {
  79. if(poster == posters[i])
  80. return true;
  81. }
  82. return false;
  83. }
  84.  
  85. function sleep(msec) {
  86. return new Promise(res => setTimeout(res, msec));
  87. }
  88.  
  89. function log(message) {
  90. let d = new Date().toLocaleTimeString();
  91. console.log(d + " " + filterHash + " " + message);
  92. }
  93.  
  94. function trimArrayFromEnd(array, n) {
  95. return array.slice(n >= array.length ? 0 : array.length - n);
  96. }
  97.  
  98. async function runDaemonOnChat(chatName) {
  99. let chat = getChatElement(chatName);
  100. let olderComments = trimArrayFromEnd(getChatMessages(chat), commentsToCheck);
  101.  
  102. log("Daemon has started succesfully on chat \"" + chatNameToFollow + "\"");
  103.  
  104. do {
  105. await sleep(checkInterval);
  106.  
  107. let newerComments = trimArrayFromEnd(getChatMessages(chat), commentsToCheck);
  108. let newMessagesCount = getNewMessagesCount(olderComments, newerComments);
  109.  
  110. olderComments = newerComments;
  111.  
  112. if(newMessagesCount != 0) {
  113.  
  114. for(let i = 0; i < newMessagesCount; i++) {
  115. let m = newerComments[newerComments.length - i - 1];
  116. if(followingAll || isFromFollowedPosters(m, followingPosters)) {
  117. log("")
  118. log("/-----------------!!!-----------------\\");
  119. log("| >> " + getMessagePoster(m) + " <<");
  120. log("| " + getMessageBody(m));
  121. log("\\-----------------!!!-----------------/");
  122. log("")
  123.  
  124. if(notifyFollowing && Notification.permission == "granted") {
  125. new Notification(getMessagePoster(m), {body: getMessageBody(m)});
  126. }
  127. }
  128. else if (showAll) {
  129. log(getMessagePoster(m) + ":\t" + getMessageBody(m));
  130. }
  131. }
  132.  
  133. }
  134. else {
  135. if(showNoComments) log("No new comments");
  136. continue;
  137. }
  138. }
  139. while(true);
  140. }
  141.  
  142. (async function() {
  143. 'use strict';
  144.  
  145. await sleep(5000);
  146.  
  147. restoreConsoleLog();
  148.  
  149. while(true) {
  150. try {
  151. await runDaemonOnChat(chatNameToFollow);
  152. }
  153. catch(e) {
  154. log("There has been an error during start/run of the daemon. Restarting...");
  155. log("\t\t\tError caught: \'" + e + "\'");
  156. await sleep(5000);
  157. }
  158. }
  159.  
  160. Notification.requestPermission();
  161.  
  162. })();
  163.  
  164. // TODO: dodać wyjątek do 'TypeError: Cannot read property 'textContent' of undefined'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement