【工具】-屏蔽烦你的id插件
版主: huangchong
-
- 小有名气
- 帖子: 34
- 注册时间: 7月 25, 2022, 3:23 am
Re: 【工具】-屏蔽烦你的id插件
Nice, 大拇指
tmbb2010 写了: ↑9月 6, 2022, 3:52 am ##########我来修正吧,用于屏蔽主题 2022/09/06 ########
(Huangchong 编辑)https://www.tampermonkey.net/
- tampermonkey打开dashboard
已知问题:
- 点+号,新建脚本,copy&paste
- 在supernova主题下无效
如果发现bug想要俺修,请确认是最新的脚本.
- 未登录无效
代码: 全选
// ==UserScript== // @name NewMitbbs-bot-blocker // @namespace http://tampermonkey.net/ // @version 0.2 // @description Manages and blocks bot generated content. Shamelessly modified from chunjuan's script at https://greasyfork.org/en/scripts/29195-mitbbs-bot-blocker/code, which was inspired by Smalltalk80's original GM script, http://userscripts-mirror.org/scripts/review/78633 // @author Sagittarius A* // @match http://newmitbbs.com/* // @match https://newmitbbs.com/* // @grant GM_addStyle // @run-at document-idle // ==/UserScript== // debugger; (function() { 'use strict'; var storageKey = 'new.mitbbs.blocklist'; function getBlocklist() { var blockList = localStorage.getItem(storageKey); if (blockList === null) { setBlocklist([]); blockList = localStorage.getItem(storageKey); } try { blockList = JSON.parse(blockList); } catch (error) { blockList = []; setBlocklist(blockList); } blockList = Array.isArray(blockList) ? blockList : []; return blockList; } function setBlocklist(idNameList) { // remove duplicate items // todo: babel output for this one doesn't really work, have to revert back to old fashion way // idNameList = [...new Set(idNameList)] var uniqueidNameList = idNameList.filter(function (elem, index, self) { return index === self.indexOf(elem); }); uniqueidNameList = uniqueidNameList.sort(function (a, b) { // defer from localeCompare for better browser support if (a.toLowerCase() < b.toLowerCase()) return -1; if (a.toLowerCase() > b.toLowerCase()) return 1; return 0; }); localStorage.setItem(storageKey, JSON.stringify(uniqueidNameList)); document.getElementById('blockListInput').value = uniqueidNameList; } function getBlockFlag() { var blockFlag = localStorage.getItem(storageKey + '.flag'); if (blockFlag === null) { setBlockFlag(0); blockFlag = localStorage.getItem(storageKey + '.flag'); } // js, just being js return parseInt(blockFlag); } function setBlockFlag(flag) { localStorage.setItem(storageKey + '.flag', flag); } function changePostVisibility() { var blockList = getBlocklist(); var flag = getBlockFlag(); // if list is not empty var counter = 0; if (blockList) { var taolunDiv = document.querySelector('div.forumbg:not(.announcement)'); // yeah yeah yeah magic number, whatever // this will miss the first one though, nice try langfang coder var userIDtdNodeList = taolunDiv.querySelectorAll('li.row'); userIDtdNodeList.forEach(function (td) { // damn, now i miss jquery/zepto var id = td.querySelector('div.responsive-show').querySelector('span.username').textContent; // reset all reply to visible. This is a hack-ish method to fix content not being displayed after userID has been removed from blocklist. // TODO: maybe in the near future, we should keep a local copy of blocklist so that we can compare the changes and show/hide content intelligently, maybe td.style.display = ''; // yeah, nested if statements if (blockList.indexOf(id) > -1) { if (flag) { td.style.display = 'none'; counter += 1; } else { td.style.display = ''; } } }); counter = flag ? counter : 0; document.getElementById('blockCounter').innerHTML = counter; } } function changeReplyVisibility() { // now we on individual post page var blockList = getBlocklist(); var flag = getBlockFlag(); var counter = 0; var sideBarBG = document.querySelectorAll('div.post.has-profile'); sideBarBG.forEach(function (reply) { // var post = reply.parentElement.parentElement.parentElement.parentElement.parentElement; var userID = reply.querySelector('span.username').textContent; // another magic number! var userMenu = reply.querySelector('strong'); var hasButton = userMenu.querySelector('span.button') !== null; if (!hasButton) { var blockButton = document.createElement('span'); blockButton.setAttribute('class', 'button'); blockButton.innerHTML = ' <button class="addToBlock" title="' + userID + '">屏蔽!</button>'; userMenu.appendChild(blockButton); } if(!flag) userMenu.querySelector('span.button').style.display = 'none'; else userMenu.querySelector('span.button').style.display = ''; // reset all reply to visible. This is a hack-ish method to fix content not being displayed after userID has been removed from blocklist. // TODO: maybe in the near future, we should keep a local copy of blocklist so that we can compare the changes and show/hide content intelligently, maybe reply.style.display = ''; if (blockList.indexOf(userID) > -1) { if (flag) { reply.style.display = 'none'; counter += 1; } else { reply.style.display = ''; } } counter = flag ? counter : 0; document.getElementById('blockCounter').innerHTML = counter; }); var allBlockButton = document.querySelectorAll('.addToBlock'); Array.from(allBlockButton).forEach(function (button) { var userID = button.getAttribute('title'); button.addEventListener('click', function () { var yesBlock = confirm('Block ' + userID + ' ?'); if (yesBlock) { blockList.push(userID); setBlocklist(blockList); document.getElementById('blockListInput').value = getBlocklist().join(); // toggleBlockedContent(); // copy & paste from above code to refresh the page with newly added id sideBarBG.forEach(function (reply) { // var post = reply.parentElement.parentElement.parentElement.parentElement.parentElement; var userID = reply.querySelector('span.username').textContent; // another magic number! var userMenu = reply.querySelector('strong'); var hasButton = userMenu.querySelector('span.button') !== null; if (!hasButton) { var blockButton = document.createElement('span'); blockButton.setAttribute('class', 'button'); blockButton.innerHTML = ' <button class="addToBlock" title="' + userID + '">屏蔽!</button>'; userMenu.appendChild(blockButton); } if(!flag) userMenu.querySelector('span.button').style.display = 'none'; else userMenu.querySelector('span.button').style.display = ''; // reset all reply to visible. This is a hack-ish method to fix content not being displayed after userID has been removed from blocklist. // TODO: maybe in the near future, we should keep a local copy of blocklist so that we can compare the changes and show/hide content intelligently, maybe reply.style.display = ''; if (blockList.indexOf(userID) > -1) { if (flag) { reply.style.display = 'none'; counter += 1; } else { reply.style.display = ''; } } counter = flag ? counter : 0; document.getElementById('blockCounter').innerHTML = counter; }); } }); }); } function toggleBlockedContent() { document.getElementById('isBlocking').checked ? setBlockFlag(1) : setBlockFlag(0); var pageType = locationGuesser(); switch (pageType) { case 1: changeReplyVisibility(); break; case -1: changePostVisibility(); break; } } function locationGuesser() { var pageType = void 0; var url = window.location.href; if (url.indexOf('viewtopic') > -1) { pageType = 1; } else if (url.indexOf('viewforum') > -1) { pageType = -1; } else { pageType = 0; } return pageType; } // callback for when clicking 黑名单 button function changeBlockListVisibility() { var notVisible = document.getElementById('blockListPop').style.display === 'none'; if (notVisible) { // show block list pop up document.getElementById('blockListInput').value = getBlocklist().join(); document.getElementById('blockListPop').style.display = ''; } else { // close block list pop up document.getElementById('blockListPop').style.display = 'none'; // update blocklist when closing the pop up updateBlockList(); } } function updateBlockList() { var newBlockList = document.getElementById('blockListInput').value; // remove line break, space, trailing comma newBlockList = newBlockList.replace(/(\r\n|\n|\r)/gm, '').replace(/\s/g, '').replace(/,+$/, ''); newBlockList = newBlockList.split(','); setBlocklist(newBlockList); // re-filter existing content toggleBlockedContent(); } function hideBlockList() { document.getElementById('blockListPop').style.display = 'none'; } function prepPage() { var flag = getBlockFlag(); getBlocklist(); if (flag) { document.getElementById('isBlocking').checked = true; toggleBlockedContent(); } } function pageOnLoad() { // build blocker control gui var blockerDiv = document.createElement('div'); blockerDiv.innerHTML = '<button id="showBlocklist" class="button">黑名单</button><input type="checkbox" id="isBlocking" /><span id="blockCounter" title="Currently Blocked"></span>'; blockerDiv.style.cssText = 'position:fixed; bottom:2em; right:0.5em; width:9em; padding:0.5em; border-radius:0.25em; background-color:#D7EAF9; box-shadow:2px 2px 4px 0px rgba(0,0,0,0.5); text-align:center; cursor:pointer;'; document.body.appendChild(blockerDiv); document.getElementById('showBlocklist').addEventListener('click', changeBlockListVisibility); document.getElementById('blockCounter').style.cssText = 'padding:0 4px; font-weight:bold'; document.getElementById('isBlocking').addEventListener('change', toggleBlockedContent); // block list var blockListDiv = document.createElement('div'); blockListDiv.setAttribute('id', 'blockListPop'); blockListDiv.innerHTML = '<span>修改ID,用逗号分隔,大小写敏感!</span>' + '<br/>' + '<textarea rows="10" cols="40" id="blockListInput" style="background-color:orange;color:black;font-size:10pt;"></textarea>' + '<br/>' + '<button id="updateBlockList">Update</button><span style="width:2em"></span><button id="closePop">Close</button>'; blockListDiv.style.cssText = 'position:fixed; bottom:5.3em; right:0.5em; padding:0.5em; border-radius:0.25em; background-color:#D7EAF9; box-shadow:2px 2px 4px 0px rgba(0,0,0,0.5); text-align:center; display:none'; document.body.appendChild(blockListDiv); document.getElementById('updateBlockList').addEventListener('click', updateBlockList); document.getElementById('closePop').addEventListener('click', hideBlockList); prepPage(); } function ready(fn) { if (document.readyState !== 'loading') { fn(); } else { document.addEventListener('DOMContentLoaded', fn); } } ready(pageOnLoad); })();
-
- 论坛精英
- 帖子: 5300
- 注册时间: 8月 21, 2022, 2:20 pm
Re: 【工具】-屏蔽烦你的id插件
-
- 论坛精英
- 帖子: 5927
- 注册时间: 7月 29, 2022, 12:50 am
Re: 【工具】-屏蔽烦你的id插件
iPad上搞不定(ヅ) 写了: ↑10月 23, 2022, 4:06 pm 你试试呗,不是可以装tampermonkey吗
https://apps.apple.com/us/app/tampermon ... 0089?mt=12
买买提纪检委书记
-
- 正式写手
- 帖子: 176
- 注册时间: 7月 24, 2022, 3:37 pm
Re: 【工具】-屏蔽烦你的id插件
这个是干嘛的?和老站的屏蔽自己不想看的id的帖子有关系吗?
supermassive 写了: ↑8月 9, 2022, 2:11 pm (Huangchong 编辑)https://www.tampermonkey.net/
从春卷老师的脚本改的,使用方法:
- tampermonkey打开dashboard
已知问题:
- 点+号,新建脚本,copy&paste
- 在proflat主题下无效
如果发现bug想要俺修,请确认是最新的脚本.
- 未登录无效
update:
10/17/22, 修复版面上失效的问题
代码: 全选
// ==UserScript== // @name NewMitbbs-bot-blocker // @namespace http://tampermonkey.net/ // @version 0.1 // @description Manages and blocks bot generated content. Shamelessly modified from chunjuan's script at https://greasyfork.org/en/scripts/29195-mitbbs-bot-blocker/code, which was inspired by Smalltalk80's original GM script, http://userscripts-mirror.org/scripts/review/78633 // @author Sagittarius A* // @match http://newmitbbs.com/* // @match https://newmitbbs.com/* // @grant GM_addStyle // @run-at document-idle // ==/UserScript== // debugger; (function() { 'use strict'; var storageKey = 'new.mitbbs.blocklist'; function getBlocklist() { var blockList = localStorage.getItem(storageKey); if (blockList === null) { setBlocklist([]); blockList = localStorage.getItem(storageKey); } try { blockList = JSON.parse(blockList); } catch (error) { blockList = []; setBlocklist(blockList); } blockList = Array.isArray(blockList) ? blockList : []; return blockList; } function setBlocklist(idNameList) { // remove duplicate items // todo: babel output for this one doesn't really work, have to revert back to old fashion way // idNameList = [...new Set(idNameList)] var uniqueidNameList = idNameList.filter(function (elem, index, self) { return index === self.indexOf(elem); }); uniqueidNameList = uniqueidNameList.sort(function (a, b) { // defer from localeCompare for better browser support if (a.toLowerCase() < b.toLowerCase()) return -1; if (a.toLowerCase() > b.toLowerCase()) return 1; return 0; }); localStorage.setItem(storageKey, JSON.stringify(uniqueidNameList)); document.getElementById('blockListInput').value = uniqueidNameList; } function getBlockFlag() { var blockFlag = localStorage.getItem(storageKey + '.flag'); if (blockFlag === null) { setBlockFlag(0); blockFlag = localStorage.getItem(storageKey + '.flag'); } // js, just being js return parseInt(blockFlag); } function setBlockFlag(flag) { localStorage.setItem(storageKey + '.flag', flag); } function changePostVisibility() { var blockList = getBlocklist(); var flag = getBlockFlag(); // if list is not empty var counter = 0; if (blockList) { var taolunDiv = document.querySelector('div.forumbg:not(.announcement)'); if(taolunDiv == null) taolunDiv = document.querySelector('div.sn-cat-header:not(.announcement)'); // yeah yeah yeah magic number, whatever // this will miss the first one though, nice try langfang coder var userIDtdNodeList = taolunDiv.querySelectorAll('li.row'); console.log(userIDtdNodeList.length); userIDtdNodeList.forEach(function (td) { // damn, now i miss jquery/zepto var id; if(td.querySelector('div.topic-poster') != null){ id = td.querySelector('div.topic-poster').querySelector('span.username').textContent; console.log("debug 3"); }else if(td.querySelector('div.responsive-show:not([style*="display:none"]') != null){ id = td.querySelector('div.responsive-show:not([style*="display:none"]').querySelector('span.username').textContent; console.log("debug 2"); }else{ console.log("couldn't find td"); } // reset all reply to visible. This is a hack-ish method to fix content not being displayed after userID has been removed from blocklist. // TODO: maybe in the near future, we should keep a local copy of blocklist so that we can compare the changes and show/hide content intelligently, maybe td.style.display = ''; // yeah, nested if statements console.log("op's id is " + id); if (blockList.indexOf(id) > -1) { if (flag) { td.style.display = 'none'; console.log(id + "'s post has been set as invisible"); counter += 1; } else { td.style.display = ''; } } }); counter = flag ? counter : 0; document.getElementById('blockCounter').innerHTML = counter; } } function changeReplyVisibility() { // now we on individual post page var blockList = getBlocklist(); var flag = getBlockFlag(); var counter = 0; var sideBarBG = document.querySelectorAll('div.post.has-profile'); sideBarBG.forEach(function (reply) { // var post = reply.parentElement.parentElement.parentElement.parentElement.parentElement; var userID = reply.querySelector('span.username').textContent; // another magic number! var userMenu = reply.querySelector('strong'); var hasButton = userMenu.querySelector('span.button') !== null; if (!hasButton) { var blockButton = document.createElement('span'); blockButton.setAttribute('class', 'button'); blockButton.innerHTML = ' <button class="addToBlock" title="' + userID + '">屏蔽!</button>'; userMenu.appendChild(blockButton); } if(!flag) userMenu.querySelector('span.button').style.display = 'none'; else userMenu.querySelector('span.button').style.display = ''; // reset all reply to visible. This is a hack-ish method to fix content not being displayed after userID has been removed from blocklist. // TODO: maybe in the near future, we should keep a local copy of blocklist so that we can compare the changes and show/hide content intelligently, maybe reply.style.display = ''; if (blockList.indexOf(userID) > -1) { if (flag) { reply.style.display = 'none'; counter += 1; } else { reply.style.display = ''; } } counter = flag ? counter : 0; document.getElementById('blockCounter').innerHTML = counter; }); var allBlockButton = document.querySelectorAll('.addToBlock'); Array.from(allBlockButton).forEach(function (button) { var userID = button.getAttribute('title'); button.addEventListener('click', function () { var yesBlock = confirm('Block ' + userID + ' ?'); if (yesBlock) { blockList.push(userID); setBlocklist(blockList); document.getElementById('blockListInput').value = getBlocklist().join(); // toggleBlockedContent(); // copy & paste from above code to refresh the page with newly added id sideBarBG.forEach(function (reply) { // var post = reply.parentElement.parentElement.parentElement.parentElement.parentElement; var userID = reply.querySelector('span.username').textContent; // another magic number! var userMenu = reply.querySelector('strong'); var hasButton = userMenu.querySelector('span.button') !== null; if (!hasButton) { var blockButton = document.createElement('span'); blockButton.setAttribute('class', 'button'); blockButton.innerHTML = ' <button class="addToBlock" title="' + userID + '">屏蔽!</button>'; userMenu.appendChild(blockButton); } if(!flag) userMenu.querySelector('span.button').style.display = 'none'; else userMenu.querySelector('span.button').style.display = ''; // reset all reply to visible. This is a hack-ish method to fix content not being displayed after userID has been removed from blocklist. // TODO: maybe in the near future, we should keep a local copy of blocklist so that we can compare the changes and show/hide content intelligently, maybe reply.style.display = ''; if (blockList.indexOf(userID) > -1) { if (flag) { reply.style.display = 'none'; counter += 1; } else { reply.style.display = ''; } } counter = flag ? counter : 0; document.getElementById('blockCounter').innerHTML = counter; }); } }); }); } function toggleBlockedContent() { document.getElementById('isBlocking').checked ? setBlockFlag(1) : setBlockFlag(0); var pageType = locationGuesser(); switch (pageType) { case 1: changeReplyVisibility(); break; case -1: changePostVisibility(); break; } } function locationGuesser() { var pageType = void 0; var url = window.location.href; if (url.indexOf('viewtopic') > -1) { pageType = 1; } else if (url.indexOf('viewforum') > -1) { pageType = -1; } else { pageType = 0; } return pageType; } // callback for when clicking 黑名单 button function changeBlockListVisibility() { var notVisible = document.getElementById('blockListPop').style.display === 'none'; if (notVisible) { // show block list pop up document.getElementById('blockListInput').value = getBlocklist().join(); document.getElementById('blockListPop').style.display = ''; } else { // close block list pop up document.getElementById('blockListPop').style.display = 'none'; // update blocklist when closing the pop up updateBlockList(); } } function updateBlockList() { var newBlockList = document.getElementById('blockListInput').value; // remove line break, space, trailing comma newBlockList = newBlockList.replace(/(\r\n|\n|\r)/gm, '').replace(/\s/g, '').replace(/,+$/, ''); newBlockList = newBlockList.split(','); setBlocklist(newBlockList); // re-filter existing content toggleBlockedContent(); } function hideBlockList() { document.getElementById('blockListPop').style.display = 'none'; } function prepPage() { var flag = getBlockFlag(); getBlocklist(); if (flag) { document.getElementById('isBlocking').checked = true; toggleBlockedContent(); } } function pageOnLoad() { // build blocker control gui var blockerDiv = document.createElement('div'); blockerDiv.innerHTML = '<button id="showBlocklist" class="button">黑名单</button><input type="checkbox" id="isBlocking" /><span id="blockCounter" title="Currently Blocked"></span>'; blockerDiv.style.cssText = 'position:fixed; bottom:2em; right:0.5em; width:9em; padding:0.5em; border-radius:0.25em; background-color:#D7EAF9; box-shadow:2px 2px 4px 0px rgba(0,0,0,0.5); text-align:center; cursor:pointer;'; document.body.appendChild(blockerDiv); document.getElementById('showBlocklist').addEventListener('click', changeBlockListVisibility); document.getElementById('blockCounter').style.cssText = 'padding:0 4px; font-weight:bold'; document.getElementById('isBlocking').addEventListener('change', toggleBlockedContent); // block list var blockListDiv = document.createElement('div'); blockListDiv.setAttribute('id', 'blockListPop'); blockListDiv.innerHTML = '<span>修改ID,用逗号分隔,大小写敏感!</span>' + '<br/>' + '<textarea rows="10" cols="40" id="blockListInput" style="background-color:orange;color:black;font-size:10pt;"></textarea>' + '<br/>' + '<button id="updateBlockList">Update</button><span style="width:2em"></span><button id="closePop">Close</button>'; blockListDiv.style.cssText = 'position:fixed; bottom:5.3em; right:0.5em; padding:0.5em; border-radius:0.25em; background-color:#D7EAF9; box-shadow:2px 2px 4px 0px rgba(0,0,0,0.5); text-align:center; display:none'; document.body.appendChild(blockListDiv); document.getElementById('updateBlockList').addEventListener('click', updateBlockList); document.getElementById('closePop').addEventListener('click', hideBlockList); prepPage(); } function ready(fn) { if (document.readyState !== 'loading') { fn(); } else { document.addEventListener('DOMContentLoaded', fn); } } ready(pageOnLoad); })();
-
- 论坛精英
Zephyrca 的博客 - 帖子: 6677
- 注册时间: 8月 12, 2022, 10:10 pm
- 昵称(选填): Zephyrca
Re: 【工具】-屏蔽烦你的id插件
我觉得设置黑名单的功能已经很好了
保守派们欢迎来美国时政版:
viewforum.php?f=71
支持拥枪朋友们欢迎去枪械射击版:
viewforum.php?f=72
喜欢篮球的朋友欢迎去体育博彩版:
viewforum.php?f=30
viewforum.php?f=71
支持拥枪朋友们欢迎去枪械射击版:
viewforum.php?f=72
喜欢篮球的朋友欢迎去体育博彩版:
viewforum.php?f=30
-
- 论坛精英
- 帖子: 5927
- 注册时间: 7月 29, 2022, 12:50 am
Re: 【工具】-屏蔽烦你的id插件
买买提纪检委书记
-
- 论坛精英
Zephyrca 的博客 - 帖子: 6677
- 注册时间: 8月 12, 2022, 10:10 pm
- 昵称(选填): Zephyrca
Re: 【工具】-屏蔽烦你的id插件
保守派们欢迎来美国时政版:
viewforum.php?f=71
支持拥枪朋友们欢迎去枪械射击版:
viewforum.php?f=72
喜欢篮球的朋友欢迎去体育博彩版:
viewforum.php?f=30
viewforum.php?f=71
支持拥枪朋友们欢迎去枪械射击版:
viewforum.php?f=72
喜欢篮球的朋友欢迎去体育博彩版:
viewforum.php?f=30
-
- 论坛点评
subsub1 的博客 - 帖子: 2730
- 注册时间: 7月 22, 2022, 12:48 am
- 昵称(选填): 减减
-
- 知名作家
- 帖子: 1084
- 注册时间: 6月 2, 2023, 12:38 pm
- 昵称(选填): 污坛忍者
-
- 论坛精英
- 帖子: 5376
- 注册时间: 8月 30, 2022, 2:41 pm
- 昵称(选填): 轮逼鉴定专家
Re: 【工具】-屏蔽烦你的id插件
Larry Zhang 这个轮逼 屏蔽不了啊 好像空格里有隐藏字符。 每次屏蔽了, 下次那垃圾又出来了, 大家有什么好建议啊
-
- 知名作家
- 帖子: 1084
- 注册时间: 6月 2, 2023, 12:38 pm
- 昵称(选填): 污坛忍者
Re: 【工具】-屏蔽烦你的id插件
你是用按钮添加还是收工加的?我用按钮加进去使用正常
-
- 论坛精英
- 帖子: 5376
- 注册时间: 8月 30, 2022, 2:41 pm
- 昵称(选填): 轮逼鉴定专家
-
- 知名作家
- 帖子: 1084
- 注册时间: 6月 2, 2023, 12:38 pm
- 昵称(选填): 污坛忍者
Re: 【工具】-屏蔽烦你的id插件
你可以看看那个名单框里面有没有。如果多开了窗口,会保存最后一次按"黑名单“按钮时,保存的所在页面名单框里面状态
举个例子,如果你开了A, B两个tab,在tab A里面通过黑名单功能添加了xxx, 但是没有按钮关闭黑名单框;然后去tab B添加了yyy,并且通过按钮关闭对话框保存了黑名单;又回到tab A通过按钮保存了对话框保存了黑名单。这样实际上会丢失yyy
update: 似乎是有问题,我看看
-
- 知名作家
- 帖子: 1084
- 注册时间: 6月 2, 2023, 12:38 pm
- 昵称(选填): 污坛忍者
Re: 【工具】-屏蔽烦你的id插件
我知道问题在哪里了
-
- 职业作家
- 帖子: 591
- 注册时间: 7月 31, 2022, 4:58 pm
- 昵称(选填): 泥橙
-
- 论坛精英
- 帖子: 5376
- 注册时间: 8月 30, 2022, 2:41 pm
- 昵称(选填): 轮逼鉴定专家
Re: 【工具】-屏蔽烦你的id插件
谢谢, 我试试