BBS Plus

Tools for BBS Network

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

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

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

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

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

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.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

// ==UserScript==
// @name         BBS Plus
// @version      1.3.0
// @description  Tools for BBS Network
// @author       gviuygyiug78g98g9h
// @match        https://bbs.market/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bbs.market
// @grant        GM_addStyle
// @require      https://cdnjs.cloudflare.com/ajax/libs/push.js/1.0.12/push.min.js
// @require      https://code.jquery.com/jquery-3.6.0.slim.min.js
// @license      MIT
// @namespace    https://greasyfork.org/users/893424
// ==/UserScript==

(function() {
    'use strict';
    $('head').append($(`
  <!-- CSS部分 -->
  <style>
  .css-1kaoat8 {
    position: absolute;
    min-width: 100%;
    transition: all 150ms ease 0s;
    overflow: hidden;
    z-index: 10;
    border-radius: 8px;
    visibility: visible;
    opacity: 1;
    pointer-events: all;
    right: 0px;
    top: 100%;
}
.select-none{
	user-select: none;
    }
  </style>`));
    function removeElement(arr,val) {
        var index = arr.indexOf(val);
        if (index > -1) {
            arr.splice(index, 1);
        }
        return arr
};
    let tokenName
    let showblockUserList=false
    let flag=false
    let link
    let ico = document.getElementsByTagName('link')
    let aList = document.getElementsByTagName('a')
    let logo
    let keyword
    function addBlockUser(username){
        let userArray=JSON.parse(localStorage.getItem('blockUsers'))||[]
        if(userArray.indexOf(username)==-1){
            userArray.push(username)
        }
        localStorage.setItem('blockUsers',JSON.stringify(userArray))
        buildBlockList()
    }
    function removeBlockUser(username){
        let userArray=JSON.parse(localStorage.getItem('blockUsers'))||[]
        userArray=removeElement(userArray,username)
        localStorage.setItem('blockUsers',JSON.stringify(userArray))
        showblockUserList=false
        showBlockUserList()
        buildBlockList()
    }
    setTimeout(() => {
        setTimeout(()=>{
            //$('#modal-root').attr('translate',"no")
            buildBlockList()
        }, 2000);
        for (let index = 0; index < ico.length; index++) {
            const element = ico[index];
            console.log(element)
            if(element.rel=='shortcut icon'){
                link=element
                break
            }
        }
        window.setInterval(function(){
            if($("#blockList-btn").length==0){
                buildBlockList()
            }
            $('body').attr("translate","no")
            tokenName=location.href.split('/')[3]
            let spans=$('span')
            if(spans.length>0){
                for (let index = 0; index < spans.length; index++) {
                    const element = spans[index];
                    if(element.dir=='auto'){
                        element.id='autoSpan'+index
                        $('#autoSpan'+index).attr('translate',"yes")
                    }
                    if(element.innerText.indexOf('Posted by')>-1){
                        if(element.childNodes[0].childNodes[1]){
                            let postCard=element.parentNode.parentNode.parentNode.parentNode.parentNode
                            if(JSON.parse(localStorage.getItem('blockUsers').indexOf(element.childNodes[0].childNodes[1].innerText))>-1){
                                element.parentNode.parentNode.parentNode.parentNode.parentNode.id='hidden'+index
                                let card = document.getElementById('hidden'+index)
                                card.remove()
                            }else{
                                try{
                                    if(postCard.childNodes[2].childNodes[0].childNodes.length>5){
                                        continue
                                    }
                                    //console.log(postCard.children[2].children[0])
                                    let icon=`<div id="hide-btn-${index}" data-test="ShareButton" class="relative cursor-pointer undefined css-1u8qly9"><div data-test="button" class="transition relative flex items-center justify-center leading-none cursor-pointer shadow-s1 dark:shadow-s5 bg-gray-50 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-500 hover:text-gray-600 dark:text-gray-100 dark:hover:text-gray-200 text-gray-500 css-9l7byh"><span data-test="icon" class="cursor-pointer transition flex justify-center items-center  css-hma173"><svg xmlns="http://www.w3.org/2000/svg" class=" css-1tg8k9x" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"></path></svg></span></div></div>`
                                    setTimeout(()=>{
                                        postCard.children[2].children[0].children[4].id='share-btn-'+index
                                        $('#'+'share-btn-'+index).after(icon)
                                        $('#'+'hide-btn-'+index).on({click:function(e){
                                            addBlockUser(element.childNodes[0].childNodes[1].innerText)
                                        }})
                                    },1)
                                }catch(e){
                                    //console.log(postCard.children)
                                }
                            }
                        }
                    }
                    if($('#postHead').length>1){
                    }else{
                        if(element.innerText.indexOf('Post income')>-1){
                            if(element.childNodes[0].childNodes[1]){
                                let postCard=element.parentNode.parentNode.parentNode.parentNode.parentNode
                                postCard.children[0].children[0].id="postHead"
                                $('#postHead').attr('translate',"no")
                            }
                        }
                    }
                }
            }
            if(spans.length>0){
                for (let index = 0; index < spans.length; index++) {
                    const element = spans[index];
                    if(element.innerText.indexOf('Posted by')>-1){

                    }
                }
            }
            buildSearchBar()
            let e = document.getElementsByClassName('css-1xjhfh5')
            if(e.length>0){
                if(!flag){
                    flag=true
                    Push.create("New Notification", {
                        body: "You got a new notification.",
                        icon: 'https://firebasestorage.googleapis.com/v0/b/deweb-519a7.appspot.com/o/bbs.market%2Flogo.png?alt=media',
                        timeout: 10000
                    });
                }
            }else{
                flag=false
            }
            link.href=flag?'https://s2.loli.net/2022/03/27/ICerNyjUa125mfM.png':'https://firebasestorage.googleapis.com/v0/b/deweb-519a7.appspot.com/o/bbs.market%2Ffavicon.png?alt=media'
        }, 2000);
        console.log(aList.length)
        //setTimeout(()=>buildSearchBar(),5000);
    }, 3000);
    function buildSearchBar(){
        if($("#searchInput").length>0){
            return
        }
        for (let index = 0; index < aList.length; index++) {
            const element = aList[index];
            if(element.href=='https://bbs.market/?tab=myBbs'){
                element.id='logo'
                console.log(element)
                $("#logo").after("<div class=\"rounded-lg h-9 w-96 bg-gray-100 dark:bg-gray-800 leading-none flex p-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-6 w-6 text-gray-300 mr-2 dark:text-gray-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"></path></svg><input id=\"searchInput\" class=\"bg-gray-100 dark:bg-gray-800\" placeholder=\"Search BBS\"></div>")
                $("#searchInput").on({input:function(e){
                    console.log(e)
                    keyword = e.currentTarget.value
                    console.log(keyword)
                },keydown:function(e){
                    if (e.key == 'Enter' && keyword) {
                        let url = changeURLArg('https://bbs-search.vercel.app', 'keyword', keyword)
                        window.location.href = url
                        console.log(window.location.href)
                    }
                }})
                break
            }
        }
    }
    function buildBlockList(){
        if($("#blockList-btn").length>0){
            document.getElementById('efioewj').remove()
        }
        let users=JSON.parse((localStorage.getItem('blockUsers')||'[]'))
        let listHtml
        for (let index = 0; index < users.length; index++) {
            const element = users[index];
            let html=`<div class=\"transition flex items-center px-4 h-[42px]  \"><div class=\"flex items-center flex-1 mr-1 \"><img data-test=\"circular-image \" class=\"transition transition bg-gray-50 dark:bg-gray-800 shadow-s1 dark:shadow-s5 rounded-full border border-gray-100 dark:border-gray-800 flex-shrink-0 mr-2 css-1ayes8q \" src=\"https://firebasestorage.googleapis.com/v0/b/deweb-519a7.appspot.com/o/profileImages%2Fbbs.market%2F${element.split('@')[0].toLowerCase()}?alt=media \"><a href=\"/${tokenName}/profile/${element}\" dir=\"ltr \" data-test=\"text \" class=\"text-sm mr-2 link css-shxbls \">${element}</a></div><span id=\"delete-btn-${index}\" dir=\"ltr \" data-test=\"text \" class=\"flex-shrink-0 text-sm font-medium transition css-shxbls cursor-pointer\"><svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-5 w-5 text-gray-500\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"></path></svg></span></div>`
            setTimeout(()=>{
                $('#userItemList').append(html)
                $('#delete-btn-'+index).on({click:function(event){
                    console.log("removeBlockUser",element)
                    removeBlockUser(element)
                }})
            },1)
        }
        $('.flex-1,.d-none,.d-md-flex').filter(":first").after("<div id=\"efioewj\" class=\"relative\"><div id=\"blockList-btn\" class=\"mr-3\"><div id=\"bl-btn\" data-test=\"button\" class=\"transition relative flex items-center justify-center leading-none cursor-pointer shadow-s1 dark:shadow-s5 bg-gray-50 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-500 hover:text-gray-600 dark:text-gray-100 dark:hover:text-gray-200  css-xc709b\"> <span data-test=\"icon\" class=\"cursor-pointer transition flex justify-center items-center   css-1ovarfw\"><svg xmlns=\"http://www.w3.org/2000/svg\" class=\" css-1tg8k9x\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"> <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21\" /></svg></span></div> </div> </div>")
        $('#blockList-btn').after('<div id=\"blockList\" class=\"transition bg-white dark:bg-gray-900 shadow-s1 dark:shadow-s4 css-1stg9h5\"><div data-test=\"card \" class=\"transition lg:rounded-lg p-4 lg:p-5 bg-white dark:bg-gray-900 text-gray-900 dark:text-gray-50 shadow-s1 dark:shadow-s4 w-96 rounded-md css-en1cq3 css-1u8qly9 \"><div class=\"flex items-center p-4 border-b-4\"><span dir=\"ltr \" data-test=\"text \" class=\"flex-1 text-sm font-medium text-gray-900 dark:text-gray-50 css-shxbls select-none\">Block User List</span></div><div data-test=\"hr\" class=\"h-px w-full transition bg-gray-100 dark:bg-gray-800 shadow-s2 dark:shadow-s6 bg-primary-500 dark:bg-primary-500  css-1u8qly9\"></div><div id=\"userItemList\" class=\"overflow-auto divide-y divide-gray-100 dark:divide-gray-800\" style=\"width:300px\"></div></div></div>')
        $('body').on({click:function(e){
            showblockUserList=false
            showBlockUserList()
        }})
        $("#blockList-btn").on({click:function(event){
            showblockUserList=!showblockUserList
            if (event && event.stopPropagation) {
                event.stopPropagation();
            } else {
                event.cancelBubble = true;
            }
            showBlockUserList()
        }})
        $("#blockList").on({click:function(event){
            if (event && event.stopPropagation) {
                event.stopPropagation();
            } else {
                event.cancelBubble = true;
            }
        }})
    }
    function showBlockUserList(){
        $("#blockList").toggleClass('css-1stg9h5',!showblockUserList)
        $("#blockList").toggleClass('css-1kaoat8',showblockUserList)
        $("#bl-btn").toggleClass('bg-gray-50',!showblockUserList)
        $("#bl-btn").toggleClass('bg-primary-500',showblockUserList)
        $("#bl-btn").toggleClass('dark:bg-gray-800',!showblockUserList)
        $("#bl-btn").toggleClass('dark:bg-primary-500',showblockUserList)
        $("#bl-btn").toggleClass('text-gray-500',!showblockUserList)
        $("#bl-btn").toggleClass('text-gray-50',showblockUserList)
        $("#bl-btn").toggleClass('dark:text-gray-100',!showblockUserList)
        $("#bl-btn").toggleClass('dark:text-gray-900',showblockUserList)
        $("#bl-btn").toggleClass('hover:bg-gray-200',!showblockUserList)
        $("#bl-btn").toggleClass('dark:hover:bg-gray-700',!showblockUserList)
        $("#bl-btn").toggleClass('hover:text-gray-600',!showblockUserList)
        $("#bl-btn").toggleClass('dark:hover:text-gray-200',!showblockUserList)
    }
    function changeURLArg(url, arg, arg_val) {
        var pattern = arg + '=([^&]*)';
        var replaceText = arg + '=' + arg_val;
        if (url.match(pattern)) {
            var tmp = '/(' + arg + '=)([^&]*)/gi';
            tmp = url.replace(eval(tmp), replaceText);
            return tmp;
        } else {
            if (url.match('[\?]')) {
                return url + '&' + replaceText;
            } else {
                return url + '?' + replaceText;
            }
        }
    }
})();