// ==UserScript== // @name MPP tools // @description Room filter/sorting, clickable chat links // @version 0.2.0 // @author Jakob // @include *mppclone.com/* // @include *multiplayerpiano.com/* // @include *multiplayerpiano.net/* // @namespace https://greasyfork.org/users/779512 // @downloadURL none // ==/UserScript== /* globals MPP, $ */ const filter = /wolf|\brp\b|blm|bts|fna?f|anime|role|autoplay|sans|furry|afton|[üğş]|[一-龯]|[\u3131-\uD79D]|[а-я]|[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195]|\u203B/iu; MPP.client._events.ls.unshift((packet) => { packet.u = packet.u.filter(({ _id }) => !filter.test(_id)); packet.u.sort((a, b) => { if (a.banned || b.banned) return 1; return b.count - a.count; }); }); MPP.client.on('a', () => { const msgElem = $('.message').last(); msgElem.html(linkify(msgElem.text())); }); function linkify(text) { let replacedText; // URLs starting with http://, https://, or ftp:// const replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim; replacedText = text.replace(replacePattern1, '$1'); // URLs starting with "www." (without // before it, or it'd re-link the ones done above). const replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim; replacedText = replacedText.replace(replacePattern2, '$1$2'); // Change email addresses to mailto:: links. const replacePattern3 = /(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/gim; replacedText = replacedText.replace(replacePattern3, '$1'); return replacedText; }