Suppression des messages JVC

Supprime vos messages JVC

  1. // ==UserScript==
  2. // @name Suppression des messages JVC
  3. // @namespace RandomAcc
  4. // @description Supprime vos messages JVC
  5. // @include *jeuxvideo.com/sso/settings.php
  6. // @version 0.1
  7. // @grant none
  8. // @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. addGlobalStyle(".hide {display: none!important}")
  15. const $ = window.jQuery;
  16. const username = document.getElementsByClassName("account-pseudo")[0].textContent.toLowerCase(),
  17. item = $('<li><a href="#">Supprimer mes messages</a> <img id="spinner" class="hide" src="https://i.imgur.com/gmhK0rl.gif" alt="Suppression en cours"><span class="hide" id="suppress">Suppression en cours. Messages à supprimer(ils seront supprimés à la fin) : <span class="removecount">0</span> - Messsage parcourus : <span class="totalcount">0</span></span></li>');
  18.  
  19. item.find('a').click(function(e) {
  20. e.preventDefault();
  21.  
  22. window.modal('afficher', {
  23. titre: 'Filtres de suppression',
  24. contenu: `<form>
  25. <div class="form-group">
  26. Supprimer les messages <strong>contenant</strong> au moins un des mots : <input type="text" id="contains"> (séparés par des virgules)
  27. </div>
  28. <div class="form-group">
  29. Supprimer les messages <strong>ne contenant aucun</strong> des mots : <input type="text" id="not-contains"> (séparés par des virgules)
  30. </div>
  31. <hr>
  32. <div class="pull-right">
  33. <button type="button" class="btn btn-default" data-modal="fermer">Annuler</button>
  34. <button id="filter-validate" type="button" class="btn btn-danger" data-modal="fermer">Confirmer la suppression de mes messages</button>
  35. </div>
  36. </form>`
  37. });
  38.  
  39.  
  40. $('#filter-validate').click(function(e) {
  41. $('#spinner').removeClass('hide');
  42. $(".totalcount").text('0')
  43. $('#suppress').removeClass('hide');
  44. $(".removecount").text('0')
  45. const toDelete = [];
  46. const ares = function(nextPage) {
  47. $.get(nextPage, function(data) {
  48. const page = $(data),
  49. messages = page.find('.bloc-message-forum').not('.msg-supprime').not('.msg-supprime-gta').get(),
  50. toDeleteTmp = messages.filter(filterContains)
  51. .filter(filterNotContains)
  52. .map(elt => parseInt(elt.getAttribute('data-id')));
  53. $(".totalcount").text(parseInt(window.jQuery(".totalcount").text()) + messages.length)
  54. Array.prototype.push.apply(toDelete, toDeleteTmp);
  55. $(".removecount").text(toDelete.length)
  56. // niké vo mer lé relecteur jss 1 fou
  57. nextPage = (function() {
  58. const nextPageButtons = page.find('.pagi-suivant-actif');
  59. return nextPageButtons.length > 0 && jvCake(nextPageButtons.get(0).className);
  60. })();
  61.  
  62. if (nextPage !== false) {
  63. ares(nextPage);
  64. }
  65. else {
  66. if (toDelete.length > 0) {
  67. $.ajax({
  68. type: 'POST',
  69. url: '/forums/modal_del_message.php',
  70. data: {
  71. type: 'delete',
  72. tab_message: toDelete,
  73. ajax_timestamp: page.find('#ajax_timestamp_moderation_forum').val(),
  74. ajax_hash: page.find('#ajax_hash_moderation_forum').val()
  75. },
  76. dataType: 'json',
  77. success: function() {
  78. $('#spinner').addClass('hide');
  79. $('#suppress').addClass('hide');
  80. }
  81. });
  82. }
  83. else {
  84. $('#spinner').addClass('hide');
  85. $('#suppress').addClass('hide');
  86. }
  87. }
  88. });
  89. };
  90.  
  91. ares(`//www.jeuxvideo.com/profil/${username}?mode=historique_forum`);
  92. });
  93. });
  94.  
  95. $('.liste-profil-general').append(item);
  96.  
  97.  
  98. // Fonctions utilitaires
  99.  
  100. // Merci à l'auteur de TopicLive
  101. // http://www.jeuxvideo.com/forums/42-1000021-37766371-1-0-1-0-script-topiclive-compatible-respawn.htm
  102. function jvCake(className) {
  103. const base16 = '0A12B34C56D78E9F',
  104. s = className.split(' ')[1];
  105.  
  106. let lien = '';
  107. for (let i = 0; i < s.length; i += 2) {
  108. lien += String.fromCharCode(base16.indexOf(s.charAt(i)) * 16 + base16.indexOf(s.charAt(i + 1)));
  109. }
  110.  
  111. return lien;
  112. }
  113.  
  114. // Filtres de suppression
  115. function filterContains(elt) {
  116. const text = "",
  117. contains = $('#contains').val().trim();
  118. let g = elt.getElementsByClassName("txt-msg text-enrichi-forum ")[0].getElementsByTagName("p")[elt.getElementsByClassName("txt-msg text-enrichi-forum ")[0].getElementsByTagName("p").length - 1].textContent
  119. return filterContainsAux(g, contains);
  120. }
  121.  
  122. function filterNotContains(elt) {
  123. const text = "",
  124. notContains = $('#not-contains').val().trim();
  125. let g = elt.getElementsByClassName("txt-msg text-enrichi-forum ")[0].getElementsByTagName("p")[elt.getElementsByClassName("txt-msg text-enrichi-forum ")[0].getElementsByTagName("p").length - 1].textContent
  126. return filterContainsAux(g, notContains, true);
  127. }
  128.  
  129. function filterContainsAux(haystack, needles, reverse=false) {
  130. needles = needles.split(',').filter(needle => needle.trim());
  131. if (!needles.length) {
  132. return true;
  133. }
  134.  
  135. for (let needle of needles) {
  136. if (haystack.indexOf(needle) !== -1) {
  137. return !reverse;
  138. }
  139. }
  140.  
  141. return reverse;
  142. }
  143.  
  144. function addGlobalStyle(css) {
  145. var head, style;
  146. head = document.getElementsByTagName('head')[0];
  147. if (!head) { return; }
  148. style = document.createElement('style');
  149. style.type = 'text/css';
  150. style.innerHTML = css;
  151. head.appendChild(style);
  152. }
  153.  
  154. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址