Douyu斗鱼 主播开播提醒 (新)

手动打开关注页面并放置在后台(https://www.douyu.com/directory/myFollow) 有主播开播/更改标题时自动发送通知提醒

// ==UserScript==
// @name         Douyu斗鱼 主播开播提醒 (新)
// @namespace    http://tampermonkey.net/
// @version      3.0
// @description  手动打开关注页面并放置在后台(https://www.douyu.com/directory/myFollow)  有主播开播/更改标题时自动发送通知提醒
// @author       hlc1209, P
// @match        https://www.douyu.com/directory/myFollow
// @grant GM_xmlhttpRequest
// @grant GM_openInTab
// @grant GM_notification
// ==/UserScript==

var baseURL = "https://douyu.com"
var save={}
var save_name={}
shim_GM_notification ()


/*--- Cross-browser Shim code follows:
Source: https://stackoverflow.com/questions/36779883/userscript-notifications-work-on-chrome-but-not-firefox
*/
function shim_GM_notification () {
    if (typeof GM_notification === "function") {
        return;
    }
    window.GM_notification = function (ntcOptions) {
        checkPermission ();

        function checkPermission () {
            if (Notification.permission === "granted") {
                fireNotice ();
            }
            else if (Notification.permission === "denied") {
                console.log ("User has denied notifications for this page/site!");
                return;
            }
            else {
                Notification.requestPermission ( function (permission) {
                    console.log ("New permission: ", permission);
                    checkPermission ();
                } );
            }
        }

        function fireNotice () {
            if ( ! ntcOptions.title) {
                console.log ("Title is required for notification");
                return;
            }
            if (ntcOptions.text && !ntcOptions.body) {
                ntcOptions.body = ntcOptions.text;
            }
            var ntfctn = new Notification (ntcOptions.title, ntcOptions);

            if (ntcOptions.onclick) {
                ntfctn.onclick = ntcOptions.onclick;
            }
            if (ntcOptions.timeout) {
                setTimeout ( function() {
                    ntfctn.close ();
                }, ntcOptions.timeout);
            }
        }
    }
}

function append_notify(res){
    var status;
    for(var each in res.data.list){
        // for room status
        status=res.data.list[each]["show_status"]==1 && !res.data.list[each]["videoLoop"]
        if (!(res.data.list[each]["room_id"] in save)){
            save[res.data.list[each]["room_id"]] = status;
        }else if (save[res.data.list[each]["room_id"]]!=status){
            save[res.data.list[each]["room_id"]]=status
            if (status==1){
                var notificationDetails = function(){
                    var tempUrl = res.data.list[each]["url"]
                    return {
                        text:       '点击通知快速传送',
                        title:      res.data.list[each]["nickname"]+'开播了',
                        image:      res.data.list[each]["avatar_small"],
                        //timeout:    60000,
                        onclick:    function () {
                            console.log ("Notice clicked.");
                            GM_openInTab(baseURL+tempUrl, false);
                            //window.focus ();
                        }
                    }
                }()
                GM_notification (notificationDetails)
            }
        }


        // for room name changing
        if (!(res.data.list[each]["room_id"] in save_name)){
            save_name[res.data.list[each]["room_id"]] = res.data.list[each]["room_name"];
        }else if (save_name[res.data.list[each]["room_id"]]!=res.data.list[each]["room_name"]){
            save_name[res.data.list[each]["room_id"]] = res.data.list[each]["room_name"];
            var notificationDetails_name = function(){
                var tempUrl = res.data.list[each]["url"]
                return {
                    text:       res.data.list[each]["room_name"],
                    title:      res.data.list[each]["nickname"]+' 更改了房间标题',
                    image:      res.data.list[each]["avatar_small"],
                    //timeout:    60000,
                    onclick:    function () {
                        console.log ("Notice clicked.");
                        GM_openInTab(baseURL+tempUrl, false);
                        //window.focus ();
                    }
                }
            }()
            GM_notification (notificationDetails_name)
        }

    }
    console.log ('Following rooms checked');
}

function check(){
    console.log ('Following rooms checking');
    GM_xmlhttpRequest({
        method: 'GET',
        url: `https://www.douyu.com/wgapi/livenc/liveweb/follow/list?sort=0&cid1=0`,
        onload: response => {
            var res=JSON.parse(response.responseText)
            append_notify(res)
        }
    });
}

check()
function notifyTitle(s){
    GM_notification ({
        text:       "斗鱼开播提醒",
        title:      s,
        timeout:    1800,
        image: "https://img.douyucdn.cn/data/yuba/admin/2018/08/13/201808131555573522222945055.jpg?i=31805464339f469e0d3f992e565e261803",
        onclick:    function () {
                        console.log ("Notice clicked.");
                        GM_openInTab("https://www.douyu.com", false);
                        //window.focus ();
                    }
    })
}
notifyTitle('斗鱼开播提醒启动了')
//window.onbeforeunload = function(event){notifyTitle('开播提醒已退出')}
//window.onunload = function(event) {notifyTitle('斗鱼开播提醒已退出')}
window.setInterval(check,10000)