您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Benachrichtigung bei Erwähnung in der SB oder einer neuen PN und Userauswahl mit @ in der SB
当前为
- // ==UserScript==
- // @name BS Notification
- // @namespace https://bs.to/
- // @version 3.5
- // @description Benachrichtigung bei Erwähnung in der SB oder einer neuen PN und Userauswahl mit @ in der SB
- // @author Asu
- // @match https://bs.to
- // @match https://bs.to/home
- // @icon https://bs.to/favicon.ico
- // @require https://greasyfork.org/scripts/368877-bs-script-library/code/BS_Script_Library.js?version=601546
- // @grant none
- // ==/UserScript==
- // Andere Sounds:
- // Ding: https://www.myinstants.com/media/sounds/ding_2.mp3
- // Forum Notification: https://board.bs.to/applications/core/interface/sounds/notification.mp3
- // Surprise Motherfucker: https://dl.dropboxusercontent.com/content_link/0sJVLvb4JIFKg5IavxBUmVAkHFUyZ91AfsNs6PXnNSrlaQmpVQpLlWrrfzUC7pQD/file?dl=0&duc_id=dropbox_duc_id
- var sound = new Audio("https://board.bs.to/applications/core/interface/sounds/notification.mp3");
- var customuserarray=[];
- var username=document.getElementById("navigation").children[0].childNodes[1].innerText;
- var userpattern = "@" + username;
- var regex = new RegExp(userpattern, "ig");
- function x (){
- 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>");
- }
- }
- }
- function checkMessages() {
- let xhr = new XMLHttpRequest();
- xhr.open('GET', 'https://bs.to/messages', true);
- xhr.onload = () => {
- let div = document.createElement('div');
- div.innerHTML = xhr.responseText;
- let unread = div.querySelectorAll('.unread');
- let messages = (window.localStorage.messages) ? JSON.parse(window.localStorage.messages) : [];
- if(unread.length > 0) {
- for(let i = 0; i < unread.length; i++) {
- let msg = new Message({
- id: unread[i].children[1].children[0].getAttribute('href').split('/')[unread[i].children[1].children[0].getAttribute('href').split('/').length-1].split(':')[1],
- subject: unread[i].children[1].children[0].innerText,
- url: "https://bs.to/" + unread[i].children[1].children[0].getAttribute('href'),
- from: unread[i].children[2].children[0].innerText,
- to: unread[i].children[3].children[0].innerText,
- timestamp: unread[i].querySelector('time').innerText,
- title: `Neue Nachricht von ${unread[i].children[2].children[0].innerText}`
- });
- if (!(messages.some(e => e.id === msg.id))) {
- msg.notify();
- messages.push(msg);
- }
- }
- window.localStorage.messages = JSON.stringify(messages);
- }
- };
- xhr.send();
- }
- try{
- username=document.getElementById("navigation").children[0].childNodes[1].innerText;
- }catch(err){
- console.err(err);
- }
- if (!Array.prototype.remI) {
- var ars = ["Array", "HTMLCollection"];
- for (var i = 0; i < ars.length; i++) {
- Object.defineProperty(eval(ars[i]).prototype, "remI", {
- enumerable: false,
- value: function (index) {
- for (var 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) {
- var index = -1;
- for (var 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;
- }
- });
- }
- }
- (function() {
- 'use strict';
- let posts = document.getElementById('sbPosts');
- posts.addEventListener("DOMNodeInserted", (a,b) => {
- if(a.target.localName == "dd" && regex.test(a.target.innerHTML))
- {
- x();
- let datauser = a.target.previousSibling.dataset.user;
- let title = (datauser != undefined) ? datauser : "Neue Benachrichtigung";
- let options = {
- body: a.target.innerText,
- icon: "https://bs.to/favicon.ico",
- };
- sound.play();
- let n = new Notification(title, options);
- }
- });
- // Your code here...
- setInterval(checkMessages, 1000*3);
- x();
- //übernommener code:
- setTimeout(function(){
- try{
- username=document.getElementById("navigation").children[0].childNodes[1].innerText;
- }catch(err){}
- var sB=$(sbMsg)[0];
- var par=sB.parentElement;
- sB.oninput=function(a,b,c){
- var usercontainer=$(sbUserCont)[0].children;
- var onlineNames=[];
- for(var i=par.children.length-1;i>-1;i--){
- if(par.children[i].localName==="li12"){
- par.children[i].remove();
- }
- }
- for(var 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);
- }
- }
- }
- var active=$(sbPosts)[0].children;
- for(var 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){
- var field=document.createElement("li12");
- field.style.width="200px";
- var height=onlineNames.length*20+20;
- var 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(var j=0;j<onlineNames.length;j++){
- var 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=function(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(var i=par.children.length-1;i>-1;i--){
- if(par.children[i].localName==="li12"){
- par.children[i].remove();
- }
- }
- setTimeout(function(sB){
- sB.focus();
- sB.selectionStart=sB.value.length;
- sB.selectionEnd=sB.value.length;
- },1,sB);
- }
- if(a.keyCode==13){
- return Shoutbox.checkEnter(a);
- }
- };
- },1000);
- })();