AntiSpam *OLD*

Insta-mutes spammers temporarily

  1. // ==UserScript==
  2. // @name AntiSpam *OLD*
  3. // @description Insta-mutes spammers temporarily
  4. // @include *://www.kongregate.com/games/*/*
  5. // @version 0.0.1.20171113053427
  6. // @namespace https://greasyfork.org/users/32649
  7. // ==/UserScript==
  8.  
  9.  
  10. var interval = setInterval(test, 1000);
  11. var holodeck, dialogue, chatWindow;
  12. var people = new Object(), mutes = new Object(), muteable = false;
  13. var whitelist = new Object(), pwhitelist = new Object();
  14. var limit, time; loadFilter(); loadWhitelist();
  15.  
  16. function test() {
  17. if(unsafeWindow.holodeck && unsafeWindow.holodeck._chat_window._active_room) {
  18. clearInterval(interval);
  19. run();
  20. }
  21. }
  22.  
  23. function run() {
  24. holodeck = unsafeWindow.holodeck;
  25. chatWindow = holodeck._chat_window;
  26. chatWindow.e3ba407c69f1fb1d = chatWindow.joinedRoom;
  27. chatWindow.joinedRoom = function(room) {
  28. this.e3ba407c69f1fb1d(room);
  29. muteable = true;
  30. }
  31. chatWindow.a2b2274f4b0e0a7d = chatWindow.leftRoom;
  32. chatWindow.leftRoom = function(room) {
  33. muteable = false;
  34. this.a2b2274f4b0e0a7d(room);
  35. }
  36. chatWindow.c46229e5ce87be98 = chatWindow.receivedRoomMessage;
  37. chatWindow.receivedRoomMessage = function(event) {
  38. var sender = event.data.user.username;
  39. if(isMuted(sender)) return;
  40. this.c46229e5ce87be98(event);
  41. registerMessage(sender);
  42. }
  43. holodeck.da2eb29e335e589a = holodeck.receivedPrivateMessage;
  44. holodeck.receivedPrivateMessage = function(event) {
  45. var sender = event.data.from;
  46. if(isMuted(sender)) return;
  47. this.da2eb29e335e589a(event);
  48. registerMessage(sender);
  49. }
  50. unsafeWindow.antispam_unmute = function(user) {
  51. if(mutes[user]) {
  52. delete mutes[user];
  53. tell(user+" has been unmuted.");
  54. }
  55. }
  56. holodeck.addChatCommand("sasf", sasf);
  57. holodeck.addChatCommand("dasm", dasm);
  58. holodeck.addChatCommand("dasw", dasw);
  59. holodeck.addChatCommand("aswu", aswu);
  60. holodeck.addChatCommand("ascw", ascw);
  61. setInterval(clearPeople, 900000);
  62. }
  63.  
  64. function registerMessage(user) {
  65. if(!people[user])
  66. people[user] = [];
  67. var currentTime = getTime();
  68. people[user].push(currentTime);
  69. while(true) {
  70. if(people[user][0] && people[user][0]+time < currentTime) {
  71. people[user].shift();
  72. } else {
  73. break;
  74. }
  75. }
  76. if(people[user].length >= limit) {
  77. if(whitelist[user]) return;
  78. tell(user+" has been muted. (<a href=\"javascript:antispam_unmute(\'"+user+"\');void(0);\">Cancel</a>)");
  79. mutes[user] = true;
  80. }
  81. }
  82.  
  83. function isMuted(user) {
  84. return (mutes[user] == true);
  85. }
  86.  
  87. function loadFilter() {
  88. var stuff = GM_getValue("KongregateAntispamFilter", "4 3").split(" ");
  89. limit = parseInt(stuff[0])
  90. time = parseInt(stuff[1])*1000;
  91. }
  92.  
  93. function saveFilter() {
  94. try {
  95. GM_setValue("KongregateAntispamFilter", String(limit+" "+(time/1000)));
  96. } catch(e) {
  97. tell("Error: the filter has been temporary updated, but could not be saved.");
  98. }
  99. }
  100.  
  101. function loadWhitelist() {
  102. var list = GM_getValue("KongregateAntispamFilterWhitelist", "").split("|"), i;
  103. for(i=0;i<list.length;i++) {
  104. pwhitelist[list[i]] = true;
  105. whitelist[list[i]] = true;
  106. }
  107. }
  108.  
  109. function saveWhitelist() {
  110. try {
  111. var str = "", i;
  112. for(i in pwhitelist)
  113. str += i+"|";
  114. if(str.length)
  115. str = str.substr(0,str.length-1);
  116. GM_setValue("KongregateAntispamFilterWhitelist", str);
  117. if(!str.length)
  118. GM_deleteValue("KongregateAntispamFilterWhitelist");
  119. } catch(e) {
  120. tell("Error: the whitelist has been temoprary changed, but has not been saved.");
  121. }
  122. }
  123.  
  124. function getDialogue() {
  125. return holodeck._chat_window._active_room._chat_dialogue;
  126. }
  127.  
  128. function getTime() {
  129. return ((new Date()).getTime());
  130. }
  131.  
  132. function sasf(holodeck, input) {
  133. var usefulParts = /^\/sasf ([0-9]+) ([0-9]+)$/.exec(input);
  134. if(usefulParts) {
  135. limit = parseInt(usefulParts[1]);
  136. time = parseInt(usefulParts[2])*1000;
  137. tell("The filter has been updated.");
  138. setTimeout(saveFilter, 0);
  139. } else {
  140. tell("Incorrect filter syntax.");
  141. }
  142. return false;
  143. }
  144.  
  145. function dasm(holodeck, input) {
  146. people = new Object();
  147. mutes = new Object();
  148. tell("List of mutes dropped.");
  149. return false;
  150. }
  151.  
  152. function aswu(holodeck, input) {
  153. var usefulParts = /^\/aswu (.+?)(\([sp]\))?$/.exec(input);
  154. if(usefulParts) {
  155. var user = usefulParts[1];
  156. var duration = usefulParts[2];
  157. switch(duration) {
  158. case "(p)":
  159. pwhitelist[user] = true;
  160. setTimeout(saveWhitelist, 0);
  161. case "(s)":
  162. whitelist[user] = true;
  163. default:
  164. delete mutes[user];
  165. }
  166. tell(user+" has been whitelisted.");
  167. } else {
  168. tell("Please define which user to whitelist.");
  169. }
  170. return false;
  171. }
  172.  
  173. function ascw(holodeck, input) {
  174. var usefulParts = /^\/ascw (.+?)$/.exec(input);
  175. if(usefulParts) {
  176. var user = usefulParts[1];
  177. delete whitelist[user];
  178. delete pwhitelist[user];
  179. setTimeout(saveWhitelist, 0);
  180. tell(user+" has been de-whitelisted.");
  181. } else {
  182. tell("Please define which user to de-whitelist.");
  183. }
  184. return false;
  185. }
  186.  
  187. function dasw(holodeck, input) {
  188. whitelist = new Object();
  189. pwhitelist = new Object();
  190. setTimeout(saveWhitelist, 0);
  191. tell("Whitelist dropped.");
  192. return false;
  193. }
  194.  
  195.  
  196. function tell(message) {
  197. getDialogue().displayUnsanitizedMessage("Antispam", message, {"class":"whisper received_whisper"}, {"non_user":true});
  198. }
  199.  
  200. function clearPeople() {
  201. var currentTime = getTime();
  202. for(var i in people) {
  203. if(currentTime-people[i][0] > 2*time) {
  204. delete people[i];
  205. }
  206. }
  207. }