您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Give the chat more screen space
// ==UserScript== // @name Hide Discord sidebars // @namespace https://github.com/Dragosarus/Userscripts/ // @version 2.4 // @description Give the chat more screen space // @author Dragosarus // @match http://discord.com/* // @match https://discord.com/* // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @require http://code.jquery.com/jquery-latest.js // ==/UserScript== // NOTE: Does not work with Greasemonkey as it neither supports GM_registerMenuCommand nor GM_unregisterMenuCommand. // Use Tampermonkey or Violentmonkey instead. (function() { 'use strict'; var hide = { serverSidebar : true, channelSidebar: true, memberSidebar : true // note: there is a "Member List" button in the top-right corner }; // Can't use 'aria-label' to identify the Members List button as its value depends on your language settings, // so (part of) the icon will have to be used instead var memberIconPath = "M14 8.00598C14 10.211 12.206 12.006 10 12.006C7.795 12.006 6 10.211 6 8.00598C6 5.80098 7.794 4.00598 10 4.00598C12.206 4.00598 14 5.80098 14 8.00598ZM2 19.006C2 15.473 5.29 13.006 10 13.006C14.711 13.006 18 15.473 18 19.006V20.006H2V19.006Z"; var serverSelector = "nav[class*='guilds']"; var channelSelector = "div[class*='sidebar']"; var memberSelector = "div[class*='membersWrap']"; var memberIconSelector = "div[class*='clickable']:has(svg > path[d='" + memberIconPath + "'])" var baseSelector = "div[class*='base']"; // needed when hiding server sidebar var hideMenu = "Hide sidebars"; var showMenu = "Show sidebars"; var memberToggleMenu = "Toggle member sidebar"; // + " [current: (in)visible]" var hideSidebarMenuShortcut = 's'; var hideSidebarMenuId; var memberToggleMenuId; var baseOffset; // e.g. "72px" var sidebarsHidden = false; var memberSidebarHidden; // from the "Member List" button var selectors = { serverSidebar: serverSelector, channelSidebar: channelSelector, memberSidebar: memberSelector }; init(); function init() { updateHideSidebarMenu(); } function onHideSidebarMenuClick() { // Read state of "Member List" button memberSidebarHidden = $(memberIconSelector).filter("div[class *= 'selected']").length == 0; // Toggle visibility of sidebars for (var sidebar in selectors) { // hideMemberSidebar = memberSidebarHidden || sidebarsHidden if (sidebar == "memberSidebar" && memberSidebarHidden) {continue;} if (hide[sidebar]) { setSidebar(selectors[sidebar], sidebarsHidden); } } // Extra work is needed to properly hide the server sidebar if (hide.serverSidebar) { var base = $(baseSelector); if (sidebarsHidden) { base.css("left", baseOffset); } else { baseOffset = base[0].style.left; base.css("left", "0px"); } } sidebarsHidden ^= true; // Update menu updateHideSidebarMenu(); } function updateHideSidebarMenu() { GM_unregisterMenuCommand(hideSidebarMenuId); var menu = sidebarsHidden ? showMenu : hideMenu; hideSidebarMenuId = GM_registerMenuCommand(menu, onHideSidebarMenuClick, hideSidebarMenuShortcut); } function setSidebar(selector, boolValue) { if (boolValue) { showSidebar(selector); } else { hideSidebar(selector); } } function hideSidebar(selector) { var node = $(selector)[0]; node.style.display = "none"; } function showSidebar(selector) { var node = $(selector)[0]; node.style.removeProperty("display"); } })(); /*eslint-env jquery*/ // stop eslint from showing "'$' is not defined" warnings