WhatsApp Web Message Spam

Adds a button to repeatedly send the same message in a certain interval.

目前为 2021-11-23 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name WhatsApp Web Message Spam
  3. // @namespace graphen
  4. // @version 1.0.1
  5. // @description Adds a button to repeatedly send the same message in a certain interval.
  6. // @author Graphen
  7. // @license MIT
  8. // @match https://web.whatsapp.com/*
  9. // @icon https://i.imgur.com/C6GToWK.png
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. /* jshint esversion: 6 */
  14. (function() {
  15. 'use strict';
  16.  
  17. // auxiliary function for element insertion into dom tree
  18. function insertAfter(newNode, referenceNode) {
  19. referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
  20. }
  21.  
  22. let repeatingSpamFunction = null;
  23. let message = '';
  24.  
  25. document.addEventListener("click", createSpamButton);
  26. document.addEventListener("keyup", editSpamButton);
  27.  
  28. function getInput() {
  29. var input = document.querySelector('.p3_M1 ._13NKt');
  30. if (!input) {
  31. console.log("WA Spam: 'input' not found.");
  32. return false;
  33. }
  34. else {
  35. return input;
  36. }
  37. }
  38.  
  39. function getSpamButton() {
  40. let spamButton = document.getElementById('spamButton');
  41. if (spamButton) {
  42. return spamButton;
  43. }
  44. else {
  45. console.log("#spamButton not found.");
  46. return false;
  47. }
  48. }
  49.  
  50. function createSpamButton() {
  51. if (getSpamButton()) {
  52. console.log("WA Spam: #spamButton already present.");
  53. return;
  54. }
  55. let composeBar = document.querySelector('._1SEwr');
  56. if (!composeBar) {
  57. console.log("WA Spam: composeBar not found.");
  58. return;
  59. }
  60.  
  61. let spamButton = document.createElement('button');
  62. spamButton.setAttribute("id", "spamButton");
  63. spamButton.innerHTML = 'SPAM';
  64. spamButton.style.fontSize = '100%';
  65. spamButton.style.padding = '10px 0';
  66. spamButton.style.margin = '0px 3px 5px 3px';
  67. //insertAfter(spamButton, composeBar.lastChild.previousSibling);
  68. insertAfter(spamButton, composeBar);
  69.  
  70. editSpamButton();
  71. }
  72.  
  73. function editSpamButton() {
  74. let spamButton = getSpamButton();
  75. let input = getInput();
  76.  
  77. if (input.innerText.trim() === '' && message === '') {
  78. spamButton.style.cursor = 'not-allowed';
  79. spamButton.style.color = '#D3D3D3';
  80. spamButton.onclick = void(0);
  81. } else {
  82. spamButton.style.cursor = 'pointer';
  83. spamButton.style.color = '#039be5';
  84. spamButton.onclick = function() {
  85. doSpam(this);
  86. };
  87. }
  88. }
  89.  
  90. function doSpam(spamButton) {
  91. let input = getInput();
  92. if (spamButton.innerHTML === 'SPAM') {
  93. if (input.innerText === '') {
  94. window.alert('Please enter a text to be spammed before using the spam button.');
  95. return;
  96. }
  97. let interval = 1000 * parseInt(prompt('Please enter spam-interval in seconds:', '3'));
  98. if (!interval) {
  99. spamButton.innerHTML = 'SPAM';
  100. console.log('WA Spam: Interval input cancelled.');
  101. return;
  102. }
  103. message = input.innerHTML;
  104. spamButton.innerHTML = 'STOP';
  105. sendMessage(); // start immediately
  106. console.log("started spamming");
  107. repeatingSpamFunction = window.setInterval(function(){
  108. console.log("started repeated spamming");
  109. sendMessage();
  110. }, interval);
  111. } else {
  112. window.clearInterval(repeatingSpamFunction);
  113. message= '';
  114. spamButton.innerHTML = 'SPAM';
  115. }
  116. editSpamButton();
  117. }
  118.  
  119. function sendMessage() {
  120. let input = getInput();
  121. let evt = new Event('input', {
  122. bubbles: true
  123. });
  124. input.innerHTML = message;
  125. input.dispatchEvent(evt);
  126.  
  127. document.getElementsByClassName('_4sWnG')[0].click(); // click send button
  128. }
  129. })();