贵物班友会

贵物班友会(bgm.tv、bangumi.tv、chii.in)

目前为 2024-04-09 提交的版本。查看 最新版本

// ==UserScript==
// @name         贵物班友会
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  贵物班友会(bgm.tv、bangumi.tv、chii.in)
// @author       老悠
// @include      https://bgm.tv/*
// @include      https://bangumi.tv/*
// @match        https://chii.in/*
// @grant        GM_addStyle
// @grant        GM_getResourceText
// @license      MIT
// ==/UserScript==
(function() {
     'use strict';
    GM_addStyle('.dialog { width: 100%; height: 100vh; background-color: rgba(0, 0, 0, 0.5); position: absolute; top: 0; left: 0;line-height: 30px; display: none; } .dialog .container {width: 220px;height: 100px; background-color: #fff;margin: calc((100vh - 100px)/2) auto; position: relative;} .dialog .container .dialog_footer { position: absolute; bottom: 0; } .dialog .container .dialog_footer button {position: relative;left: 50px;display: inline-block;width: 50px;bottom: 10px;} .monster-tooltip {display: none;position: absolute;background-color: #f9f9f9;border: 1px solid #ccc;padding: 5px 10px;border-radius: 5px;font-size: 14px;}')
   
let modalHtml='<div id="markModal" class="dialog">'
    +' <div class="container">'
    +'  <div class="dialog_header">'
    +'  </div>'
    +'  <div class="dialog_center">'
    +'     &nbsp;&nbsp;&nbsp;&nbsp;颜色:<input id="markColor" type="text" list="colors">'
    +'<datalist id="colors">'
    +'<option value="red">'
    +'<option value="yellow">'
    +'<option value="blue">'
    +'<option value="green">'
    +'</datalist>'
    +'<br>'
    +'     &nbsp;&nbsp;&nbsp;&nbsp;备注:<input id="markMark" type="text" ><br>'
    +'  </div>'
    +'   <div style="justify-content: center;display: flex;margin-top:10px;">'
    +'     <button class="cancel">取消</button>'
    +'     <button class="submit">确定</button>'
    +'    </div>'
    +'   </div>'
    +' </div>';
    $('body').append(modalHtml);

    let marksModalHtml='<div id="marksModal" class="dialog">'
    +' <div class="container" style="height: 500px;width: 500px;margin: calc((100vh - 500px)/2) auto;">'
    +'  <div class="dialog_header">'
    +'  </div>'
    +'  <div class="dialog_center">'
    +'  <div style="justify-content: center;display: flex;">'
    +'  全量傻逼备注JSON:<br>'
    +'  </div>'
    +'  <div style="justify-content: center;display: flex;">'
    +'     <textarea id="userMark" type="text" style="width:90%;height:420px;"/><br>'
    +'  </div>'
    +'  </div>'
    +'   <div style="justify-content: center;display: flex;margin-top:10px;">'
    +'     <button class="cancel">取消</button>'
    +'     <button class="submit">确定</button>'
    +'    </div>'
    +'   </div>'
    +' </div>';
    $('body').append(marksModalHtml);

    let tooltipHtml='<div class="monster-tooltip" id="monsterTooltip">无信息</div>';
    $('body').append(tooltipHtml);
    $(document).on("mouseenter",".monsterTipBtn",function(e){
        var tooltip = $('#monsterTooltip');
        let tempBgmId=$(this).attr("bgmId");
        let tempMonster=monsterMap[tempBgmId].data;

        let tempHtml= '<span style="color:'+tempMonster.color+'">贵物:'+tempMonster.name+'</span>'+"<br>"
        +'<span style="color:'+tempMonster.color+'">淳朴度:'+tempMonster.score+'</span><br>'
        +'<span>简介:</span><br>'
        +'<span style="white-space: pre;">'+(tempMonster.cont?tempMonster.cont:'无')+'</span>';
        $("#monsterTooltip").html(tempHtml);

        tooltip.css({
            top: e.pageY + 'px',
            left: e.pageX + 'px',
            display: 'block'
        });
    });
    $(document).on("mouseenter",".cliqueTipBtn",function(e){
        var tooltip = $('#monsterTooltip');
        let tempCliqueId=$(this).attr("cliqueId");
        let tempClique=cliqueMap[tempCliqueId];

        let color=getColor(tempClique.score);
        let tempHtml= '<span style="color:'+color+'">小圈子:'+tempClique.name+'</span>'+"<br>"
        +'<span style="color:'+color+'">淳朴度:'+tempClique.score+'</span><br>'
        +'<span>简介:</span><br>'
        +'<span  style="white-space: pre;">'+(tempClique.cont?tempClique.cont:'无')+'</span>';
        $("#monsterTooltip").html(tempHtml);

        tooltip.css({
            top: e.pageY + 'px',
            left: e.pageX + 'px',
            display: 'block'
        });
    });
    $(document).on("mouseleave",".monsterTipBtn,.cliqueTipBtn",function(e){
        $('#monsterTooltip').hide();
    });

    $("#headerProfile").find("div.actions").append('<a id="addMark" href="javascript:void(0)" class="chiiBtn"  data-toggle="modal" data-target="#markModal"><span>添加/修改备注</span></a>'
                                                  +'<a id="addMarks" href="javascript:void(0)" class="chiiBtn"  data-toggle="modal" data-target="#marksModal"><span>批量添加/修改备注</span></a>');
    let id1=$("#headerProfile").find("div.name small.grey").text().replace("@","");

    let userMark=localStorage.getItem('userMark');

    if(!userMark){
        userMark={};
    }else{
        try{
            userMark=JSON.parse(userMark);
        } catch(e){
            userMark={};
        }
    }
    $("#addMark").click(function(){
        $('#markModal').show(1000);
    });

    $("#addMarks").click(function(){
        $("#userMark").val(JSON.stringify(userMark));
        $('#marksModal').show(1000);
    });

    // 确定按钮的操作
    $('#markModal .submit').click(function () {
        userMark[id1]={"color":$("#markColor").val(),"mark":$("#markMark").val()};
        let json=JSON.stringify(userMark);
        localStorage.setItem('userMark', json, { expires: 999999999 });
        $('#markModal').fadeToggle(1000);
        location.reload();
    });
    // 取消按钮的操作
    $('#markModal .cancel').click(function () {
        $('#markModal').hide(1000)
    });

    // 批量模态框确定按钮的操作
    $('#marksModal .submit').click(function () {
        let json=$("#userMark").val();
        localStorage.setItem('userMark', json, { expires: 999999999 });
        $('#marksModal').fadeToggle(1000);
        location.reload();
    });
    // 批量模态框取消按钮的操作
    $('#marksModal .cancel').click(function () {
        $('#marksModal').hide(1000)
    });

    var url = window.location.href;
    var urlstr = url.split("/");
    var urls = '';
    if (urlstr[2]) {
        urls = urlstr[0]+'//'+urlstr[2];
    }

    // 本地标记初始化
    $.each(userMark, function(index, value){

        let $user=$("a[href='/user/"+index+"']:not(.avatar,.focus)");
        let $$user=$("a[href='"+urls+"/user/"+index+"']:not(.avatar,.focus)");
        if($user.length> 0){
            $user.css({"color":value.color});
            $user.after('<span style="color:'+value.color+'">['+value.mark+']</span>')
        }
        if($$user.length> 0){
            $$user.css({"color":value.color});
            $$user.after('<span style="color:'+value.color+'">['+value.mark+']</span>')
        }
        // 解决改bgmid的问题,但没有头像就失效了
        let len=$("a.avatar").length;
        for(let i=0;i<len;i++){
            let ava=$("a.avatar").eq(i);
            if(!ava.html()){
                continue;
            }
            if(ava.html().indexOf("/"+index+".jpg")>-1){
                let hrefVal=ava.attr("href");
                if(hrefVal.indexOf("/user/")==-1){
                    continue;
                }
                let split=hrefVal.split("/")
                let newIndex=split[split.length-1];
                let $user2=$("a[href='/user/"+newIndex+"']:not(.avatar,.focus)");
                let $$user2=$("a[href='"+urls+"/user/"+index+"']:not(.avatar,.focus)");
                if($user2.length> 0){
                    $user2.css({"color":value.color});
                    $user2.after('<span style="color:'+value.color+'">['+value.mark+']</span>')
                }
                if($$user2.length> 0){
                    $$user2.css({"color":value.color});
                    $$user2.after('<span style="color:'+value.color+'">['+value.mark+']</span>')
                }
                break;
            }
        }
    });

    // 外部标记初始化
    let initVulgar=function(){
        let len=$("a.avatar").length;
        for(let i=0;i<len;i++){
            let ava=$("a.avatar").eq(i);
            let hrefVal=ava.attr("href");
            if(hrefVal.indexOf("/user/")==-1){
                continue;
            }
            let split=hrefVal.split("/");
            let newIndex=split[split.length-1];

            let imgUrl=ava.find("span").css("background-image");
            if(!imgUrl){
                continue;
            }
            let oldSplit=imgUrl.split("/");
            let oldTempSplit=oldSplit[oldSplit.length-1].split(".");
            let index=oldTempSplit[0];
            //没有头像无法获得原始bgmId
            if(index=='icon'){
                index=newIndex;
            }

            initMonster(index,newIndex);

        }
    }

    let setMonsterHtml=function(monster,bgmId,newBgmId){
        let $user2=$("a[href='/user/"+newBgmId+"']:not(.avatar,.focus,.monster)");
        let $$user2=$("a[href='"+urls+"/user/"+bgmId+"']:not(.avatar,.focus,.monster)");
        if(monster){
            let monsterHtml=getMonsterHtml(monster);
            if($user2.length> 0){
                if(monster.color){
                    $user2.css({"color":monster.color});
                }
                $user2.addClass("monster");
                $user2.after(monsterHtml);
            }
            if($$user2.length> 0){
                if(monster.color){
                    $$user2.css({"color":monster.color});
                }
                $user2.addClass("monster");
                $$user2.after(monsterHtml);
            }
        }
    }

    let getColor=function(score){
        let color="black";
        if(score<-5){
            color="red";
        }else if(score<-2){
            color="hotPink";
        }else if(score<0){
            color="lightPink";
        }else if(score==0){
            color="black";
        }else if(score<=2){
            color="lightGreen";
        }else if(score<=5){
            color="lawnGreen";
        }else if(score<=10){
            color="green";
        }
        return color;
    }
    let getMonsterHtml=function(monster){
        if(monster){
            let nameColor=getColor(monster.score);
            monster.color=nameColor;
            let type="";
            if(monster.type.field=="SLAVE"){
                type=",主号:";
                if(monster.masterId){
                    type+='<a href="/user/'+monster.master.bgmId+'">'+monster.master.name+'</a>';
                }else{
                    type+="未知";
                }
            }
            let mcs="";
            if(monster.mcs&&monster.mcs.length>0){
                mcs=' ';
                let high='';
                let middle='';
                let low='';
                let unknown='';
                for(let i=0;i<monster.mcs.length;i++){
                    let mc=monster.mcs[i];
                    cliqueMap[mc.clique.id]=mc.clique;
                    let mCStatus='';
                    if(mc.mCStatus.field=="JOIN"){
                    }else if(mc.mCStatus.field=='SUS_JOIN'){
                        mCStatus='疑似';
                    }else{
                        continue;
                    }
                    if(mc.level.field=='HIGH'){
                        high+='<span style="color:red" class="cliqueTipBtn" cliqueId="'+mc.clique.id+'">'+mCStatus+'【'+mc.clique.name+'】高级成员</span>,';
                    }else if(mc.level.field=='MIDDLE'){
                        middle+='<span style="color:hotPink" class="cliqueTipBtn" cliqueId="'+mc.clique.id+'">'+mCStatus+'【'+mc.clique.name+'】中级成员</span>,';
                    }else if(mc.level.field=='LOW'){
                        low+='<span style="color:lightPink" class="cliqueTipBtn" cliqueId="'+mc.clique.id+'">'+mCStatus+'【'+mc.clique.name+'】低级成员</span>,';
                    }else if(mc.level.field=='UNKNOWN'){
                        unknown+='<span style="color:black" class="cliqueTipBtn" cliqueId="'+mc.clique.id+'">'+mCStatus+'【'+mc.clique.name+'】成员</span>,';
                    }
                }
                mcs+=high+middle+low+unknown;
                mcs=mcs.substring(0, mcs.length - 1);
            }
                    //(老悠 友好度:-10分,主号:xxx) 【牵手家族】高级成员、疑似【XX家族】中级成员
            return '<span style="color:'+nameColor+'" class="monsterTipBtn" bgmId="'+monster.bgmId+'">('+monster.name+type+')</span>'+mcs+'  ';
        }else{
            return "";
        }

    }

    let monsterMap={};
    let cliqueMap={};


    let initMonster=function(bgmId,newBgmId){
        if(!bgmId||!newBgmId){
            return;
        }
        let monster=monsterMap[newBgmId];
        if(!monster){
            monsterMap[newBgmId]={data:null};
            $.get('https://58.218.111.242:380/yodb/api/anon/vulgar/monster/vo/detailByBgmId/'+bgmId, function(res){
                if(!res||!res.data){
                    if(newBgmId!=bgmId){
                        $.get('https://58.218.111.242:380/yodb/api/anon/vulgar/monster/vo/detailByBgmId/'+newBgmId, function(res){
                            monsterMap[newBgmId]=res;
                            setMonsterHtml(res.data,bgmId,newBgmId);
                        });
                    }
                }else{
                    monsterMap[newBgmId]=res;
                    setMonsterHtml(res.data,bgmId,newBgmId);
                }
            });
        }
    }

async function executeAsyncTask() {
  await initVulgar();
}

executeAsyncTask();

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址