Disboard - Hide Servers

Hide spesific servers from Disboard

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name            Disboard - Hide Servers
// @namespace       https://github.com/y-mamanaranu
// @license         MIT
// @version         0.1.4
// @description     Hide spesific servers from Disboard
// @description:ja  Disboardで特定のサーバーを非表示にする
// @author          Yoiduki <y-mamanaranu>
// @match           https://disboard.org/*
// @exclude         https://disboard.org/*/server/*
// @exclude         https://disboard.org/*/dashboard/*
// @icon            https://www.google.com/s2/favicons?sz=64&domain=disboard.org
// @require         https://openuserjs.org/src/libs/sizzle/GM_config.js
// @grant           GM.getValue
// @grant           GM.setValue
// @supportURL      https://gist.github.com/y-mamanaranu/9c85d2a5f89c7b7111cfd0c2356b3205
// ==/UserScript==

(function() {
    'use strict';

    let gmc = new GM_config(
        {
            'id': 'MyConfig', // The id used for this instance of GM_config
            'fields': // Fields object
            {
                "SectionExceptServer":{
                    'section': ['Except Server'],
                    'type': 'hidden', // Makes this setting a hidden input
                    'value': '' // Value stored
                },
                'EnableExceptServer':
                {
                    'label': 'Enable', // Appears next to field
                    'type': 'checkbox', // Makes this setting a checkbox input
                    'default': true // Default value if user doesn't change it
                },
                'ReverseExceptServer':
                {
                    'label': 'Reverse', // Appears next to field
                    'type': 'checkbox', // Makes this setting a checkbox input
                    'default': false // Default value if user doesn't change it
                },
                'ExceptServer': // This is the id of the field
                {
                    'label': 'Server List', // Appears next to field
                    'type': 'textarea', // Makes this setting a text field
                    'default': '', // Default value if user doesn't change it
                    rows: 20,
                    cols: 120,
                },
                "SectionExceptTag":{
                    'section': ['Except Tag'],
                    'type': 'hidden', // Makes this setting a hidden input
                    'value': '' // Value stored
                },
                'EnableExceptTag':
                {
                    'label': 'Enable', // Appears next to field
                    'type': 'checkbox', // Makes this setting a checkbox input
                    'default': true // Default value if user doesn't change it
                },
                'ReverseExceptTag':
                {
                    'label': 'Reverse', // Appears next to field
                    'type': 'checkbox', // Makes this setting a checkbox input
                    'default': false // Default value if user doesn't change it
                },
                'ExceptTag': // This is the id of the field
                {
                    'label': 'Tag List', // Appears next to field
                    'type': 'textarea', // Makes this setting a text field
                    'default': '', // Default value if user doesn't change it
                    rows: 20,
                    cols: 120,
                },
                "SectionReload":{
                    'section': ['Reload'],
                    'type': 'hidden', // Makes this setting a hidden input
                    'value': '' // Value stored
                },
                'SaveandReload':
                {
                    'label': 'Save and Reload', // Appears on the button
                    'type': 'button', // Makes this setting a button input
                    'size': 100, // Control the size of the button (default is 25)
                    'click': function() { // Function to call when button is clicked
                        gmc.save();
                        location.reload();
                    }
                }
            },
            'events': {
                'init': onInit
            }
        });

    function onInit() {
        // initialization complete
        // value is now available
        createConfig();
        addExceptButton();
        hideListedServer();
        hideListedTag();
    }

    // Except Server
    const getServerId = () => {
        var ecept_server = gmc.get('ExceptServer');
        ecept_server = ecept_server.split('\n');
        ecept_server = ecept_server.map(server => server.trim());
        ecept_server = ecept_server.filter(server => server)
        ecept_server = ecept_server.filter(server => !server.startsWith("//"));
        return ecept_server
    }

    const judgeServer = (elem) => {
        var serverjoin = elem.getElementsByClassName("server-join")[0];
        var a = serverjoin.getElementsByTagName("a")[0];
        var num = a.getAttribute("data-id");
        return getServerId().includes(num);
    }

    const hideListedServer_sub = (elem) => {
        if (elem.style.display !="none" ){
            if (judgeServer(elem)){
                elem.style.display="none";
            }
        }
    }

    const hideListedServer_sub_reverse = (elem) => {
        if (elem.style.display !="none" ){
            if (!judgeServer(elem)){
                elem.style.display="none";
            }
        }
    }

    const hideListedServer = () => {
        var enable_server = gmc.get('EnableExceptServer');
        if (enable_server) {
            var reverse = gmc.get('ReverseExceptServer');
            var column = document.getElementsByClassName("column is-half-tablet");
            column = Array.from(column);
            if (reverse) {
                column.forEach((elem) => hideListedServer_sub_reverse(elem));
            } else {
                column.forEach((elem) => hideListedServer_sub(elem));
            }
        }
    }

    // Except Tag
    const getTag = () => {
        var ecept_tag = gmc.get('ExceptTag');
        ecept_tag = ecept_tag.split('\n');
        ecept_tag = ecept_tag.map(server => server.trim());
        ecept_tag = ecept_tag.filter(server => server)
        ecept_tag = ecept_tag.filter(server => !server.startsWith("//"));
        return ecept_tag
    }

    const judgeTag = (elem) => {
        var tag = elem.getElementsByClassName("tag");
        var tag_list = getTag();
        tag = Array.from(tag);
        tag = tag.map((elem) => elem.getAttribute("title"));
        tag = tag.filter(elem => tag_list.includes(elem))
        return tag.length > 0;
    }

    const hideListedTag_sub = (elem) => {
        if (elem.style.display !="none" ){
            if (judgeTag(elem)){
                elem.style.display="none";
            }
        }
    }

    const hideListedTag_sub_reverse = (elem) => {
        if (elem.style.display !="none" ){
            if (!judgeTag(elem)){
                elem.style.display="none";
            }
        }
    }

    const hideListedTag = () => {
        var enable_server = gmc.get('EnableExceptTag');
        if (enable_server) {
            var reverse = gmc.get('ReverseExceptTag');
            var column = document.getElementsByClassName("column is-half-tablet");
            column = Array.from(column);
            if (reverse) {
                column.forEach((elem) => hideListedTag_sub_reverse(elem));
            } else {
                column.forEach((elem) => hideListedTag_sub(elem));
            }
        }
    }

    // Create Config
    const createConfig = () => {
        var user_menu = document.getElementById("dropdown-user-menu");
        var content = user_menu.getElementsByClassName("dropdown-content")[0];

        var a = document.createElement("a");
        var divider = content.getElementsByClassName("dropdown-divider")[0];
        content.insertBefore(a, divider);
        a.classList.add("dropdown-item")
        a.onclick = function() {
            gmc.open();
        };

        var span = document.createElement("span");
        span.textContent = "除外設定";
        a.appendChild(span);
    }

    // Add excpept button for each server
    const addExceptButton = () => {
        var div_list = document.getElementsByClassName("column is-half-tablet");

        div_list = Array.from(div_list);
        div_list.forEach((elem) => {
            elem.getElementsByClassName("dropdown-menu");
            var menu = elem.getElementsByClassName("dropdown-menu")[0];

            var ul = menu.getElementsByTagName("ul")[0];

            var li = document.createElement("li");
            ul.appendChild(li);

            var a = document.createElement("a");
            li.appendChild(a);
            a.textContent="除外";
            a.classList.add("dropdown-item");

            var res = menu.id.split("-");
            var id = res[res.length-1];

            a.onclick = function() {
                var ecept_server = gmc.get('ExceptServer');
                ecept_server = ecept_server + "\n" + id;
                gmc.set("ExceptServer", ecept_server);
                gmc.save();
                elem.style.display="none";
            };
        });
    }
    })();