您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Removes the obnoxious bar that has appeared as part of a visual refresh.
// ==UserScript== // @name Discord Get Rid Of Obnoxious Bar // @namespace http://tampermonkey.net/ // @license CC0-1.0 // @version 0.1.1 // @description Removes the obnoxious bar that has appeared as part of a visual refresh. // @author 20kdc // @match https://discordapp.com/* // @match https://discord.com/* // @grant none // ==/UserScript== /* Written by 20kdc To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>. */ // Since iterating through the entire DOM would be performance suicide, // let's try to detect classes in ANY OTHER WAY. var dragonequus; dragonequus = { version: 5.3, getAllClassesLen: 0, getAllClassesCache: [], getAllClasses: function () { var sheets = document.styleSheets; if (sheets.length == dragonequus.getAllClassesLen) { return dragonequus.getAllClassesCache; } var workspace = []; var seen = {}; for (var k = 0; k < sheets.length; k++) { var sheet = sheets[k]; for (var k2 = 0; k2 < sheet.cssRules.length; k2++) { var rule = sheet.cssRules[k2]; if (rule.type == CSSRule.STYLE_RULE) { // .A:I .B:I, .A .B var majors = rule.selectorText.split(","); for (var k3 = 0; k3 < majors.length; k3++) { var minors = majors[k3].split(" "); for (var k4 = 0; k4 < minors.length; k4++) { // Minor starts off as say .A:B var minor = minors[k4]; // Must be class if (!minor.startsWith(".")) continue; // Cut off any : and remove . var selectorBreak = minor.indexOf(":"); if (selectorBreak != -1) { minor = minor.substring(1, selectorBreak); } else { minor = minor.substring(1); } if (seen[minor]) continue; seen[minor] = true; workspace.push(minor); } } } } } dragonequus.getAllClassesLen = sheets.length; dragonequus.getAllClassesCache = workspace; return workspace; }, isValidDC: function (obfuscated, real) { if (!(obfuscated.startsWith(real + "-") || obfuscated.startsWith(real + "_"))) return false; if (obfuscated.length != real.length + 7) return false; return true; }, findAllByDiscordClass: function (name) { var q = []; var q2 = document.querySelectorAll("." + name); for (var k2 = 0; k2 < q2.length; k2++) q.push(q2[k2]); var classes = dragonequus.getAllClasses(); for (var k in classes) { var n = classes[k]; if (dragonequus.isValidDC(n, name)) { q2 = document.querySelectorAll("." + n); for (var k2 = 0; k2 < q2.length; k2++) q.push(q2[k2]); } } return q; }, findByDiscordClass: function (name) { var all = dragonequus.findAllByDiscordClass(name); if (all.length > 0) return all[0]; return null; }, toDiscordClasses: function (name) { var classes = dragonequus.getAllClasses(); var all = []; for (var k in classes) { var n = classes[k]; if (dragonequus.isValidDC(n, name)) all.push(n); } all.push(name); return all; }, toDiscordClass: function (name) { return dragonequus.toDiscordClasses(name)[0]; }, injectCSSRulesNow: function (rules) { var styleElm = document.createElement('style'); console.log("dragonequus CSS:", rules); document.body.appendChild(styleElm); for (var i = 0; i < rules.length; i++) styleElm.sheet.insertRule(rules[i], 0); }, injectCSSRules: function (getRules) { setTimeout(function () { dragonequus.injectCSSRulesNow(getRules()); }, 5000); }, injectCSSForClassScript: function (clazz, css) { dragonequus.injectCSSRules(function () { var classes = dragonequus.toDiscordClasses(clazz); var total = []; for (var i = 0; i < classes.length; i++) { // This is stupid. // This is really, really stupid. total.push(".visual-refresh ." + classes[i] + " { " + css + " }"); total.push("." + classes[i] + " { " + css + " }"); } return total; }); }, }; dragonequus.injectCSSForClassScript("bar", "display: none;"); dragonequus.injectCSSForClassScript("base", "grid-template-rows: [top] 0fr [titleBarEnd] 0fr [noticeEnd] 1fr [end];");