Greasy Fork

Greasy Fork is available in English.

贴吧小助手

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

/*!
// ==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       http://greasyfork.icu/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"]'));
        }
    });
})();