哔哩哔哩视频列表增强

修改视频合集长度_直播界面_评论区间隔

// ==UserScript==
// @name         哔哩哔哩视频列表增强
// @version      250625.1
// @description  修改视频合集长度_直播界面_评论区间隔
// @author       未完待笑(UnfiniSmile)
// @copyright    2025, UnfiniSmile (https://github.com/UnfiniSmile)
// @match        https://*.bilibili.com/*
// @grant        GM_addStyle
// @namespace http://tampermonkey.net/
// ==/UserScript==

(function() {
    'use strict';
    function videoComment(observer) {

        function tryObserve(root) {
            if (root) {
                observer.observe(root, {
                    childList: true,
                    subtree: true,
                })
            }
        }

        const comments = document.getElementsByTagName("bili-comments");
        for (const comment of comments) {
            const feed = comment?.shadowRoot?.children?.contents?.children?.feed;

            tryObserve(comment?.shadowRoot);

            if (!feed) {
                return;
            }
            for (const commentStack of feed.children) {
                const mainComment = commentStack.shadowRoot.children.comment;
                const replies = commentStack.shadowRoot.children?.replies;
                const roots = [];

                tryObserve(commentStack.shadowRoot);

                if (mainComment) {
                    roots.push(mainComment.shadowRoot);
                }

                if (replies) {
                    tryObserve(replies.children[0].shadowRoot);
                    for (const reply of replies.children[0].shadowRoot.querySelectorAll("bili-comment-reply-renderer")) {
                        roots.push(reply.shadowRoot)
                    }
                }
                for (const root of roots) {
                    tryObserve(root);
                }
            }
        }

    function queryShadowRoots(element, selectors) {
        let current = element;
        for (const selector of selectors) {
            if (!current) return null;
            current = current.shadowRoot ? current.shadowRoot.querySelector(selector) : current.querySelector(selector);
        }
        return current;
    }

    function commentStyles(root = document) {
        const biliCommentsList = root.querySelectorAll("bili-comments");
        if (!biliCommentsList.length) return;

        for (const biliComments of biliCommentsList) {
            const threadRenderers = biliComments.shadowRoot?.querySelectorAll("bili-comment-thread-renderer");
            if (!threadRenderers?.length) continue;

            for (const thread of threadRenderers) {
                const commentRenderers = thread.shadowRoot?.querySelectorAll("bili-comment-renderer");
                if (commentRenderers?.length) {
                    for (const renderer of commentRenderers) {
                        const bodyDiv = queryShadowRoots(renderer, ["#body"]);
                        if (bodyDiv && bodyDiv.style.paddingTop !== "0px") {
                            bodyDiv.style.paddingTop = "0px";

                            const headerDiv = bodyDiv.querySelector("#header");
                            if (headerDiv && headerDiv.style.marginBottom !== "-10px") {
                                headerDiv.style.marginBottom = "-10px";
                            }

                            const avatarLink = bodyDiv.querySelector("#user-avatar");
                            if (avatarLink && avatarLink.style.top !== "8px") {
                                avatarLink.style.top = "8px";
                            }
                        }
                        const ornamentDiv = bodyDiv.querySelector("#ornament");
                        if (ornamentDiv && ornamentDiv.style.top !== "-12px") {
                            ornamentDiv.style.top = "-12px";
                        }
                        const actionButton = renderer.shadowRoot?.querySelector("bili-comment-action-buttons-renderer");
                        if (actionButton?.shadowRoot && !actionButton.shadowRoot.querySelector("#custom-action-style")) {
                            const style = document.createElement("style");
                            style.id = "custom-action-style";
                            style.textContent = `:host { margin-top: -6px !important; }`;
                            actionButton.shadowRoot.appendChild(style);
                        }
                    }
                }

                const divElement = thread.shadowRoot?.querySelector("div#div");
                if (divElement && divElement.style.paddingBottom !== "0px") {
                    divElement.style.paddingBottom = "0px";
                }

                const repliesRenderer = thread.shadowRoot?.querySelector("bili-comment-replies-renderer");
                if (repliesRenderer?.shadowRoot) {
                    const replyRenderers = repliesRenderer.shadowRoot.querySelectorAll("bili-comment-reply-renderer");
                    replyRenderers.forEach(reply => {
                        const replyBody = reply.shadowRoot?.querySelector("#body");
                        if (replyBody && replyBody.style.padding !== "0px 0px 0px 34px") {
                            replyBody.style.padding = "0px 0px 0px 34px";
                        }
                        const actionButton = reply.shadowRoot?.querySelector("bili-comment-action-buttons-renderer");
                        if (actionButton?.shadowRoot && !actionButton.shadowRoot.querySelector("#custom-action-style")) {
                            const style = document.createElement("style");
                            style.id = "custom-action-style";
                            style.textContent = `:host { margin-top: -6px !important; }`;
                            actionButton.shadowRoot.appendChild(style);
                        }
                    });
                }
            }
        }
    }

commentStyles();
}
function start (){
    const commentObserver = new MutationObserver((mutations, observer) => {
    videoComment(commentObserver);
});
    commentObserver.observe(document.body, {
            childList: true,
            subtree: true,
        });
}

start();

    function applyStyles() {
        GM_addStyle('.video-sections-content-list {max-height: 450px !important; height: 450px !important; }');//24-7-14解决点击下一个视频失效的问题
        GM_addStyle('.video-pod .video-pod__body {max-height: 450px !important;}');//25-1-20fix video list invalid
        //修改bilibili直播界面
        GM_addStyle('.live-room-app .app-content .app-body {width: auto !important;max-width: 1620px!important;}');//24-7-9
        GM_addStyle('.live-room-app .app-content .app-body .player-and-aside-area {margin-bottom: 90px;}');//24-7-9
        GM_addStyle('.header-info-ctnr .rows-ctnr .lower-row .live-area .area-link {max-width: 144px !important;}');//分区文字显示24-9-5
        //修改视频列表宽度,以及解除视频列表字符长度限制
        GM_addStyle('.video-episode-card__info-title {width: auto !important;}');//24-4-11
        GM_addStyle('.first-line-left .first-line-title {max-width: 210px !important;}');//列表标题宽度max24-6-1
        //专栏评论大小
        GM_addStyle(`
            .opus-detail {width: 1080px;}
            .right-sidebar-wrap {margin-left: 1100px;}`);//25-06-24删除无用参数
    }//GM_addStyle('');
    window.addEventListener('load', function() {
        applyStyles();
    });
})();