Disboard - Hide Servers

Hide spesific servers from Disboard

// ==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";
            };
        });
    }
    })();