您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
CC98 tools for blocking user, title, content and board.
- // ==UserScript==
- // @name CC98 Tools - Block List
- // @version 0.0.4
- // @description CC98 tools for blocking user, title, content and board.
- // @icon https://www.cc98.org/static/98icon.ico
- // @author ml98
- // @namespace https://www.cc98.org/user/name/ml98
- // @license MIT
- // @match https://www.cc98.org/*
- // @match https://www-cc98-org-s.webvpn.zju.edu.cn:8001/*
- // @grant none
- // ==/UserScript==
- /* 屏蔽列表 */
- const CONFIG = {
- userName: [], /* 用户名,如 ["ml98"] */
- title: [], /* 标题关键字或正则表达式,如 ["男生进", "女生进"] */
- content: [], /* 帖子内容关键字或正则表达式,如 ["欧蓝德", /^bd$/] */
- board: [], /* 版面id,如 [182, 357, 758] */
- };
- const log = () => {};
- CONFIG.content.push(...(CONFIG.userName).map(userName => `楼:用户${userName}在`));
- CONFIG.title = CONFIG.title.map((t) => new RegExp(t));
- CONFIG.content = CONFIG.content.map((c) => new RegExp(c));
- log('config', CONFIG);
- const isBlockedId = (_id) => _id && CONFIG.userName.includes(_id);
- const isBlockedTitle = (_title) => _title && CONFIG.title.some((t) => t.test(_title));
- const isBlockedContent = (_content) => _content && CONFIG.content.some((c) => c.test(_content));
- const isBlockedBoard = (_boardId) => _boardId && CONFIG.board.includes(_boardId);
- const topicRegExp = new RegExp("/board/\\d+/topic");
- const postRegExp = new RegExp("/Topic/\\d+/(hot-)?post");
- const isTopicAPI = (url) => url.includes("/topic/new") ||
- url.includes("/me/custom-board/topic") ||
- url.includes("/topic/search?keyword=") ||
- topicRegExp.test(url);
- const isPostAPI = (url) => postRegExp.test(url);
- const isIndexAPI = (url) => url.includes("/config/index");
- const resolve = (url, data) => {
- log(url);
- log('before', data);
- if (isTopicAPI(url)) {
- data = data.filter(
- (r) =>
- !(
- isBlockedId(r.userName) ||
- isBlockedTitle(r.title) ||
- isBlockedBoard(r.boardId)
- )
- );
- } else if (isPostAPI(url)) {
- data = data.filter(
- (r) =>
- !(
- isBlockedId(r.userName) ||
- isBlockedContent(r.content) ||
- isBlockedBoard(r.boardId)
- )
- );
- } else if (isIndexAPI(url)) {
- data.hotTopic = data.hotTopic.filter(
- (r) =>
- !(
- isBlockedId(r.authorName) ||
- isBlockedTitle(r.title) ||
- isBlockedBoard(r.boardId)
- )
- );
- }
- log('after', data);
- return data;
- };
- const origResponseJSON = Response.prototype.json;
- Response.prototype.json = function () {
- return origResponseJSON.call(this).then((data) => resolve(this.url, data));
- };