BS Notification

Benachrichtigung bei Erwähnung in der SB oder einer neuen PN und Userauswahl mit @ in der SB

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         BS Notification
// @namespace    https://bs.to/
// @version      4.5.1
// @description  Benachrichtigung bei Erwähnung in der SB oder einer neuen PN und Userauswahl mit @ in der SB
// @author       Asu_nyan
// @match        https://bs.to/*
// @icon         https://bs.to/favicon.ico
// @grant        none
// @require      https://greasyfork.org/scripts/375096-bs-library/code/BS_Library.js?version=755975
// ==/UserScript==
// jshint esversion: 6
const BS = window.BS;
let username = BS.Module.Get('.navigation strong').innerText;
let alternatives = [`@${username}`];
let userpattern = `(${ alternatives.join('|') })`;
let regex = new RegExp(userpattern, "ig");
let posts = BS.Module.Get('#sbPosts');
posts.addEventListener("DOMNodeInserted", (a,b) => {
    if(a.target.localName == "dd" && regex.test(a.target.innerHTML))
    {
        occurrence();
        let datauser = a.target.previousSibling.dataset.user;
        let time = a.target.previousSibling.getElementsByTagName('time')[0].innerText;
        let title = (datauser != undefined) ? datauser : "Du wurdest erwähnt.";
        let options = {
            body: a.target.innerText + "\r\n" + time,
            icon: "https://bs.to/favicon.ico",
        };
        new Notification(title, options);
    }
});

if (!Array.prototype.remI) {
	let ars = ["Array", "HTMLCollection"];
	for (let i = 0; i < ars.length; i++) {
		Object.defineProperty(eval(ars[i]).prototype, "remI", {
			enumerable: false,
			value: (index) => {
				for (let i = 0; i < this.length; i++) {
					if (i > index) {
						this[i - 1] = this[i];
					}
				}
				this.length--;
			}
		});
		Object.defineProperty(eval(ars[i]).prototype, "f", {
			enumerable: false,
			value: function findArray(f, equal = false, path = "", first = true) {
				let index = -1;
				for (let i = 0; i < this.length; i++) {
					if (equal) {
						if (f === eval("this[i]" + path)) {
							index = i;
							if (first) {
								return index;
							}
						}
					} else {
						if (f.toString().indexOf(eval("this[i]" + path)) > -1) {
							index = i;
							if (first) {
								return index;
							}
						}
					}
				}
				return index;
			}
		});
	}
}

(() => {
    'use strict';
    if (Notification.permission !== 'denied' || Notification.permission === 'default') {
        Notification.requestPermission((permission) => {
            if (permission === 'granted') {
                console.log(`Notification Permission: ${ permission }`);
            }
        });
    }
    setInterval(BS.PN.NotifyIfNew, 5000);
    occurrence();
    setTimeout(()=>{
        let sB=BS.Module.Get('#sbMsg');
        let par=sB.parentElement;
        sB.oninput=(a,b,c)=>{
            let usercontainer=BS.Module.Get('#sbUser > ul').children;
            let onlineNames=[];
            for(let i=par.children.length-1;i>-1;i--){
                if(par.children[i].localName==="li12"){
                    par.children[i].remove();
                }
            }
            for(let t=0;t<usercontainer.length;t++){
                if(sB.value.length>2){
                    if(sB.value.indexOf("@")>-1 && usercontainer[t].children[0].textContent.toLowerCase().indexOf(sB.value.split("@")[1].toLowerCase())===0){
                        onlineNames.push(usercontainer[t].children[0].textContent);
                    }
                }
            }
            let active=BS.Module.Get('#sbPosts').children;
            for(let t=0;t<active.length;t+=2){
                if(onlineNames.f(active[t].children[0].textContent)>-1){
                    onlineNames.remI(onlineNames.f(active[t].children[0].textContent,true));
                    onlineNames.push(active[t].children[0].textContent);
                }else{
                    if(sB.value.length>2&&sB.value.indexOf("@")>-1 && active[t].children[0].textContent.toLowerCase().indexOf(sB.value.split("@")[1].toLowerCase())===0){
                        onlineNames.push(active[t].children[0].textContent);
                    }
                }

            }
            sB.onl=onlineNames;
            sB.index=0;
            if(sB.value.length>2&&onlineNames.length>0){
                let field=document.createElement("li12");
                field.style.width="200px";
                let height=onlineNames.length*20+20;
                let top=sB.offsetTop-(height)-5;
                field.style.position="absolute";
                field.style.top=top+"px";
                field.style.height=height+"px";
                field.style.left=sB.offsetLeft+"px";
                field.style.background="white";
                field.style.border="rgb(100, 160, 255) 1.5px solid";
                field.style.borderRadius= "4px";
                sB.fie=field;
                for(let j=0;j<onlineNames.length;j++){
                    let username=document.createElement("el");
                    username.innerText=onlineNames[j];
                    username.style.position="absolute";
                    username.style.top=j*20+8+"px";
                    username.style.left=20+"px";
                    username.style.width="160px";
                    username.style.color="black";
                    field.append(username);
                }
                par.append(field);
            }
        };
        sB.onkeydown=(a,b,c)=>{
            if(a.keyCode===38||a.keyCode===40){
                if(sB.fie.children[sB.index]){
                    sB.fie.children[sB.index].style.backgroundColor="white";
                }
                function index(plus){
                    if(plus){
                        sB.index++;
                        if(sB.index>sB.onl.length-1){
                            sB.index=0;
                        }
                    }else{
                        sB.index--;
                        if(sB.index==-1){
                            sB.index=sB.onl.length-1;
                        }
                    }
                }
                if(sB.index===undefined){
                    sB.index=0;
                }
                if(a.keyCode===38){
                    index(false);
                }else{
                    index(true);
                }
                sB.fie.children[sB.index].style.backgroundColor="rgb(100, 160, 255)";
                sB.value=sB.value.replace(sB.value.split("@")[1].split(" ")[0],sB.onl[sB.index]+" ");
            }else if(a.keyCode===9){
                //tab
                if(sB.onl.length===1){
                    sB.value=sB.value.replace(sB.value.split("@")[1].split(" ")[0],sB.onl[0]+" ");
                }else{
                    sB.value=sB.value.replace(sB.value.split("@")[1].split(" ")[0],sB.onl[sB.onl.length-1]+" ");
                }
                for(let i=par.children.length-1;i>-1;i--){
                    if(par.children[i].localName==="li12"){
                        par.children[i].remove();
                    }
                }
                setTimeout((sB)=>{
                    sB.focus();
                    sB.selectionStart=sB.value.length;
                    sB.selectionEnd=sB.value.length;
                },1,sB);
            }
            if(a.keyCode==13){
                return Shoutbox.checkEnter(a);
            }
        };
    },1000);
})();

function occurrence(){
    let posts = document.getElementById('sbPosts');
    let postsContent = posts.children;
    for(let i = 0; i < postsContent.length; i++){
        if(postsContent[i].localName == "dd"){
            postsContent[i].innerHTML = postsContent[i].innerHTML.replace(regex, "<i style='color:yellow'>@"+username+"</i>");
        }
    }
}