Greasy Fork is available in English.

贴吧小助手

自动顶贴回复(立即回复)、移除贴吧列表和帖子内部广告、移除碍眼模块

/*!
// ==UserScript==
// @name          贴吧小助手
// @namespace     https://github.com/maomao1996/tampermonkey-scripts
// @version       0.6.3
// @description   自动顶贴回复(立即回复)、移除贴吧列表和帖子内部广告、移除碍眼模块
// @icon          https://tb1.bdstatic.com/tb/favicon.ico
// @author        maomao1996
// @include       *://tieba.baidu.com/*
// @grant         GM_registerMenuCommand
// @grant         GM_notification
// @grant         GM_addStyle
// @require       https://greasyfork.org/scripts/398240-gm-config-zh-cn/code/G_zh-CN.js
// ==/UserScript==
*/
;
(function () {
    'use strict';
    var GMConfigOptions = {
        id: 'Helper_Cfg',
        title: '贴吧小助手',
        css: '#Helper_Cfg .config_var textarea{max-width: 100%; width: 100%; min-height: 120px;} #Helper_Cfg .inline {padding-bottom:0px;}#Helper_Cfg .config_var {margin-left: 20px;margin-right: 20px;} #Helper_Cfg input[type="checkbox"] {margin-left: 0px;vertical-align: top;} #Helper_Cfg input[type="text"] {width: 60px;} #Helper_Cfg {background-color: lightblue;} #Helper_Cfg .reset_holder {float: left; position: relative; bottom: -1.2em;}',
        frameStyle: {
            zIndex: '1314520',
            width: '400px',
            height: '520px'
        },
        fields: {
            removeAd: {
                section: ['', '全局设置'],
                label: '移除列表和详情页广告',
                labelPos: 'right',
                type: 'checkbox',
                default: true
            },
            removeEyesore: {
                label: '移除碍眼模块(app下载、勋章、送礼物、游戏按钮等)',
                labelPos: 'right',
                type: 'checkbox',
                default: true
            },
            responseTimeMin: {
                section: ['', '自动顶贴相关设置'],
                label: '顶帖最小间隔(分钟)',
                labelPos: 'left',
                type: 'unsigned int',
                min: 1,
                default: 1
            },
            responseTimeMax: {
                label: '顶帖最大间隔(分钟)',
                type: 'unsigned int',
                min: 1,
                default: 30
            },
            responseMode: {
                label: '顶贴模式选择',
                labelPos: 'left',
                type: 'select',
                options: ['自定义模式', '网络语句模式'],
                default: '网络语句模式'
            },
            customResponseText: {
                label: '自定义模式回复内容(请按如下格式输入)',
                type: 'textarea',
                default: "\u6C99\u53D1\n\u9876\n\u9876~"
            }
        },
        events: {
            save: function () {
                location.reload();
                G.close();
            }
        }
    };
    var G = GM_config;
    G.init(GMConfigOptions);
    GM_registerMenuCommand('设置', function () { return G.open(); });
    var CONFIG = {
        STATUS: false,
        TIME_MIN: Number(G.get('responseTimeMin')),
        TIME_MAX: Number(G.get('responseTimeMax')),
        TEXT: G.get('customResponseText').split('\n'),
        timer: null
    };
    var pathname = location.pathname;
    var message = function (text) {
        GM_notification({ timeout: 2e3, text: text });
    };
    var random = function (lower, upper, floating) {
        if (floating) {
            var rand = Math.random();
            var randLength = "".concat(rand).length - 1;
            return Math.min(lower + rand * (upper - lower + parseFloat("1e-".concat(randLength))), upper);
        }
        return lower + Math.floor(Math.random() * (upper - lower + 1));
    };
    var removeHtmlElement = function (selector) {
        selector.each(function () {
            $(this).remove();
        });
    };
    var hideHtmlElement = function (selector) {
        return selector.join(',') + '{display:none !important;}';
    };
    var styles = [
        '.core_title.core_title_theme_bright, .core_title.core_title_theme_bright .quick_reply {display: flex;}',
        '.core_title.core_title_theme_bright .core_title_txt {flex: 1}',
        '.core_title.core_title_theme_bright .btn-small {margin-left: 10px;padding-top: 3px;padding-bottom: 3px;}'
    ].join('');
    if (G.get('removeEyesore')) {
        styles += hideHtmlElement([
            '.u_member',
            '.celebrity',
            '.app_download_box',
            '.tbui_aside_fbar_button.tbui_fbar_down',
            'tbui_fbar_props',
            '.tbui_fbar_tsukkomi',
            '.icon_wrap.icon_wrap_theme1',
            '#j_navtab_game',
            '.post-foot-send-gift-btn',
            '.tb_poster_placeholder'
        ]);
    }
    var autoResponse = function () {
        var $titleBtn = $('.core_title_btns');
        if (!$titleBtn.length) {
            return;
        }
        var appendResponseBtn = function () {
            if (!$('#ding_btn').length) {
                $('#quick_reply').after("<a id=\"ding_btn\" rel=\"noopener\" class=\"btn-sub btn-small\">".concat(CONFIG.STATUS ? '关闭' : '开启', "\u81EA\u52A8\u9876\u8D34\u56DE\u590D</a>"));
            }
            if (CONFIG.STATUS && !$('#reply_immediate').length) {
                $('#ding_btn').after('<a id="reply_immediate" rel="noopener" class="btn-sub btn-small">立即回复(重新计时)</a>');
            }
        };
        appendResponseBtn();
        var responseObserver = new MutationObserver(function (mutationsList) {
            mutationsList.forEach(function (mutation) {
                if (mutation.type === 'childList') {
                    appendResponseBtn();
                }
            });
        });
        responseObserver.observe($titleBtn[0], {
            childList: true
        });
        var runResponse = function () {
            if (!CONFIG.STATUS) {
                return;
            }
            var selectors = {
                editor: '#j_editor_for_container',
                submit: '.lzl_panel_submit.j_lzl_p_sb'
            };
            try {
                if (!$('#j_editor_for_container:visible').length) {
                    var lzlPSelector = '.j_lzl_p.btn-sub.pull-right:visible';
                    if ($(lzlPSelector).length) {
                        $(lzlPSelector).eq(0).trigger('click');
                    }
                    else if ($('a.lzl_link_unfold:visible').length) {
                        $('a.lzl_link_unfold:visible').eq(0).trigger('click');
                    }
                    else {
                        $('#quick_reply').trigger('click');
                        selectors.editor = '#ueditor_replace';
                        selectors.submit = '.j_submit.poster_submit';
                    }
                }
            }
            catch (error) {
                message('自动回复出错,请刷新页面后重试!');
                console.log('runResponse', error);
            }
            var submit = function (text) {
                $(selectors.editor).text(text);
                $(selectors.submit).trigger('click');
                var time = random(CONFIG.TIME_MIN, CONFIG.TIME_MAX, true) * 6e4;
                console.log("".concat(time / 1e3, "\u79D2\u540E\u81EA\u52A8\u9876\u8D34\u56DE\u590D"));
                CONFIG.timer = setTimeout(function () {
                    runResponse();
                }, time);
            };
            if (G.get('responseMode') === '网络语句模式') {
                $.ajax({
                    type: 'GET',
                    url: 'https://v1.hitokoto.cn',
                    dataType: 'json',
                    success: function (data) {
                        submit(data.hitokoto);
                    },
                    error: function (_jqXHR, textStatus, errorThrown) {
                        console.error(textStatus, errorThrown);
                    }
                });
            }
            else {
                var index = random(0, CONFIG.TEXT.length - 1);
                submit(CONFIG.TEXT[index]);
            }
        };
        var clearTimer = function () {
            clearTimeout(CONFIG.timer);
            CONFIG.timer = null;
        };
        if (CONFIG.STATUS) {
            setTimeout(function () {
                runResponse();
                message('已开启自动顶贴回复');
            }, 1e3);
        }
        $(document).on('click', '#ding_btn', function () {
            if (CONFIG.STATUS) {
                CONFIG.STATUS = false;
                $(this).text('开启自动顶贴回复');
                $('#reply_immediate').remove();
                clearTimer();
                message('已关闭自动顶贴回复');
            }
            else {
                CONFIG.STATUS = true;
                $(this).text('关闭自动顶贴回复');
                runResponse();
                appendResponseBtn();
                message('已开启自动顶贴回复');
            }
        });
        $(document).on('click', '#reply_immediate', function () {
            clearTimer();
            runResponse();
        });
    };
    if (pathname === '/f') {
        console.log('进入贴吧列表');
        if (!G.get('removeAd')) {
            return;
        }
        styles += hideHtmlElement([
            '.bus-top-activity-wrap',
            '#thread_list > div:not([data-tid])',
            '.fengchao-wrap-feed',
            '[id="pagelet_frs-aside/pagelet/aside_ad"]',
            '#aside-ad',
            '#branding_ads'
        ]);
    }
    GM_addStyle(styles);
    $(window).on('load', function () {
        if (/^\/p\/\d{1,}$/.test(pathname)) {
            console.log('进入贴子详情');
            autoResponse();
            G.get('removeAd') && removeHtmlElement($('div[ad-dom-img="true"]'));
        }
    });
})();