Alerts when new messages arrive in Discord chat
// ==UserScript==
// @name Discord New Message Alert
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Alerts when new messages arrive in Discord chat
// @author r!PsAw
// @match https://discord.com/channels/*
// @match https://diep.io/*
// @grant GM_setValue
// @grant GM_getValue
// @grant unsafeWindow
// @run-at document-start
// @license balls
// ==/UserScript==
const win = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window;
//detect if we're on discord or diep.io
function where_are_we_rn(){
switch(win.location.origin){
case "https://discord.com":
return "discord";
case "https://diep.io":
return "diepio";
default:
return "unknown";
}
}
const origin = where_are_we_rn();
//logic for discord
let scrollerInner;
let old = new Set();
function find_scrollerInner(){
if(document.querySelector('[class^="scrollerInner__"]')){
scrollerInner = document.querySelector('[class^="scrollerInner__"]')
return;
}
setTimeout(find_scrollerInner, 200);
}
find_scrollerInner();
function check_classes(element, goal){
for(let _class of element.classList){
if(_class.includes(goal)) return true;
}
return false;
}
function check_id(element, goal) {
return element.id && element.id.includes(goal);
}
function is_message(element){
return (element.innerText.length > 0 && element.nodeName === 'SPAN');
}
function read_messages(){
if(!scrollerInner || origin != 'discord') return;
for(let msg of scrollerInner.children){
if(check_id(msg, 'chat-messages-')){
let children = msg.children;
for(let child of children){
if(check_classes(child, 'message__')){
let children1 = child.children;
for(let child1 of children1){
if(check_classes(child1, 'contents_')){
let children2 = child1.children;
for(let child2 of children2){
if(check_id(child2, 'message-content-')){
let children3 = child2.children;
for(let child3 of children3){
if(is_message(child3)){
//console.log(child3.innerText);
if(!old.has(child3.innerText)){
old.add(child3.innerText);
GM_setValue("Last Message", child3.innerText);
}
}
}
}
}
}
}
}
}
}
}
}
setInterval(read_messages, 1000);
//logic for diep.io
let last_message = '';
function display_new_message(){
if(!GM_getValue("Last Message") || origin != 'diepio') return;
const stored_message = GM_getValue("Last Message");
if(win.input && win.input.doesHaveTank() && stored_message !== last_message){
console.log(stored_message, last_message, stored_message !== last_message);
last_message = stored_message;
win.input.inGameNotification(`[Discord -> Diep.io] ${stored_message}`);
}
}
setInterval(display_new_message, 1000);