Discord Tweaks

Reduce gap between messages, optionally unbrighten name of selected channel

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Discord Tweaks
// @namespace    https://greasyfork.org/en/users/8615-joeytwiddle
// @version      0.1.9
// @description  Reduce gap between messages, optionally unbrighten name of selected channel
// @author       joeytwiddle
// @match        https://discord.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=discord.com
// @license      MIT
// @grant        GM_addStyle
// ==/UserScript==

(function() {
	'use strict';

	//// Options

	// Around 21/10/2022 Discord put a larger vertical gap between messages.
	// his reduces the gap size similar to how it was before.
	const reduceGapBetweenMessages = false; // Turned off while I try Appearance > Compact Mode.  I also see some settings in Discord we could play with.

	// When a channel has activity (new messages), Discord makes the name of that channel bold and white, which is fine.
	// But Discord also does that for the selected channel, which makes it look like it has new activity, when maybe it doesn't.
	// I can't stand that behaviour, so I disable it.
	const doNotBrightenSelectedChannel = true;

	// It turns out that on Windows, my Discord tab was zoomed to 70%, although I'm not sure how, because that wasn't in zoomValues.  Was it copying the zoom from Linux?
	const usePreferredFont = false; // navigator.userAgent.match(/Linux/);

	const giveTextInputBoxADarkBackground = true;

	//// End Options

	//

	if (reduceGapBetweenMessages) {
		GM_addStyle(`
			/* Original fix for 21/10/2022 */
			.group-spacing-16 .groupStart-3Mlgv1 {
				margin: 0.25em;
			}
			/* New CSS classes.  It looks like [role=article] will be the most resilient. I haven't seen it used for any other elements on a standard page, but it could be used in some Discord UI / menus. */
			[role=article], .message-2CShn3, .cozy-VmLDNB, .zalgo-26OfGz {
				padding-top: 0rem !important;
				padding-bottom: 0rem !important;
				margin-top: 0.05rem !important;
			}
		`);
	}

	if (doNotBrightenSelectedChannel) {
		// The problem is this CSS rule, specifically the .modeSelected selector, which highlights the currently selected channel the same as channels with unread activity.
		/*
			.modeConnected-NrO4cP .name-28HaxV,
			.modeConnected-NrO4cP:hover .name-28HaxV,
			.modeSelected-3DmyhH .name-28HaxV,
			.modeSelected-3DmyhH:hover .name-28HaxV,
			.modeUnread-3Cxepe .name-28HaxV,
			.modeUnread-3Cxepe:hover .name-28HaxV,
			.notInteractive-2tFrlE.modeConnected-NrO4cP .name-28HaxV,
			.notInteractive-2tFrlE.modeSelected-3DmyhH .name-28HaxV {
				color: var(--interactive-active);
			}
		*/

		// Let's try to fix it
		GM_addStyle(`
			.modeSelected-3DmyhH .name-28HaxV {
				color: var(--channels-default);
			}
			/* But if it really IS unread, then we will brighten the channel name */
			.modeSelected-3DmyhH.modeUnread-3Cxepe .name-28HaxV {
				color: var(--interactive-active);
			}
		`);
	}

	if (usePreferredFont) {
		// TODO: Isn't `font-family` set to `inherit` for this selector?  If so, we should just set this rule on `body`, to override `--font-primary` for the entire page.
		// I note that Windows uses "gg sans", but "Noto Sans" also looks ok for me (slightly more dense and maybe slighly thicker)
		GM_addStyle(`
			a, abbr, acronym, address, applet, big, blockquote, body, caption, cite, code, dd, del, dfn, div, dl, dt, em, fieldset, form, h1, h2, h3, h4, h5, h6, html, iframe, img, ins, kbd, label, legend, li, object, ol, p, pre, q, s, samp, small, span, strike, strong, table, tbody, td, tfoot, th, thead, tr, tt, ul, var {
				font-family: "Bitstream Vera Sans", "Sans", "Open Sans", "gg sans","Noto Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
			}
			/*
			html {
				font-size: 91%;
			}
			*/
		`);
		//const fontScale = '91%';    // when using Firefox with zoom 80%
		const fontScale = '102%';   // when using Firefox with zoom 67%
		document.firstElementChild.style.fontSize = fontScale;
		window.addEventListener('focus', () => { setTimeout(() => { document.firstElementChild.style.fontSize = fontScale; }, 1); })
		window.addEventListener('blur', () => { setTimeout(() => { document.firstElementChild.style.fontSize = fontScale; }, 1); })
	}

	if (giveTextInputBoxADarkBackground) {
		GM_addStyle(`
			/*
			The text input box used this (quite light):
				background: var(--bg-overlay-3,var(--channeltextarea-background));
				background: hsl(225, 6.5%, 23.5%);
			The search textbox used this (nicely dark):
				background: var(--bg-overlay-3,var(--background-tertiary));
				background: hsl(225, 6.5%, 12.5%);
			*/
			/* But we will do something different, for both: slightly dark when unfocused, quite dark when focused */
			/* Old selector, no longer working:
			.channelTextArea-1FufC0 .scrollableContainer-15eg7h,
			.searchBar-jGtisZ {
			*/
			/* This new selector might last a bit longer than the class, but it requires !important, and I couldn't find a new selector for the search box */
			main > form > div > div,
			.searchBar_e0c60b {
				background: hsl(225, 6.5%, 18%) !important;
			}
			main > form > div > div:focus-within,
			.searchBar_e0c60b:focus-within {
				background: hsl(225, 6.5%, 17%) !important;
			}
		`);
	}
})();