Hide U2 Blacklist User

Hide blacklist users' words

  1. // ==UserScript==
  2. // @name Hide U2 Blacklist User
  3. // @namespace https://xsky123.com
  4. // @version 3.3
  5. // @description Hide blacklist users' words
  6. // @author XSky123
  7. // @supportURL https://greasyfork.org/zh-CN/scripts/376316
  8. // @license WTFPL
  9. // @match https://u2.dmhy.org
  10. // @match https://u2.dmhy.org/*
  11. // @match http://u2.dmhy.org
  12. // @match http://u2.dmhy.org/*
  13. // @noframes
  14. // @grant none
  15. // ==/UserScript==
  16.  
  17. (function() {
  18. 'use strict';
  19.  
  20. // GLOBAL SETTINGS
  21. // 1. Disable async in ajax
  22. $.ajaxSetup({
  23. async : false
  24. });
  25.  
  26. // 2. Set empty blacklist
  27. var blacklist = [];
  28. var URL_ = window.location.href;
  29.  
  30. function get_date() {
  31. var now = new Date();
  32. var year = now.getFullYear();
  33. var month = now.getMonth() + 1;
  34. var day = now.getDate();
  35. var hour = now.getHours();
  36. var minute = now.getMinutes();
  37. var second = now.getSeconds();
  38. return `${year}-${month < 10 ? "0"+month : month}-${day < 10 ? "0"+day : day} ${hour < 10 ? "0"+hour : hour}:${minute < 10 ? "0"+minute : minute}:${second < 10 ? "0"+second : second}`;
  39. }
  40.  
  41.  
  42. // Step 1: Fetch blacklist from localStorage
  43. function init_blacklist(){
  44. if(!localStorage.getItem('u2_blacklist')){ // not storaged
  45. get_blacklist();
  46. }else{
  47. // check refresh
  48. if(localStorage.getItem('u2_blacklist_update_at')){
  49. var now = get_date();
  50. var last_update_at = new Date(localStorage.getItem('u2_blacklist_update_at'));
  51. if(now - last_update_at > 24 * 3600 * 1000){ // if over 1 day fetch new
  52. get_blacklist();
  53. }else{ // else use local data
  54. blacklist = JSON.parse(localStorage.getItem('u2_blacklist'));
  55. }
  56. }else{
  57. get_blacklist();
  58. }
  59. }
  60. if(URL_.search("friends") !== -1){ // if visit friends page, update.
  61. get_blacklist();
  62. }
  63. }
  64.  
  65.  
  66. function get_blacklist(){
  67. blacklist = fetch_blacklist();
  68. localStorage.setItem('u2_blacklist', JSON.stringify(blacklist));
  69. localStorage.setItem('u2_blacklist_update_at', get_date());
  70. console.log("[Hide U2 Black] Blacklist has been refreshed");
  71. }
  72.  
  73.  
  74. function fetch_blacklist(){
  75. var black_list = [];
  76. var friend_page = "";
  77. var all_blocked = [];
  78. var finish_flag = 0;
  79. $.get("https://u2.dmhy.org/friends.php", function(data, status){
  80. // alert("Data: " + data + "\nStatus: " + status);
  81. if(status === "success"){
  82. friend_page = data;
  83. all_blocked = friend_page.match(/type=block.*?ltr'>(.*?)<\/bdo/g);
  84. all_blocked.forEach(function(each){
  85. black_list.push(each.match(/targetid=(.*?)"/)[1]);
  86. });
  87. finish_flag = 1;
  88. }else{
  89. throw new Error("[Hide U2 Black] Unable to access friends page.");
  90. }
  91. });
  92. return black_list;
  93.  
  94. }
  95.  
  96.  
  97.  
  98.  
  99. // Step 2.1: Hide MotherFxxker's words in shoutbox
  100. function hide_shoutbox_dirty_words(){
  101. var shoutbox = document.getElementsByTagName('iframe')[0];
  102. if(shoutbox.contentWindow.document.getElementsByTagName("head")[0].innerHTML === "")
  103. ;
  104. else{
  105. var shoutrow = shoutbox.contentWindow.document.getElementsByClassName("shoutrow");
  106. var shoutrows = shoutrow[0].getElementsByTagName("div");
  107. var uid;
  108. var i;
  109. var count = 0;
  110. for(i=0;i<shoutrows.length;i++)
  111. {
  112. var each = shoutrows[i];
  113.  
  114. uid = each.innerHTML.match(/sbat\((.*?)\)/);
  115. if(!uid)
  116. continue;
  117.  
  118. if(blacklist.indexOf(uid[1]) !== -1){ // find blocked user
  119. each.innerHTML = each.innerHTML.substring(0,50) +
  120. '[<s>引</s>][@]*****|'+
  121. '<b>黑名单用户</b>'+
  122. ' <span style="word-break: break-all; word-wrap: break-word;"><bdo dir="ltr">'+
  123. '<i>已屏蔽</i>'+
  124. '</bdo></span>';
  125. count++;
  126. }
  127. }
  128. if (count){
  129. console.log("[Hide U2 Black] Blocked " + count + (count > 1 ? " messages" : " message")
  130. + " in shoutbox.");
  131. }
  132. }
  133. }
  134.  
  135. // Step 2.2 Hide MotherFxxker's words in forum
  136. function hide_forum_dirty_posts(){
  137. var uid;
  138. var i;
  139. var each;
  140. var count = 0;
  141. var method = "forum";
  142. var content_blocked = '<table class="main-inner" border="1" cellspacing="0" cellpadding="5">' +
  143. '<tbody><tr><td class="rowfollow" width="150" valign="top" align="left" style="padding: 0px">' +
  144. '<img src="//u2.dmhy.org/pic/default_avatar.png" alt="avatar" width="150px"></td>' +
  145. '<td class="rowfollow" valign="top"><div style="background-color:#AEAEAE ; border:1px solid #949494; width:95%; padding:8px">' +
  146. '<strong>[已屏蔽]</strong>' +
  147. '<br><br>' +
  148. '本层内容为您黑名单中用户发布,已由' +
  149. '<a href="https://greasyfork.org/zh-CN/scripts/376316-hide-u2-blacklist-user">' +
  150. '<b> Hide U2 Blacklist User 脚本 </b>' +
  151. '</a>屏蔽。您也可以';
  152.  
  153. var all_rows = document.querySelectorAll('table[id^=pid]');
  154. if(all_rows.length === 0){
  155. all_rows = document.querySelectorAll('table[id^=cid]'); // if no pid try cid (torrent comment)
  156. method = "torrent";
  157. }
  158.  
  159. if (method === "forum"){
  160. for(i=0;i<all_rows.length;i++) {
  161. each = all_rows[i];
  162.  
  163. uid = each.querySelector("a[class$=_Name]").href.match(/id=(\d+)/)[1];
  164. if(blacklist.indexOf(uid) !== -1) { // find blocked user
  165. // hide username(user group)
  166. var row_data_elem = each.querySelector("td");
  167. var re = /.*href=\"(.*)\">#(\d+).*id=(\d+).*?ltr\">(.*?)<\/bdo.*time>(.*)<\/time.*/g;
  168. var result = re.exec(row_data_elem.innerHTML);
  169. var username_td_html = `<a href="${result[1]}">#${result[2]}</a>&nbsp;&nbsp;<span class="nowrap"><a href="userdetails.php?id=${result[3]}" class="User_Name"><b><bdo dir="ltr">${result[4]}</bdo></b></a> <i>(已屏蔽用户)</i>&nbsp;&nbsp;<time>${result[5]}</time>`;
  170. row_data_elem.innerHTML = username_td_html;
  171. // do replace
  172. var origin_text = each.parentElement.nextElementSibling.querySelector(".post-body bdo").innerText;
  173. each.parentElement.nextElementSibling.innerHTML = `${content_blocked}<u title="${origin_text}">偷看一眼|´-\`)チラッ</u></div></td></tr></tbody></table>`;
  174. count++;
  175. }
  176. }
  177. }else if (method === "torrent"){
  178. for(i=0;i<all_rows.length;i++) {
  179. each = all_rows[i];
  180.  
  181. uid = each.querySelector("a[class$=_Name]").href.match(/id=(\d+)/)[1];
  182. if(blacklist.indexOf(uid) !== -1) { // find blocked user
  183. // hide username(user group)
  184. var span_ = each.querySelector('span');
  185. span_.innerHTML = "<strong>黑名单用户</strong>";
  186. span_.style.color = "";
  187. span_.nextSibling.remove()
  188.  
  189. // replace avatar and content
  190. each.parentElement.nextElementSibling.innerHTML = content_blocked;
  191. count++;
  192. }
  193. }
  194. }
  195. if(count){
  196. console.log("[Hide U2 Black] Blocked " + count + (count > 1 ? " posts." : " post."));
  197. }
  198. }
  199.  
  200. window.addEventListener("load", init, false);
  201. init_blacklist();
  202.  
  203. if(URL_.search("forums") !== -1 || URL_.search("/details.php")) {
  204. hide_forum_dirty_posts();
  205. }
  206.  
  207. function init(){
  208. document.getElementsByTagName('iframe')[0].onload = function () {
  209. hide_shoutbox_dirty_words()
  210. };
  211. hide_shoutbox_dirty_words();
  212. }
  213. })();