Reddit Overwrite Comments ✍️

Edit all comments with randomly selected words/phrases

  1. // ==UserScript==
  2. // @name Reddit Overwrite Comments ✍️
  3. // @author Agreasyforkuser
  4. // @namespace Reddit
  5. // @description Edit all comments with randomly selected words/phrases
  6. // @match https://old.reddit.com/user/*
  7. // @version 1.0
  8. // @icon https://www.redditstatic.com/desktop2x/img/favicon/android-icon-192x192.png
  9. // @run-at document-end
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. // Define a list of phrases here
  14. var words = ["wow", "cool", "nice"];
  15.  
  16. var commentstabpage = /https:\/\/.*\.reddit\.com\/user.*\/comments\/.*/;
  17. if (commentstabpage.test(location.href)) {
  18.  
  19. to_delete = [];
  20. num_user_comments = 0;
  21. deleted = 0;
  22. span = '';
  23. user = '';
  24.  
  25. delete_comment = function (thing_id, from_delete_all) {
  26. try {
  27. var thing = document.querySelector("input[name='thing_id'][value='" + thing_id + "']");
  28. var status = thing.parentNode.querySelector("div.usertext-edit > div.bottom-area > div.usertext-buttons > span.status").innerHTML;
  29. var error = false;
  30. if ((status.indexOf("error") != -1) || (status.indexOf("submitting") != -1)) {
  31. error = true;
  32. } else {
  33. deleted++;
  34. }
  35. if (from_delete_all) {
  36. if (to_delete.length != 0) {
  37. span.innerHTML = "OVERWRITING COMMENT " + (deleted + 1) + " OF " + num_user_comments;
  38. var next_thing_id = to_delete.pop();
  39. setTimeout(overwrite_comment, 2000, next_thing_id, from_delete_all);
  40. } else {
  41. if (num_user_comments - deleted != 0) {
  42. num_user_comments = num_user_comments - deleted;
  43. UpdateDeleteAllSpan();
  44. span.innerHTML = "<span>Failed to overwrite " + num_user_comments + " comments</span><br>" + span.innerHTML;
  45. } else
  46. span.style.display = 'none';
  47. }
  48. } else {
  49. if (error)
  50. alert("Failure");
  51. else
  52. num_user_comments--;
  53. UpdateDeleteAllSpan();
  54. }
  55. return (error ? -1 : 0);
  56. } catch (er) {
  57. alert(er);
  58. if (from_delete_all) location.reload();
  59. return -99;
  60. }
  61. }
  62.  
  63. overwrite_comment = function (thing_id, from_delete_all) {
  64. try {
  65. var edit_form = document.querySelector("input[name='thing_id'][value='" + thing_id + "']").parentNode;
  66. edit_form.querySelector("div.usertext-edit > div.bottom-area > div.usertext-buttons > button.cancel").click();
  67. var edit_btn = edit_form.parentNode.querySelector("ul > li > a.edit-usertext");
  68. if (edit_btn) edit_btn.click();
  69. var edit_textbox = edit_form.querySelector("div.usertext-edit > div > textarea");
  70. var repl_str = '';
  71. var randomIndex = Math.floor(Math.random() * words.length);
  72. edit_textbox.value = words[randomIndex];
  73. edit_form.querySelector("div.usertext-edit > div.bottom-area > div.usertext-buttons > button.save").click();
  74. setTimeout(delete_comment, 2000, thing_id, from_delete_all);
  75. return 0;
  76. } catch (e) {
  77. alert("Error with form: " + e);
  78. return -99;
  79. }
  80. };
  81.  
  82. delete_all = function () {
  83. try {
  84. num_user_comments = 0;
  85. deleted = 0;
  86. to_delete = [];
  87. var comments = document.querySelectorAll("a.author");
  88. for (var i = 0; i < comments.length; i++) {
  89. if (comments[i].innerHTML != user) continue;
  90. var thing_id = comments[i].parentNode.parentNode.querySelector("form.usertext > input[name='thing_id']").value;
  91. if (to_delete.indexOf(thing_id) == -1) {
  92. to_delete.push(thing_id);
  93. num_user_comments++;
  94. }
  95. }
  96. span.innerHTML = "TRYING TO Overwrite COMMENT 1 OF " + num_user_comments;
  97. var next_thing_id = to_delete.pop();
  98. overwrite_comment(next_thing_id, true);
  99. } catch (e) {
  100. alert("YOU ARE MOST LIKELY NOT ON THE COMMENTS TAB! /n/n Error trying to delete all your comments.\nError: " + e + " Stack:" + e.stack);
  101. location.reload()
  102. }
  103. };
  104.  
  105. function add_delete_links(ev) {
  106. user = document.querySelector("span.user > a:not(.login-required)").innerHTML;
  107. if (!user) { return; }
  108. var comments = document.querySelectorAll("a.author");
  109. num_user_comments = 0;
  110. for (var i = 0; i < comments.length; i++) {
  111. if (comments[i].innerHTML != user) continue;
  112. try {
  113. var main_parent = comments[i].parentNode.parentNode;
  114. var thing_id = main_parent.querySelector("form > input[name='thing_id']").value;
  115. var list = main_parent.querySelector("ul.flat-list");
  116. if (list.querySelector("li.secure_delete")) continue;
  117. num_user_comments++;
  118. var addedlink = document.createElement("li");
  119. addedlink.setAttribute('class', 'secure_delete');
  120. var dlink = document.createElement("a");
  121. dlink.setAttribute('class', 'bylink secure_delete');
  122. dlink.setAttribute('onClick', 'javascript:var ret = overwrite_comment("' + thing_id + '", false);');
  123. dlink.setAttribute('href', 'javascript:void(0)');
  124. addedlink.appendChild(dlink);
  125. main_parent.querySelector("ul.flat-list").appendChild(addedlink);
  126. } catch (e) { }
  127. }
  128. span = document.createElement("span");
  129. span.setAttribute('class', 'secure_delete_all');
  130. UpdateDeleteAllSpan();
  131. }
  132.  
  133. deleteConfirm = function () {
  134. if (confirm('Are you sure you want to overwrite all comments with "' + words + '" ?')) {
  135. delete_all();
  136. }
  137. }
  138.  
  139. function UpdateDeleteAllSpan() {
  140. if (num_user_comments) {
  141. var dlink = document.createElement("a");
  142. dlink.setAttribute('class', 'bylink');
  143. dlink.setAttribute('onClick', 'javascript:return deleteConfirm()');
  144. dlink.setAttribute('href', 'javascript:void(0)');
  145. dlink.appendChild(document.createTextNode('OVERWRITE ALL visible comments on this page with "' + words + '"'));
  146. dlink.style.border = 'none';
  147. dlink.style.fontWeight = 'bold';
  148. dlink.style.color = 'white';
  149. span.appendChild(dlink);
  150. span.style.backgroundColor = 'red';
  151. span.style.borderRadius = '20px';
  152. span.style.padding = '5px';
  153. span.style.display = 'inline-table';
  154. var menuarea = document.querySelector("div.menuarea");
  155. var firstChild = menuarea.firstChild;
  156. menuarea.insertBefore(span, firstChild.nextSibling);
  157. } else if (span != null) {
  158. span.style.display = 'none';
  159. }
  160. }
  161.  
  162. add_delete_links();
  163. document.addEventListener("DOMContentLoaded", add_delete_links, false);
  164. } else {
  165. // Place a reminder
  166. var alink = document.createElement('a');
  167. var overviewURL = location.href;
  168. var commentstabURL = overviewURL + 'comments/';
  169. alink.href = commentstabURL;
  170. alink.textContent = 'go to comments-tab to overwrite✍️';
  171. alink.style.color = 'white';
  172. alink.style.backgroundColor = 'black';
  173. alink.style.padding = '5px';
  174. alink.style.fontWeight = 'bold';
  175. alink.style.borderRadius = '20px';
  176. alink.style.display = 'inline-table';
  177. document.querySelector('.menuarea').appendChild(alink);
  178. }