Greasy Fork is available in English.

bimibimi_next_episode

bimibimi auto next episode

// ==UserScript==
// @name           bimibimi_next_episode
// @name:zh-CN        bimibimi自动下集
// @name:zh-TW        bimibimi自動下集
// @namespace      bimibimi_next_episode
// @description    bimibimi auto next episode
// @description:zh-CN bimibimi自动播放下集
// @description:zh-TW bimibimi自動播放下集
// @include        http://49.234.56.246/danmu/play.php?url=*
// @include        http://www.bimiacg.com/bangumi/*
// @run-at      document-end
// @grant         GM_registerMenuCommand
// @grant         GM_setValue
// @grant         GM_getValue
// @author      zhuzemin
// @version     1.00
// @supportURL  https://github.com/zhuzemin
// ==/UserScript==
//config
let config = {
        'debug': false,
        'skip': GM_getValue('skip') || 0.0
}
config.skip = parseFloat(config.skip);
let debug = config.debug ? console.log.bind(console) : function () {
};
// prepare UserPrefs
setUserPref(
        'skip',
        config.skip,
        'Skip ending',
        `Skip ending, input ending seconds. *effect after reload`,
);

let init = function () {
        if (window.self === window.top) {
                debug('main');
                window.addEventListener('message', function (e) {
                        debug(e.data);
                        if (e.data == 'end') {
                                let current = parseInt(window.location.href.match(/\/(\d+)\/?$/)[1]);
                                let list = document.querySelector('ul.player_list');
                                if (current < list.childNodes.length) {
                                        let next = current + 1;
                                        window.location.href = window.location.href.replace(/\/(\d+)\/?$/, '/' + next + '/');
                                }
                        }
                });
        }
        else {
                debug('iframe');
                let interval = setInterval(() => {
                        let video = document.querySelector('#video');
                        if (video != null) {
                                debug('suc');
                                clearInterval(interval);
                                let timer = setInterval(() => {
                                        debug(video.currentTime);
                                        debug(video.currentTime + config.skip);
                                        if (video.currentTime + config.skip >= video.duration) {
                                                debug('end');
                                                clearInterval(timer);
                                                parent.postMessage('end', "*");
                                        }

                                }, 1000);
                        }

                }, 1000);
        }
}
window.addEventListener('DOMContentLoaded', init);
/**
 * Create a user setting prompt
 * @param {string} varName
 * @param {any} defaultVal
 * @param {string} menuText
 * @param {string} promtText
 * @param {function} func
 */
function setUserPref(varName, defaultVal, menuText, promtText, func = null) {
        GM_registerMenuCommand(menuText, function () {
                var val = prompt(promtText, GM_getValue(varName, defaultVal));
                if (val === null) { return; }  // end execution if clicked CANCEL
                GM_setValue(varName, val);
                if (func != null) {
                        func(val);
                }
        });
}