您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds several useful features to the chat
// ==UserScript== // @name OWOP Chat Utils // @namespace https://gf.qytechs.cn/en/users/1502179/ // @version 1.5.2 // @description Adds several useful features to the chat // @author NothingHere7759 // @match https://ourworldofpixels.com/* // @exclude https://ourworldofpixels.com/api* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA1LjEuOWxu2j4AAAC2ZVhJZklJKgAIAAAABQAaAQUAAQAAAEoAAAAbAQUAAQAAAFIAAAAoAQMAAQAAAAIAAAAxAQIAEAAAAFoAAABphwQAAQAAAGoAAAAAAAAA2XYBAOgDAADZdgEA6AMAAFBhaW50Lk5FVCA1LjEuOQADAACQBwAEAAAAMDIzMAGgAwABAAAAAQAAAAWgBAABAAAAlAAAAAAAAAACAAEAAgAEAAAAUjk4AAIABwAEAAAAMDEwMAAAAAACMojeFEB6NgAAArJJREFUeF7t28uNE1EQQFGbCFgzgZDGiEARaRAIrCeDYd8CqawpfP05Z9kLd7d99RZV8vn0IH79+Px+vPbIXl7fzsdr9+jT8QJckwBJCZCUAEkJkJQASQmQlABJCZBUNk2vNhdfvn47Xropv39+P166imqz4gQkJUBSAiQlQFICJCVAUgIkJUBSAiS1Pv3e3nA82+Zi+323n297Y+IEJCVAUgIkJUBSAiQlQFICJCVAUgIkNZ5qVxuO7Un+9L5Tt/58U9vvMd2YOAFJCZCUAEkJkJQASQmQlABJCZCUAEmNptWnCzYh00n+9uR92/Q9KtPvb/s9pve1CeEuCJCUAEkJkJQASQmQlABJCZCUAEmdpxuOqenkfTpRr0zf49ls/25OQFICJCVAUgIkJUBSAiQlQFICJCVAUuNNSLUZ2J68b7/H9vNt237fqen34gQkJUBSAiQlQFICJCVAUgIkJUBSAiR185uQynSS/yi2f9/p9+cEJCVAUgIkJUBSAiQlQFICJCVAUgIktb4JmU7Ap6b3ndp+vmcz/T2m37MTkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkJQASQmQlABJCZCUAEkJkNT4PyFT0/8MVKb/VeA6nICkBEhKgKQESEqApARISoCkBEhKgKTOxwv/Mt2YbG9CppuL6X2nn8fHvLy+jdpyApISICkBkhIgKQGSEiApAZISICkBkhpNq08XbEKmppuLio3Jx9iEcBcESEqApARISoCkBEhKgKQESEqApEbT6kvYmDy26YZjyglISoCkBEhKgKQESEqApARISoCkBEhqdap9ie2NyZTNyt9tbzimnICkBEhKgKQESEqApARISoCkBEhKgKSS6ff/UG1WKtXmYpsTkJQASQmQlABJCZCUAEkJkJQASQmQ1B8g1YFmQv53bQAAAABJRU5ErkJggg== // @grant none // @license MIT // ==/UserScript== // CREDITS: Advice about the code - NekoNoka // Beta testers - Rainbow, SyntexPr /* CHANGELOG Quick Tell 1.0 - Added /q and /qid Group Chat 1.0 - Added /g 1.0 - Combined Quick Tell and Group Chat into Chat Utils 1.1 - Minor bugfixes for /g tell, /qid, /q and /help Added /qgname and /qg 1.2 - Added /r 1.3 - Added /l, /lset and /clear Improved command messages Added aliases and changed some of the default commands 1.3.1 - Changed some command messages Colorful Chat 0.0 - Added red, orange, gold, yellow, lime, green, cyan, blue, purple, violet, pink, magenta, brown, gray, grey, tree, grass, Mr. Smiles, Forest Land and Riverland Colorful Chat 0.1 - Added white, black, rgb, Rainbow, Monochrome, Romaniaball, NothingHere, Diermania, SyntexPr, Trion, Coalition, Nortia, Vinland and [Server] Fixed Mr. Smiles not having chat mentions 1.3.2 - Changed /clear to actually clear the chat Colorful Chat 0.1.1 - Added RSSR, R55R, Moth, Potassium, Atlan, ATLaDOS, :D Anon, St. and Orang Colorful Chat 1.0 - Rewrote the script with RegEx Added crimson, indigo, fuchsia, mauve, South Nortia, Norisia and Evermore Added support for hex color codes Fixed :D Anon, St. and Моль not being colored Colorful Chat 1.0.1 - Added water, :D-Anon, USRNSNN and URNNSN Fixed some color names not working 1.4 - Incorporated Colorful Chat into Chat Utils Added /color Added chat mentions for colorful chat 1.4.1 - Fixed a bug with the /help message 1.4.2 - Added lava, fire, HungaryBall, Rainbowball, Hungary, MagyarLabda, Magyar, Romania, Europe RP and Cyan (nickname) to colorful chat Changed crimson, orange, lime, indigo and Trion for colorful chat 1.5 - Added an icon to the script Added /yell Removed the ability for players to execute their own html Fixed the "unknown command" message when using /help for commands added by the script Fixed /group ids showing a stray comma when the group it's being used on has only one player Changed /help messages to be more similar to the vanilla ones Added Coali, EU, Slyntex, Syntaxis, Gabriel, CLN, CoalCRCition and Unbidden to colorful chat Changed Rainbow for colorful chat Fixed NothingHere7759 not being colored properly 1.5.1 - Cleaned up some of the code Added /mute and /unmute Added SAR, Shadow Taile, West Vlandia, East Vlandia, Sangsa, Kwapt, Siremia, Magyarország, România, Mothership, MothMethMyth, Mothylamine and СинтексПр to colorful chat Changed CoalCRCition, Hungary, Hungaryball, Magyarlabda and Magyar for colorful chat Made some names get colored when used as nickname too Removed the /gq alias of /qg 1.5.2 - Added colorful chat for discord messages Added taumotons, Sisyphus Prime, Minos Prime, Russia, Germany, Potassium_l, Enderment, Xahh, LLG, NoNameZ, 16777216, NekoNoka, Toaster, C3phei, Taha Südenland, Martan, ReloopGD, Blake, Capa, Leg, Vvictor, Lapis, Stevesta, JPDLD, Amogusland, Doitshlænd, Lemon, Lemonwires, Tess, Helper, Cygnus, Shay, Neomoth, Eldit, Jigg, C-Yard, VGS, JJB, Norddex, 999, Nurutomo, Memelord, Randoof and Frick Verizon to colorful chat Added /nearby Changed Romaniaball for colorful chat Fixed some names not being colored if next to punctuation marks Fixed Rainbow, Rainbowball and Gabriel having two (M)'s, St. being colored when part of a word, and the space between "Shadow" and "Taile" getting removed */ 'use strict'; (() => { //Pre-installation const waitUntil = (probe, cb, t = 200) => { const id = setInterval(() => { try { if (probe()) { clearInterval(id); cb(); } } catch { } }, t); }; waitUntil( () => window.OWOP && (OWOP.chat.recvModifier !== undefined) && OWOP.misc?.world?.players && (OWOP.misc.chatSendModifier !== undefined), install ); function install() { //Utilities const say = OWOP.chat.send; function tell(id, msg) { say('/tell ' + id + ' ' + msg) }; const locSend = OWOP.chat.local; function locErr(msg) { OWOP.chat.receiveMessage(`{ "sender":"server", "type":"error", "data":{ "message":"${msg}" } }`); } const playerList = OWOP.misc.world.players; //Variables let quickID; let quickGroup; let responseID; let nearbyThresh = 500; //Group command const groups = {}; function gHandle(args) { switch (args[0]) { case "create": { if (args.length != 2) { locErr("Usage: /group create <group name> (group name cannot contain spaces)"); break; }; if (!groups[args[1]]) { groups[args[1]] = []; locSend('Group "' + args[1] + '" was successfully created'); break; }; locErr('Group "' + args[1] + '" already exists'); }; break; case "delete": { if (args.length != 2) { locErr("Usage: /group delete <group name>") break; }; if (!groups[args[1]]) { locErr('Group "' + args[1] + '" does not exist'); break; }; delete groups[args[1]]; locSend('Group "' + args[1] + '" was successfully deleted') }; break; case "add": { if (args.length != 3 || isNaN(args[1])) { locErr("Usage: /group add <id> <group name>"); break; }; if (!groups[args[2]]) { locErr('Group "' + args[2] + '" does not exist'); break; }; if (groups[args[2]].includes(args[1])) { locErr('Group "' + args[2] + '" already includes ' + args[1]); break; }; if (args[1] == OWOP.player.id) { locErr('Group "' + args[2] + '" already includes you') break; }; if (!playerList[args[1]]) { locErr("ID " + args[1] + " does not exist") break; }; groups[args[2]].push(args[1]); locSend("ID " + args[1] + ' was successfully added to group "' + args[2] + '"') }; break; case "remove": { if (args.length != 3 || isNaN(args[1])) { locErr("Usage: /group remove <id> <group name>"); break; }; if (!groups[args[2]]) { locErr('Group "' + args[2] + '" does not exist'); break; }; if (args[1] == OWOP.player.id) { locErr('You cannot remove yourself from any group') break; }; if (!groups[args[2]].includes(args[1])) { locErr('Group "' + args[2] + '" does not include ' + args[1]); break; }; groups[args[2]].splice(groups[args[2]].indexOf(args[1]), 1); locSend("ID " + args[1] + ' was successfully removed from group "' + args[2] + '"') }; break; case "tell": { if (args.length < 2) { locErr('Usage: /group tell <group name> <message>'); break; }; if (!groups[args[1]]) { locErr('Group "' + args[1] + '" does not exist'); break; }; for (let i = 0; i < groups[args[1]].length; i++) { if (!playerList[groups[args[1]][i]]) { locErr("ID " + groups[args[1]][i] + " disconnected"); groups[args[1]].splice(i, 1); }; }; let msg = args.slice(2).join(' ') + "\nGroup chat: " + OWOP.player.id + ", " + groups[args[1]].join(', '); for (let i = 0; i < groups[args[1]].length; i++) { tell(groups[args[1]][i], msg) }; }; break; case "ids": { if (args.length != 2) { locErr("Usage: /group ids <group name>"); break; }; if (!groups[args[1]]) { locErr('Group "' + args[1] + '" does not exist'); break; }; locSend('Group "' + args[1] + '": ' + OWOP.player.id + (groups[args[1]].length == 0 ? '' : (', ' + groups[args[1]].join(', ')))); }; break; case "groups": { if (args.length != 1) { locErr("Usage: /group groups"); break; }; locSend('Groups: ' + Object.keys(groups).join(", ")) }; break; default: { locErr("Usage: /group create/delete <group name> | /group add/remove <id> <group name> | /group tell <group name> <message> | /group ids <group name> | /group groups"); }; }; }; //Help command function helpHandle(args) { if (args.length != 1) { locSend("Chat Utils commands: clear, color, group, local, lset, mute, nearby, q, qg, qgset, qset, respond, unmute, yell") return; }; switch (args[0]) { case "group": case "groups": case "g": locSend("group - Create/delete a group, add/remove a player from a group, tell a message to a group, list ids inside a group or list current groups.\nUsage: /group create/delete <group name> | /group add/remove <id> <group name> | /group tell <group name> <message> | /group ids <group name> | /group groups\nAliases: g, groups"); break; case "qset": case "qid": locSend("qset - Set an id to quickly message with /q.\nUsage: /qset <id>\nAliases: qid") break; case "q": locSend("q - Message the id set with /qset.\nUsage: /q <message>\nAliases: [None]") break; case "qgset": case "qgroup": case "qgname": locSend("qgset - Set a group to quickly message with /qg.\nUsage: /qgset <group name>\nAliases: qgroup, qgname") break; case "qg": locSend("qg - Message the group set with /qgset.\nUsage: /qg <message>\nAliases: [None]") break; case "respond": case "r": locSend("respond - Respond to the latest /tell message from another player.\nUsage: /respond <message>\nAliases: r") break; case "local": case "l": locSend("local - Message people within the distance set with /lset (default: 500 pixels).\nUsage: /local <message>\nAliases: l") break; case "lset": locSend("lset - Set the distance within which people receive messages sent with /local (default: 500 pixels).\nUsage: /lset <distance>\nAliases: [None]") break; case "c": case "clear": locSend("clear - Clears the chat.\nUsage: /clear\nAliases: c"); break; case "color": locSend("color - Toggles colorful chat.\nUsage: /color <true/false>\nAliases: [None]"); break; case "yell": locSend("yell - Tell another user a message privately or send it globally in all caps.\nUsage: /yell <id*> <message> (* = optional)\nAliases: [None]"); break; case "mute": locSend("mute - Mutes the specified id.\nUsage: /mute <id>\nAliases: [None]"); break; case "unmute": locSend("unmute - Unmutes the specified id.\nUsage: /unmute <id>\nAliases: [None]"); case "nearby": locSend("nearby - Lists the players within the distance set with /lset or the specified one.\nUsage: /nearby <distance*> (* = optional)\nAliases: [None]"); }; return ''; }; //Message processing const prevR = OWOP.chat.recvModifier || (m => m); OWOP.chat.recvModifier = (msg) => { msg = prevR(msg); const msgParsed = JSON.parse(msg); //Response if (msgParsed.type == "whisperSent") { responseID = msgParsed.data.targetID; }; if (msgParsed.type == "whisperReceived") { responseID = msgParsed.data.senderID; }; //Fix "Unknown command:" messages from /help if (msgParsed.type == "error" && msgParsed.data.message.startsWith("Unknown command: ")) { if (!['group', 'groups', 'g', 'qset', 'qid', 'q', 'qgset', 'qgroup', 'qgname', 'qg', 'respond', 'r', 'local', 'l', 'lset', 'c', 'clear', 'color', 'yell', 'mute', 'unmute', 'nearby'].every(cmd => cmd != msgParsed.data.message.slice(17, -1))) { return ''; }; }; // Muting system because either idk how to use the vanilla one or it just isn't working if (OWOP.muted.includes(msgParsed.data.senderID)) return; //Colorful Chat if (localStorage.colorChat === undefined) localStorage.colorChat = true; if (localStorage.colorChat == "true") { if (msgParsed.sender == "server" && msgParsed.data.message.startsWith('[D] ')) { //Discord compatibility msgParsed.sender = 'player'; msgParsed.type = 'message'; msgParsed.data.nick = msgParsed.data.message.match(/^\[D\]\s.+?(?=:)/)[0]; msgParsed.data.message = msgParsed.data.message.replace(/^\[D\]\s.+?:\s/, ``); msgParsed.data.rank = 4; }; if (msgParsed.sender == "server" || msgParsed.type == "whisperReceived") return msg; //console.log("Message before: " + msg); // Debug const rank = msgParsed.data.rank; msgParsed.data.rank = 3; function sName(rx, replace) { msgParsed.data.message = msgParsed.data.message.replace(rx, replace); }; // Prevent people from executing their own code but leave dc emojis alone if (rank < 3) { sName(/<(?!a?:(.+?):(\d{8,32}))/g, `<`); sName(/(?<!a?:(.+?):(\d{8,32}))>/g, `>`); }; // Colors sName(/#\b(\d|[a-f]){6}\b/gi, match => `<span style='color:${match}'>${match}</span>`); sName(/\bRED\b/gi, match => `<span style='color:#E53B44'>${match}</span>`); sName(/\bCRIMSON\b/gi, match => `<span style='color:#9E2835'>${match}</span>`); sName(/\bORANGE\b/gi, match => `<span style='color:#FB922B'>${match}</span>`); sName(/\bGOLD\b/gi, match => `<span style='color:#FFB735'>${match}</span>`); sName(/\bYELLOW\b/gi, match => `<span style='color:#FFE762'>${match}</span>`); sName(/\bGREEN\b/gi, match => `<span style='color:#63C64D'>${match}</span>`); sName(/\bLIME\b/gi, match => `<span style='color:#B1D657'>${match}</span>`); sName(/\bBLUE\b/gi, match => `<span style='color:#3AB2FF'>${match}</span>`); sName(/\bINDIGO\b/gi, match => `<span style='color:#0484D1'>${match}</span>`); sName(/\bCYAN\b/gi, match => `<span style='color:#2CE8F4'>${match}</span>`); sName(/\b(MAGENTA|PINK|FUCHSIA)\b/gi, match => `<span style='color:#FF41E4'>${match}</span>`); sName(/\b(VIOLET|PURPLE|MAUVE)\b/gi, match => `<span style='color:#AB80F9'>${match}</span>`); sName(/\bBROWN\b/gi, match => `<span style='color:#B86F50'>${match}</span>`); sName(/\bGR(A|E)Y\b/gi, match => `<span style='color:#AFBFD2'>${match}</span>`); sName(/\bWHITE\b/gi, match => `<span style='color:#FFFFFF'>${match}</span>`); sName(/\bBLACK\b/gi, match => `<span style='color:#000000; text-shadow:-1px 0px 0 #FFF, 1px 0px 0 #FFF, 0px 1px 0 #FFF, 0px -1px 0 #FFF'>${match}</span>`); sName(/\bRGB\b/gi, match => { match = match.split(""); return `<span style='color:#FF0000'>${match[0]}</span><span style='color:#00FF00'>${match[1]}</span><span style='color:#0000FF'>${match[2]}</span>` }); // Other words sName(/\bTREE\b/gi, match => `<span style='color:#B86F50'>${match}</span>`); sName(/\bGRASS\b/gi, match => `<span style='color:#63C64D'>${match}</span>`); sName(/\bWATER\b/gi, match => `<span style='color:#3AB2FF'>${match}</span>`); sName(/\bLAVA\b/gi, match => `<span style='color:#FB922B'>${match}</span>`); sName(/\bFIRE\b/gi, match => `<span style='color:#E53B44'>${match}</span>`); // Countries (Romania and Hungary are below Romaniaball and Hungaryball respectively) sName(/(?<=\s|^|"|'|\.|,|:|;|\?|!|\*|\/|\\|\||\(|\)|\[|\]|{|}|=|\+|-|_|\b)(RUSSIA|РОССИЯ|POCCNR)(?=\s|$|"|'|\.|,|:|;|\?|!|\*|\/|\\|\||\(|\)|\[|\]|{|}|=|\+|-|_|\b)/gi, match => `<span style='color:#FFFFFF'>${match.slice(0, 2)}</span><span style='color:#0032A0'>${match.slice(2, 4)}</span><span style='color:#DA291C'>${match.slice(-2)}</span>`); sName(/\bGERMANY\b/gi, match => `<span style='color:#595959'>${match.slice(0, 2)}</span><span style='color:#FF0000'>${match.slice(2, 5)}</span><span style='color:#FFCC00'>${match.slice(-2)}</span>`); sName(/\bDEUTSCHLAND\b/gi, match => `<span style='color:#595959'>${match.slice(0, 4)}</span><span style='color:#FF0000'>${match.slice(4, 7)}</span><span style='color:#FFCC00'>${match.slice(-4)}</span>`); // Forest Land if (msgParsed.data.nick.match(/\b(F|L)OREST\s(L|F)AND\b/gi)) { msgParsed.data.nick = "<span style='color:#63C64D'>" + msgParsed.data.nick + "</span>" }; sName(/\bFOREST(\s?LAND)?\b/gi, match => `<span style='color:#63C64D'>${match}</span>`); // Mr. Smiles if (msgParsed.data.nick.match(/\bMR\.?\sSMILES\b/gi)) { msgParsed.data.nick = "<span style='color:#FFFFFF'>" + msgParsed.data.nick + "</span>" }; sName(/\b(MR\.?\s)?SMILES\b/gi, match => `<span style='color:#FFFFFF'>${match}</span>`); // Riverland if (msgParsed.data.nick.includes("Riverland")) { msgParsed.data.nick = "<span style='color:#0484D1'>" + msgParsed.data.nick + "</span>" }; sName(/\bRIVER(\s?LAND)?\b/gi, match => `<span style='color:#0484D1'>${match}</span>`); // Rainbow if (msgParsed.data.nick.includes("Rainbowball")) { msgParsed.data.nick = msgParsed.data.nick.replace(/\bRAINBOWBALL\b/gi, `<span class="rainbow-container"><span class="rainbow">Rainbowball</span><span class="rainbow-back">Rainbowball</span></span>`); if (rank < 2) { msgParsed.data.nick = msgParsed.data.nick.replace(/\[\d+?\]\s/, ``); msgParsed.data.nick = `<span style='color:#FF0000'>[</span><span style='color:#00FF00'>${msgParsed.data.senderID}</span><span style='color:#0000FF'>]</span> ${msgParsed.data.nick}` }; if (rank == 2) { msgParsed.data.nick = msgParsed.data.nick.replace('(M) ', ``); msgParsed.data.nick = `<span style='color:#FF0000'>(</span><span style='color:#00FF00'>M</span><span style='color:#0000FF'>)</span> ${msgParsed.data.nick}` }; if (rank == 3) { msgParsed.data.nick = msgParsed.data.nick.replace('(A) ', ``); msgParsed.data.nick = `<span style='color:#FF0000'>(</span><span style='color:#00FF00'>A</span><span style='color:#0000FF'>)</span> ${msgParsed.data.nick}` }; } else if (msgParsed.data.nick.includes("Rainbow")) { msgParsed.data.nick = msgParsed.data.nick.replace(/\bRAINBOW\b/gi, `<span class="rainbow-container"><span class="rainbow">Rainbow</span><span class="rainbow-back">Rainbow</span></span>`); if (rank < 2) { msgParsed.data.nick = msgParsed.data.nick.replace(/\[\d+?\]\s/, ``); msgParsed.data.nick = `<span style='color:#FF0000'>[</span><span style='color:#00FF00'>${msgParsed.data.senderID}</span><span style='color:#0000FF'>]</span> ${msgParsed.data.nick}` }; if (rank == 2) { msgParsed.data.nick = msgParsed.data.nick.replace('(M) ', ``); msgParsed.data.nick = `<span style='color:#FF0000'>(</span><span style='color:#00FF00'>M</span><span style='color:#0000FF'>)</span> ${msgParsed.data.nick}` }; if (rank == 3) { msgParsed.data.nick = msgParsed.data.nick.replace('(A) ', ``); msgParsed.data.nick = `<span style='color:#FF0000'>(</span><span style='color:#00FF00'>A</span><span style='color:#0000FF'>)</span> ${msgParsed.data.nick}` }; }; sName(/\bRAINBOW\b/gi, match => `<span class="rainbow-container"><span class="rainbow">${match}</span><span class="rainbow-back">${match}</span></span>`); sName(/\bRAINBOWBALL\b/gi, match => `<span class="rainbow-container"><span class="rainbow">${match}</span><span class="rainbow-back">${match}</span></span>`); // Monochrome if (msgParsed.data.nick.includes("Monochrome")) { msgParsed.data.nick = "<span style='color:#000000'>" + msgParsed.data.nick.replaceAll("Monochrome", "M<span style='color:#404040'>o<span style='color:#808080'>n<span style='color:#C0C0C0'>o<span style='color:#FFFFFF'>ch</span>r</span>o</span>m</span>e") + "</span>"; }; sName(/\bMONOCHROME\b/gi, match => { match = match.split(""); return `<span style='color:#000000'>${match[0]}<span style='color:#404040'>${match[1]}<span style='color:#808080'>${match[2]}<span style='color:#C0C0C0'>${match[3]}<span style='color:#FFFFFF'>${match[4]}${match[5]}</span>${match[6]}</span>${match[7]}</span>${match[8]}</span>${match[9]}</span>` }); // Romaniaball if (msgParsed.data.nick.includes("Romaniaball")) { msgParsed.data.nick = "<span style='color:#003CB3'>" + msgParsed.data.nick.replaceAll("Romaniaball", "<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAASUExURf///wAAAPzQAAArf84AAAAAAL+aKrIAAAAGdFJOU///////ALO/pL8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA1LjEuOWxu2j4AAAC2ZVhJZklJKgAIAAAABQAaAQUAAQAAAEoAAAAbAQUAAQAAAFIAAAAoAQMAAQAAAAMAAAAxAQIAEAAAAFoAAABphwQAAQAAAGoAAAAAAAAAo5MAAOgDAACjkwAA6AMAAFBhaW50Lk5FVCA1LjEuOQADAACQBwAEAAAAMDIzMAGgAwABAAAAAQAAAAWgBAABAAAAlAAAAAAAAAACAAEAAgAEAAAAUjk4AAIABwAEAAAAMDEwMAAAAABdUNkYj53BAQAAAE9JREFUKFN10EkKACAMA8DE5f9flqQuiDWHogNVK7oDZS5jTyVMBWRRSO8EtVpaE8GwRBTiNjLEALCoiD5yurbsk3P53H7L++ZkrmT2+38GpP8CyRiq0RgAAAAASUVORK5CYII='> Roma<span style='color:#FCD116'>nia</span><span style='color:#CE1126'>ball</span>") + "</span>"; }; sName(/\bROMANIABALL\b/gi, match => `<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAASUExURf///wAAAPzQAAArf84AAAAAAL+aKrIAAAAGdFJOU///////ALO/pL8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA1LjEuOWxu2j4AAAC2ZVhJZklJKgAIAAAABQAaAQUAAQAAAEoAAAAbAQUAAQAAAFIAAAAoAQMAAQAAAAMAAAAxAQIAEAAAAFoAAABphwQAAQAAAGoAAAAAAAAAo5MAAOgDAACjkwAA6AMAAFBhaW50Lk5FVCA1LjEuOQADAACQBwAEAAAAMDIzMAGgAwABAAAAAQAAAAWgBAABAAAAlAAAAAAAAAACAAEAAgAEAAAAUjk4AAIABwAEAAAAMDEwMAAAAABdUNkYj53BAQAAAE9JREFUKFN10EkKACAMA8DE5f9flqQuiDWHogNVK7oDZS5jTyVMBWRRSO8EtVpaE8GwRBTiNjLEALCoiD5yurbsk3P53H7L++ZkrmT2+38GpP8CyRiq0RgAAAAASUVORK5CYII='> <span style='color:#003CB3'>${match[0] + match[1] + match[2] + match[3]}</span><span style='color:#FCD116'>${match[4] + match[5] + match[6]}</span><span style='color:#CE1126'>${match[7] + match[8] + match[9] + match[10]}</span>`); sName(/\bROM(A|Â)NIA\b/gi, match => `<span style='color:#003CB3'>${match[0] + match[1]}</span><span style='color:#FCD116'>${match[2] + match[3] + match[4]}</span><span style='color:#CE1126'>${match[5] + match[6]}</span>`); // Nothinghere if (msgParsed.data.nick.match(/\bNOTHINGHERE(7759)?\b/gi)) { msgParsed.data.nick = "<span style='color:#63C64D'>" + msgParsed.data.nick.replace(/\bNOTHINGHERE(7759)?\b/gi, match => { match = match.split(""); return `<span style='color:#FFE762'>${match[0] + match[1] + match[2] + match[3] + match[4] + match[5] + match[6]}<span style='color:#63C64D'>${match[7] + match[8] + match[9] + match[10]}</span>${match[11] ? "7759" : ""}</span>` }) + "</span>"; }; sName(/\bNOTHINGHERE(7759)?\b/gi, match => { match = match.split(""); return `<span style='color:#FFE762'>${match[0] + match[1] + match[2] + match[3] + match[4] + match[5] + match[6]}<span style='color:#63C64D'>${match[7] + match[8] + match[9] + match[10]}</span>${match[11] ? "7759" : ""}</span>` }); // Diermania if (msgParsed.data.nick.includes("Diermania")) { msgParsed.data.nick = "<span style='color:#DD0000'>" + msgParsed.data.nick.replaceAll("Diermania", "Die<span style='color:#FFCE00'>r<span style='color:#000000'>m</span>a</span>nia") + "</span>"; }; sName(/\bDIERMANIA\b/gi, match => { match = match.split(""); return `<span style='color:#DD0000'>${match[0] + match[1] + match[2]}<span style='color:#FFCE00'>${match[3]}<span style='color:#000000'>${match[4]}</span>${match[5]}</span>${match[6] + match[7] + match[8]}</span>` }); // SyntexPr if (msgParsed.data.nick.match(/\b(SL?YNT(EX(PR)?|AXIS))\b/gi)) { msgParsed.data.nick = "<span style='color:#417171'>" + msgParsed.data.nick + "</span>"; }; sName(/\b(SL?YNT(EX(PR)?|AXIS))\b/gi, match => `<span style='color:#417171'>${match}</span>`); sName(/\bTRION(\sNEX(\b\.|US(ORIATE)?)?)?(?=\s|$|"|'|\b)/gi, match => { match = match.split(""); return `<span style='color:#21D714'>${match[0]}<span style='color:#FFFFFF'>${match[1]}<span style='color:#000000'>${match[2]}</span>${match[3]}</span>${match.slice(4).join("")}</span>`; }); // СинтексПр if (msgParsed.data.nick.match(/(?<=\s|^|"|'|\b)(СИНТ((Е|Э)КС(ПР)?|АКСИС)|СЛЮНТ(Е|Э)КС)(?=\s|$|"|'|\b)/gi)) { msgParsed.data.nick = "<span style='color:#417171'>" + msgParsed.data.nick + "</span>"; }; sName(/(?<=\s|^|"|'|\.|,|:|;|\?|!|\*|\/|\\|\||\(|\)|\[|\]|{|}|=|\+|-|_|\b)СЛ?ИНТ((Е|Э)КС(ПР)?|АКСИС)(?=\s|$|"|'|\.|,|:|;|\?|!|\*|\/|\\|\||\(|\)|\[|\]|{|}|=|\+|-|_|\b)/gi, match => `<span style='color:#417171'>${match}</span>`); // Coalition if (msgParsed.data.nick.includes("Coalition")) { msgParsed.data.nick = "<span style='color:#608C5E'>" + msgParsed.data.nick + "</span>"; }; sName(/\b(COALI(TION)?|CLN)\b/gi, match => `<span style='color:#608C5E'>${match}</span>`); // Unbidden if (msgParsed.data.nick.match(/\b(CRC|UNBIDDEN)\b/gi)) { msgParsed.data.nick = "<span style='color:#90F1F8'>" + msgParsed.data.nick + "</span>"; }; sName(/\b(CRC|UNBIDDEN)\b/gi, match => `<span style='color:#90F1F8'>${match}</span>`); // CoalCRCition if (msgParsed.data.nick.match(/\bCOALCRCITION\b/gi)) { msgParsed.data.nick = "<span style='color:#6D80A5'>" + msgParsed.data.nick + "</span>"; }; sName(/\bCOALCRCITION\b/gi, match => `<span style='color:#6D80A5'>${match}</span>`); // Nortia if (msgParsed.data.nick.includes("Nortia") || msgParsed.data.nick.includes("USRNSNN") || msgParsed.data.nick.includes("URNNSN")) { msgParsed.data.nick = "<span style='color:#32E27E'>" + msgParsed.data.nick + "</span>"; }; sName(/\b((SOUTH\s)?NORTIA|USRNSNN|URNNSN)\b/gi, match => `<span style='color:#32E27E'>${match}</span>`); sName(/\bNORISIA\b/gi, match => `<span style='color:#1E8F73'>${match}</span>`); // Vinland if (msgParsed.data.nick.includes("Vinland")) { msgParsed.data.nick = "<span style='color:#DEB129'>" + msgParsed.data.nick + "</span>"; }; sName(/\bVINLAND\b/gi, match => `<span style='color:#DEB129'>${match}</span>`); // [Server]: if (msgParsed.data.nick.includes("[Server]")) { msgParsed.data.nick = "<span style='color:#FF41E4'>" + msgParsed.data.nick; + "</span>" }; // RSSR if (msgParsed.data.nick.match(/\bR(SS|55)R\b/gi)) { msgParsed.data.nick = "<span style='color:#FF0000'>" + msgParsed.data.nick + "</span>"; }; sName(/\bR(SS|55)R\b/gi, match => `<span style='color:#FF0000'>${match}</span>`); // Moth if (msgParsed.data.nick.match(/(?<=\s|^|"|'|\b)(MOTH(ERSHIP|METHMYTH|YLAMINE)?|МОЛЬ)(?=\s|$|"|'|\b)/gi)) { msgParsed.data.nick = "<span style='color:#D7C39F'>" + msgParsed.data.nick + "</span>"; }; sName(/(?<=\s|^|"|'|\.|,|:|;|\?|!|\*|\/|\\|\||\(|\)|\[|\]|{|}|=|\+|-|_|\b)(MOTH(ERSHIP|METHMYTH|YLAMINE)?|МОЛЬ)(?=\s|$|"|'|\.|,|:|;|\?|!|\*|\/|\\|\||\(|\)|\[|\]|{|}|=|\+|-|_|\b)/gi, match => `<span style='color:#D7C39F'>${match}</span>`); sName(/\bSAR\b/gi, match => `<span style='color:#D50B0B'>${match}</span>`); // Potassium if (msgParsed.data.nick.match(/\bPOTASSIUM(_L)?\b/gi)) { msgParsed.data.nick = "<span style='color:#FFA200'>" + msgParsed.data.nick + "</span>"; }; sName(/\b(POTASS(IUM)?|EVERMORE)\b/gi, match => `<span style='color:#FFA200'>${match}</span>`); // Atlan if (msgParsed.data.nick.includes("Atlan")) { msgParsed.data.nick = "<span style='color:#FFFFFF'>" + msgParsed.data.nick.replaceAll("Atlan", "A<span style='color:#808080'>t<span style='color:#FF0000'>l</span>a</span>n") + "</span>"; }; sName(/\bATLAN\b/gi, match => { match = match.split(""); return `<span style='color:#FFFFFF'>${match[0]}<span style='color:#808080'>${match[1]}<span style='color:#FF0000'>${match[2]}</span>${match[3]}</span>${match[4]}</span>` }); // ATLaDOS if (msgParsed.data.nick.includes("ATLaDOS")) { msgParsed.data.nick = "<span style='color:#FFFFFF'>" + msgParsed.data.nick.replaceAll("ATLaDOS", "A<span style='color:#AAAAAA'>T<span style='color:#555555'>L<span style='color:#FF0000'>a</span>D</span>O</span>S") + "</span>"; }; sName(/\bATLAN?DOS\b/gi, match => { match = match.split(""); return `<span style='color:#FFFFFF'>${match[0]}<span style='color:#AAAAAA'>${match[1]}<span style='color:#555555'>${match[2]}<span style='color:#FF0000'>${match[3] + (match.length == 7 ? "" : match[4])}</span>${match[match.length - 3]}</span>${match[match.length - 2]}</span>${match[match.length - 1]}</span>` }); // :D anon sName(/(?<=\s|^|"|'|\.|,|:|;|\?|!|\*|\/|\\|\||\(|\)|\[|\]|{|}|=|\+|-|_|\b):\bD(\s|-)ANON\b/gi, match => `<span style='color:#0080FF'>${match}</span>`); // St. if (msgParsed.data.nick.includes("St.")) { msgParsed.data.nick = "<span style='color:#A1409D'>" + msgParsed.data.nick + "</span>"; }; sName(/(?<=\s|^|"|'|\.|,|:|;|\?|!|\*|\/|\\|\||\(|\)|\[|\]|{|}|=|\+|-|_)ST\.?(?=\s|$|"|'|\b)/gi, match => `<span style='color:#A1409D'>${match}</span>`); sName(/\bSHADOW\sTAI?LE\b/gi, match => `<span style='color:#4394A0'>${match.slice(0, 6)}</span>${match[6] == ' ' ? ' ' : ''}<span style='color:#F430B2'>${match.slice(7)}</span>`); // Orang if (msgParsed.data.nick.includes("Orang")) { msgParsed.data.nick = "<span style='color:#FF8800'>" + msgParsed.data.nick + "</span>"; }; sName(/\bOrang\b/gi, match => `<span style='color:#FF8800'>${match}</span>`); // HungaryBall if (msgParsed.data.nick.includes("HungaryBall")) { msgParsed.data.nick = "<span style='color:#CE2939'>" + msgParsed.data.nick.replaceAll("HungaryBall", "Hung<span style='color:#FFFFFF'>ary</span><span style='color:#477050'>Ball</span>") + "</span>"; }; if (msgParsed.data.nick.includes("Hungaryball")) { msgParsed.data.nick = "<span style='color:#CE2939'>" + msgParsed.data.nick.replaceAll("Hungaryball", "Hung<span style='color:#FFFFFF'>ary</span><span style='color:#477050'>ball</span>") + "</span>"; }; sName(/\bHUNGARYBALL\b/gi, match => { match = match.split(""); return `<span style='color:#CE2939'>${match[0] + match[1] + match[2] + match[3]}</span><span style='color:#FFFFFF'>${match[4] + match[5] + match[6]}</span><span style='color:#477050'>${match[7] + match[8] + match[9] + match[10]}</span>` }); sName(/\bHUNGARY\b/gi, match => { match = match.split(""); return `<span style='color:#CE2939'>${match[0] + match[1]}</span><span style='color:#FFFFFF'>${match[2] + match[3] + match[4]}</span><span style='color:#477050'>${match[5] + match[6]}</span>` }); // HungaryBall if (msgParsed.data.nick.includes("MagyarLabda")) { msgParsed.data.nick = "<span style='color:#CE2939'>" + msgParsed.data.nick.replaceAll("MagyarLabda", "Magy<span style='color:#FFFFFF'>arL</span><span style='color:#477050'>abda</span>") + "</span>"; }; if (msgParsed.data.nick.includes("Magyarlabda")) { msgParsed.data.nick = "<span style='color:#CE2939'>" + msgParsed.data.nick.replaceAll("Magyarlabda", "Magy<span style='color:#FFFFFF'>arl</span><span style='color:#477050'>abda</span>") + "</span>"; }; sName(/\bMAGYARLABDA\b/gi, match => { match = match.split(""); return `<span style='color:#CE2939'>${match[0] + match[1] + match[2] + match[3]}</span><span style='color:#FFFFFF'>${match[4] + match[5] + match[6]}</span><span style='color:#477050'>${match[7] + match[8] + match[9] + match[10]}</span>` }); sName(/\bMAGYAR\b/gi, match => { match = match.split(""); return `<span style='color:#CE2939'>${match[0] + match[1]}</span><span style='color:#FFFFFF'>${match[2] + match[3]}</span><span style='color:#477050'>${match[4] + match[5]}</span>` }); sName(/\bMAGYARORSZ(Á|A)G\b/gi, match => `<span style='color:#CE2939'>${match.slice(0, 4)}</span><span style='color:#FFFFFF'>${match.slice(4, 8)}</span><span style='color:#477050'>${match.slice(8)}</span>`); // Europe RP if (msgParsed.data.nick.includes("Europe RP")) { msgParsed.data.nick = "<span style='color:#0000FF'>" + msgParsed.data.nick + "</span>"; }; sName(/\bEU(ROPE(\sRP)?)?\b/gi, match => `<span style='color:#0000FF'>${match}</span>`); // Cyan if (msgParsed.data.nick.match(/\bCYAN\b/gi)) { msgParsed.data.nick = "<span style='color:#2CE8F4'>" + msgParsed.data.nick + "</span>"; }; // Gabriel if (msgParsed.data.nick.match(/\bGABRIEL\b/gi)) { msgParsed.data.nick = msgParsed.data.nick.replace(/\bGABRIEL\b/gi, match => `<span style='color:#F0F0F0'>${match[0]}<span style='color:#F4E5BC'>${match[1]}<span style='color:#F9DB88'>${match[2]}<span style='color:#FED154'>${match[3]}</span>${match[4]}</span>${match[5]}</span>${match[6]}</span>`); if (rank < 2) { msgParsed.data.nick = msgParsed.data.nick.replace(/\[\d+?\]\s/, ``); msgParsed.data.nick = `<span style='color:#F0F0F0'>[<span style='color:#F9DB88'>${msgParsed.data.senderID}</span>]</span> ${msgParsed.data.nick}` }; if (rank == 2) { msgParsed.data.nick = msgParsed.data.nick.replace('(M) ', ``); msgParsed.data.nick = `<span style='color:#F0F0F0'>(<span style='color:#F9DB88'>M</span>)</span> ${msgParsed.data.nick}` }; if (rank == 3) { msgParsed.data.nick = msgParsed.data.nick.replace('(A) ', ``); msgParsed.data.nick = `<span style='color:#F0F0F0'>(<span style='color:#F9DB88'>A</span>)</span> ${msgParsed.data.nick}` }; }; sName(/\bGABRIEL\b/gi, match => `<span style='color:#F0F0F0'>${match[0]}<span style='color:#F4E5BC'>${match[1]}<span style='color:#F9DB88'>${match[2]}<span style='color:#FED154'>${match[3]}</span>${match[4]}</span>${match[5]}</span>${match[6]}</span>`); // Vlandia sName(/\bWEST\sVLANDIA\b/gi, match => `<span style='color:#950000'>${match}</span>`); sName(/\bEAST\sVLANDIA\b/gi, match => `<span style='color:#FF7A33'>${match}</span>`); sName(/\b(?<!(EA|WE)ST\s)VLANDIA\b/gi, match => `<span style='color:#950000'>${match}</span>`); // Sangsa sName(/\bSANGSA\b/gi, match => `<span style='color:#FF0000'>${match.slice(0, 1)}</span><span style='color:#0000FF'>${match.slice(1, 5)}</span><span style='color:#FF00F7'>${match.slice(-1)}</span>`); // Kwapt sName(/\b(KWAPT|62143)\b/gi, match => `<span style='color:#A45195'>${match}</span>`); // Siremia sName(/\bSIREMIA\b/gi, match => `<span style='color:#FFFFFF'>${match}</span>`); // Xahh if (msgParsed.data.nick.match(/\bXAHH\b/gi)) { msgParsed.data.nick = "<span style='color:#00FA9A'>" + msgParsed.data.nick + "</span>"; }; sName(/\bXAHH\b/gi, match => `<span style='color:#00FA9A'>${match}</span>`); // LLG if (msgParsed.data.nick.match(/\bLLG\b/gi)) { msgParsed.data.nick = "<span style='color:#FF00FF'>" + msgParsed.data.nick + "</span>"; }; sName(/\bLLG\b/gi, match => `<span style='color:#FF00FF'>${match}</span>`); // Nonaem if (msgParsed.data.nick.match(/\bNONA(EM|MEZ_?)\b/gi)) { msgParsed.data.nick = "<span style='color:#9E9EFF'>" + msgParsed.data.nick + "</span>"; }; sName(/\bNONA(EM|MEZ_?)\b/gi, match => `<span style='color:#9E9EFF'>${match}</span>`); // 16777216 sName(/\b16777216\b/gi, `<span style='color:#0000FF'>16</span><span style='color:#00FF00'>77</span><span style='color:#FF0000'>72</span><span style='color:#FFFFFF'>16</span>`); // NekoNoka if (msgParsed.data.nick.match(/\bNEKONOKA\b/gi)) { msgParsed.data.nick = "<span style='color:#8F3CD7'>" + msgParsed.data.nick + "</span>"; }; sName(/\bNEKONOKA\b/gi, match => `<span style='color:#8F3CD7'>${match}</span>`); // Toaster if (msgParsed.data.nick.match(/\bTOASTER\b/gi)) { msgParsed.data.nick = "<span style='color:#FFC839'>" + msgParsed.data.nick.replace(/\bTOASTER\b/gi, match => `${match.slice(0, 2)}<span style='color:#FFFFFF'>${match.slice(2, 5)}</span>${match.slice(-2)}`) + "</span>"; }; sName(/\bTOASTER\b/gi, match => `<span style='color:#FFC839'>${match.slice(0, 2)}<span style='color:#FFFFFF'>${match.slice(2, 5)}</span>${match.slice(-2)}</span>`); // Taum sName(/\bTAUM(OTON(S)?)?\b/gi, match => `<span style='color:#EE00FF'>${match}</span>`); // C3phei if (msgParsed.data.nick.match(/\bC3PHEI\b/gi)) { msgParsed.data.nick = "<span style='color:#AC3940'>" + msgParsed.data.nick + "</span>"; }; sName(/\bC3PHEI\b/gi, match => `<span style='color:#AC3940'>${match}</span>`); // Enderment if (msgParsed.data.nick.match(/\bENDERMENT\b/gi)) { msgParsed.data.nick = "<span style='color:#952BFF'>" + msgParsed.data.nick + "</span>"; }; sName(/\bENDERMENT\b/gi, match => `<span style='color:#952BFF'>${match}</span>`); // Taha if (msgParsed.data.nick.match(/\bTAHA\b/gi)) { msgParsed.data.nick = "<span style='color:#224E7C'>" + msgParsed.data.nick + "</span>"; }; sName(/\bTAHA(\sÖZDEMIR)?\b/gi, match => `<span style='color:#224E7C'>${match}</span>`); // Südenland if (msgParsed.data.nick.match(/\bSÜDENLAND\b/gi)) { msgParsed.data.nick = "<span style='color:#224E7C'>" + msgParsed.data.nick.replace(/\bSÜDENLAND\b/gi, match => `${match[0]}<span style='color:#4C8FD6'>${match[1]}<span style='color:#1DCDA1'>${match[2]}</span>${match[3]}</span>${match.slice(-5)}`) + "</span>"; }; sName(/\bSÜDENLAND\b/gi, match => `<span style='color:#224E7C'>${match[0]}<span style='color:#4C8FD6'>${match[1]}<span style='color:#1DCDA1'>${match[2]}</span>${match[3]}</span>${match.slice(-5)}</span>`); // ReloopGD if (msgParsed.data.nick.match(/\bRELOOPGD\b/gi)) { msgParsed.data.nick = "<span style='color:#FD1C27'>" + msgParsed.data.nick + "</span>"; }; sName(/\bRELOOPGD\b/gi, match => `<span style='color:#FD1C27'>${match}</span>`); // Blake if (msgParsed.data.nick.match(/(\bBLAKE\b|._BLAKE_.)/gi)) { msgParsed.data.nick = "<span style='color:#FCC8D9'>" + msgParsed.data.nick + "</span>"; }; sName(/\bBLAKE\b/gi, match => `<span style='color:#FCC8D9'>${match}</span>`); // Capa if (msgParsed.data.nick.match(/\bCAPA\b/gi)) { msgParsed.data.nick = "<span style='color:#A44F15'>" + msgParsed.data.nick + "</span>"; }; sName(/\bCAPA\b/gi, match => `<span style='color:#A44F15'>${match}</span>`); // Leg :3 if (msgParsed.data.nick.match(/\bLEG\b/gi)) { msgParsed.data.nick = "<span style='color:#DD80A5'>" + msgParsed.data.nick + "</span>"; }; sName(/\bLEG(3ND)?\b/gi, match => `<span style='color:#DD80A5'>${match}</span>`); sName(/\b5UP\b/gi, match => `<span style='color:#0484D1'>${match}</span>`); // Vvictor if (msgParsed.data.nick.match(/\bVVICTOR(__)?\b/gi)) { msgParsed.data.nick = "<span style='color:#00FF66'>" + msgParsed.data.nick + "</span>"; }; sName(/\bVVICTOR\b/gi, match => `<span style='color:#00FF66'>${match}</span>`); sName(/\bM(OUNTAI|T)N\sDEW\b/gi, match => `<span style='color:#00FF00'>${match.slice(0, -4)}</span> <span style='color:#FF0000'>${match.slice(-3)}</span>`); // Martan if (msgParsed.data.nick.match(/\b(MART|ARTM)AN\b/gi)) { msgParsed.data.nick = "<span style='color:#0083D5'>" + msgParsed.data.nick + "</span>"; }; sName(/\b(MART|ARTM)AN\b/gi, match => `<span style='color:#0083D5'>${match}</span>`); // Stevesta if (msgParsed.data.nick.match(/\bSTEVESTA\b/gi)) { msgParsed.data.nick = "<span style='color:#7F7F7F'>" + msgParsed.data.nick + "</span>"; }; sName(/\bSTEVESTA\b/gi, match => `<span style='color:#7F7F7F'>${match}</span>`); // Lapis if (msgParsed.data.nick.match(/\bLAPIS\b/gi)) { msgParsed.data.nick = "<span style='color:#0066FF'>" + msgParsed.data.nick + "</span>"; }; sName(/\bLAPIS\b/gi, match => `<span style='color:#0066FF'>${match}</span>`); // JP sName(/\bJP(DLD|LAND)?\b/gi, match => `<:J:409708038589775872> <span style='color:#FFFFFF'>${match}</span>`); // Amogusland if (msgParsed.data.nick.match(/\bAMON?GUSLAND\b/gi)) { msgParsed.data.nick = "<span style='color:#52A4DC'>" + msgParsed.data.nick + "</span>"; }; sName(/\bAMON?GUSLAND\b/gi, match => `<span style='color:#52A4DC'>${match}</span>`); // Doitshlænd if (msgParsed.data.nick.match(/\bDOITSHL(Æ|AE?)ND\b/gi)) { msgParsed.data.nick = "<span style='color:#F9DD3E'>" + msgParsed.data.nick.replace(/\bDOITSHL(Æ|A)ND\b/gi, match => `<span style='color:#58585A'>${match.slice(0, 3)}</span><span style='color:#C72931'>${match.slice(3, 7)}</span><span style='color:#F9DD3E'>${match.slice(-3)}</span>`).replace(/\bDOITSHLAEND\b/gi, match => `<span style='color:#58585A'>${match.slice(0, 4)}</span><span style='color:#C72931'>${match.slice(4, 7)}</span><span style='color:#F9DD3E'>${match.slice(-4)}</span>`) + "</span>"; }; sName(/\bDOITSHL(Æ|A)ND\b/gi, match => `<span style='color:#58585A'>${match.slice(0, 3)}</span><span style='color:#C72931'>${match.slice(3, 7)}</span><span style='color:#F9DD3E'>${match.slice(-3)}</span>`); sName(/\bDOITSHLAEND\b/gi, match => `<span style='color:#58585A'>${match.slice(0, 4)}</span><span style='color:#C72931'>${match.slice(4, 7)}</span><span style='color:#F9DD3E'>${match.slice(-4)}</span>`); sName(/\bDEUCHLAND\b/gi, match => `<span style='color:#58585A'>${match.slice(0, 3)}</span><span style='color:#C72931'>${match.slice(3, 6)}</span><span style='color:#F9DD3E'>${match.slice(-3)}</span>`); // Lemonwires sName(/\bLEMONWIRES\b/gi, match => `<span style='color:#FFF700'>${match[0]}</span><span style='color:#00FF1E'>${match[1]}</span><span style='color:#FFF700'>${match[2]}</span><span style='color:#00FF1E'>${match[3]}</span><span style='color:#FFF700'>${match[4]}</span><span style='color:#00FF1E'>${match[5]}</span><span style='color:#FFF700'>${match[6]}</span><span style='color:#00FF1E'>${match[7]}</span><span style='color:#FFF700'>${match[8]}</span><span style='color:#00FF1E'>${match[9]}</span>`); // Lemon if (msgParsed.data.nick.match(/\bLEMON\b/gi)) { msgParsed.data.nick = "<span style='color:#FFFF00'>" + msgParsed.data.nick.replace(/\bLEMON\b/gi, match => `🍋 ${match}`) + "</span>"; }; sName(/\bLEMON\b/gi, match => `<span style='color:#FFFF00'>🍋 ${match}</span>`); // Tess if (msgParsed.data.nick.match(/\bTESS\b/gi)) { msgParsed.data.nick = "<span style='color:#9CDED3'>" + msgParsed.data.nick + "</span>"; }; sName(/\bTESS\b/gi, match => `<span style='color:#9CDED3'>${match}</span>`); // Helper sName(/\bHELPER\b/gi, match => `<span style='color:#00FF00'>${match}</span>`); // Cygnus if (msgParsed.data.nick.match(/\b(CYGNUS|CEUTHYN)\b/gi)) { msgParsed.data.nick = "<span style='color:#00EEFF'>" + msgParsed.data.nick + "</span>"; }; sName(/\b(CYGNUS|CEUTHYN)\b/gi, match => `<span style='color:#00EEFF'>${match}</span>`); // Shay sName(/\bSHAY\b/gi, match => `<span style='color:#2CE8F4'>${match}</span>`); // Neomoth sName(/\bNEOMOTH\b/gi, match => `<span style='color:#9669ff'><:1:1388314585781637200> ${match}</span>`); // Eldit if (msgParsed.data.nick.match(/\bELDIT\b/gi)) { msgParsed.data.nick = "<span style='color:#A92444'>" + msgParsed.data.nick + "</span>"; }; sName(/\bELDIT\b/gi, match => `<span style='color:#A92444'>${match}</span>`); // Jigg sName(/\bJI+GG\b/gi, match => `<span style='color:#00FFFF'>${match}</span>`); // C-Yard sName(/\bC(-|\s)?YARD\b/gi, match => `<span style='color:#00FF00'>${match}</span>`); // VGS sName(/\bVGS\b/gi, match => `<span style='color:#FF0000'>${match}</span>`); // JJB sName(/\b(JJB|JAR\s?JAR(\s?BOINKS)?)\b/gi, match => `<span style='color:#750F00'><:j:411450961949753345> ${match}</span>`); // Norddex sName(/\bNORDDEX\b/gi, match => `<span style='color:#E53B44'>${match}</span>`); // 999 sName(/\b(999|AZSRIEL)\b/gi, match => `<span class="rainbow-container"><span class="rainbow">${match}</span><span class="rainbow-back">${match}</span></span>`); // Nurutomo sName(/\bNURUTOMO\b/gi, match => `<span style='color:#0484D1'>${match}</span>`); // Memelord sName(/\bMEMELORD\b/gi, match => `<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAMCAMAAABlXnzoAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJUExURZ5q/0X/DwAAAJ+7yioAAAADdFJOU///ANfKDUEAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA1LjEuOWxu2j4AAAC2ZVhJZklJKgAIAAAABQAaAQUAAQAAAEoAAAAbAQUAAQAAAFIAAAAoAQMAAQAAAAMAAAAxAQIAEAAAAFoAAABphwQAAQAAAGoAAAAAAAAAo5MAAOgDAACjkwAA6AMAAFBhaW50Lk5FVCA1LjEuOQADAACQBwAEAAAAMDIzMAGgAwABAAAAAQAAAAWgBAABAAAAlAAAAAAAAAACAAEAAgAEAAAAUjk4AAIABwAEAAAAMDEwMAAAAABdUNkYj53BAQAAADhJREFUGFdtzkEKADEMQtGv9z/0YIUySLNI8lyEYAPYkmQzBClB+tmGRWvZUw3u5R8TFG/mic7hBzLcALENn7j/AAAAAElFTkSuQmCC"> <span style='color:#9E6AFF'>${match.slice(0, 4)}</span><span style='color:#45FF0F'>${match.slice(4)}</span>`); // Frick Verizon sName(/\bF(RI|U)CK\sVERIZON\b/gi, match => `<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJUExURf///wAAAAAAAH5RqV0AAAADdFJOU///ANfKDUEAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA1LjEuOWxu2j4AAAC2ZVhJZklJKgAIAAAABQAaAQUAAQAAAEoAAAAbAQUAAQAAAFIAAAAoAQMAAQAAAAIAAAAxAQIAEAAAAFoAAABphwQAAQAAAGoAAAAAAAAA2XYBAOgDAADZdgEA6AMAAFBhaW50Lk5FVCA1LjEuOQADAACQBwAEAAAAMDIzMAGgAwABAAAAAQAAAAWgBAABAAAAlAAAAAAAAAACAAEAAgAEAAAAUjk4AAIABwAEAAAAMDEwMAAAAAACMojeFEB6NgAAAEZJREFUKFONkIsKACAIA+f+/6NjEr6o6EBhR0UKkkTgSWWBx2bcoRs5wPIloehltluo0S7qdDEZusb41PNU4Vsdxq4LFOQCftcAm2osOS0AAAAASUVORK5CYII="> <span style='color:#FFFFFF'>${match}</span>`); // Randoof sName(/\bRANDOOF\b/gi, match => `<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJUExURXUAALMZGQAAAOXo42cAAAADdFJOU///ANfKDUEAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA1LjEuOWxu2j4AAAC2ZVhJZklJKgAIAAAABQAaAQUAAQAAAEoAAAAbAQUAAQAAAFIAAAAoAQMAAQAAAAMAAAAxAQIAEAAAAFoAAABphwQAAQAAAGoAAAAAAAAAnZMAAOgDAACdkwAA6AMAAFBhaW50Lk5FVCA1LjEuOQADAACQBwAEAAAAMDIzMAGgAwABAAAAAQAAAAWgBAABAAAAlAAAAAAAAAACAAEAAgAEAAAAUjk4AAIABwAEAAAAMDEwMAAAAAAJFj+K2cP21wAAACBJREFUGFdjYAADJhiAcAnySQKMjIxwkhg+SQDdZQT4ADwAAH+enAY0AAAAAElFTkSuQmCC"> <span style="color:#B31919">${match}</span>`) // Sisyphus sName(/\bSISYPHUS(\sPRIME)?\b/gi, match => `<span style='color:#FFDF00'>${match}</span>`); // Minos sName(/\bMINOS(\sPRIME)?\b/gi, match => `<span style='color:#DFDFFF'>${match}</span>`); // Chat mention let findPlayer = new RegExp(`(?<=\\s|^|"|'|\\b)${OWOP.player.id}(?=\\s|$|"|'|\\b)`, "g"); sName(findPlayer, match => `<span style='color:#FF0000'>${match}</span>`); // Restore normal message color if (rank == 0) msgParsed.data.nick = "<span style='color:#999999'>" + msgParsed.data.nick if (rank == 1) msgParsed.data.nick = "<span style='color:#3AB2FF'>" + msgParsed.data.nick + "</span><span style='color:#FFFFFF'>"; if (rank == 2) msgParsed.data.nick = "<span style='color:#86FF41'>" + msgParsed.data.nick; if (rank == 4) msgParsed.data.nick = "<span style='color:#6CFFE7'>" + msgParsed.data.nick + "</span><span style='color:#FFFFFF'>"; // Discord messages //console.log("Message after: " + JSON.stringify(msgParsed)); // Debug return JSON.stringify(msgParsed); }; return msg; }; //Command processing const prevS = OWOP.chat.sendModifier || (m => m); OWOP.chat.sendModifier = msg => { msg = prevS(msg); if (!msg.startsWith('/')) return msg; const [cmd, ...args] = msg.slice(1).trim().split(/\s+/); switch (cmd.toLowerCase()) { case "local": case "l": { if (args.length < 1) { locErr('Usage: /local <message>'); return ''; }; let px = OWOP.mouse.tileX let py = OWOP.mouse.tileY let nearbyPlayers = [] for (let x in playerList) { if (Math.abs(playerList[x].x / 16 - px) <= nearbyThresh && Math.abs(playerList[x].y / 16 - py) <= nearbyThresh) { nearbyPlayers.push(x); }; }; if (nearbyPlayers.length == 0) { locErr('No players nearby'); return ''; }; let localMsg = args.join(' ') + "\nLocal chat: " + OWOP.player.id + ", " + nearbyPlayers.join(', '); for (let i = 0; i < nearbyPlayers.length; i++) { tell(nearbyPlayers[i], localMsg); }; return ''; } case "lset": if (args.length != 1 || isNaN(args[0]) || args[0] < 0) { locErr("Usage: /lset <distance>"); return ''; }; nearbyThresh = args; return ''; case "clear": case "c": if (args.length != 0) { locErr("Usage: /clear"); return ''; }; OWOP.chat.clear(); return ''; case "respond": case "r": if (!responseID) { locErr('Nobody messaged you yet'); return ''; } if (!playerList[responseID]) { locErr(`ID ${responseID} disconnected`); responseID = undefined; return ''; }; tell(responseID, args.join(" ")); return ''; case "qid": case "qset": if (args.length != 1) { locErr('Usage: /qset <id>'); return ''; }; if (!isNaN(args)) { if (!playerList[args]) { locErr("ID " + args + " doesn't exist.") return ''; }; quickID = args; return ''; }; locErr('Usage: /qset <id>'); return ''; case "q": if (quickID === undefined) { locErr('Use "/qset <id>" to set a quick id'); return ''; }; if (args.length == 0) { locErr('Usage: /q <message>'); return ''; }; if (!playerList[quickID]) { locErr("ID " + quickID + " disconnected"); quickID = undefined; return ''; }; tell(quickID, args.join(' ')); return ''; case "qgname": case "qgset": case "qgroup": // Group-based if (args.length != 1) { locErr('Usage: /qgset <group name>'); return ''; }; if (!groups[args]) { locErr('Group "' + args + '" does not exist'); return ''; }; quickGroup = args; return ''; case "qg": { // Group-based if (quickGroup === undefined) { locErr('Use "/qgset <group name>" to set a quick group'); return ''; }; if (!groups[quickGroup]) { locErr('Group "' + quickGroup + '" does not exist anymore'); quickGroup = undefined; return ''; }; for (let i = 0; i < groups[quickGroup].length; i++) { if (!playerList[groups[quickGroup][i]]) { locErr("ID " + groups[quickGroup][i] + " disconnected"); groups[quickGroup].splice(i, 1); }; }; let quickGroupMsg = args.join(' ') + "\nGroup chat: " + OWOP.player.id + ", " + groups[quickGroup].join(', '); for (let i = 0; i < groups[quickGroup].length; i++) { tell(groups[quickGroup][i], quickGroupMsg) }; return ''; }; case "color": if (args.length != 1 || (args != "true" && args != "false")) { locErr("Usage: /color <true/false>"); return ''; }; localStorage.colorChat = args; return ''; case "mute": if (args.length != 1) { locErr('Usage: /mute <id>'); return ''; }; if (!playerList[args]) { locErr(`ID ${args} does not exist`); return ''; }; if (OWOP.muted.includes(Number(args))) { locErr(`ID ${args} is already muted`); return ''; }; OWOP.muted.push(Number(args)); return ''; case "unmute": if (args.length != 1) { locErr('Usage: /unmute <id>'); return ''; }; if (!playerList[args]) { locErr(`ID ${args} does not exist`); return ''; }; if (!OWOP.muted.includes(Number(args))) { locErr(`ID ${args} is not muted`); return ''; }; OWOP.muted.splice(OWOP.muted.indexOf(Number(args)), 1); return ''; case "nearby": { if (args.length > 1 || (args.length == 1 && isNaN(args[0]))) { locErr('Usage: /nearby <distance*> (* = optional)'); return ''; }; let px = OWOP.mouse.tileX; let py = OWOP.mouse.tileY; let thresh = (args.length == 1 ? args[0] : nearbyThresh); let nearbyPlayers = []; for (let x in playerList) { if (Math.abs(playerList[x].x / 16 - px) <= thresh && Math.abs(playerList[x].y / 16 - py) <= thresh) { nearbyPlayers.push(x); }; }; if (nearbyPlayers.length == 0) { locErr('No players nearby'); return ''; } else { locSend(`Nearby players: ${nearbyPlayers.join(', ')}`); return ''; } }; case "g": case "group": case "groups": // Group-based gHandle(args); return ''; case "yell": if (args.length == 0) { locErr('Usage: /yell <id*> <message> (* = optional)'); return ''; }; if (!isNaN(args[0])) { tell(args[0], args.slice(1).join(' ').toUpperCase()); return ''; }; say(args.join(' ').toUpperCase()); return ''; case "help": case "h": case "?": helpHandle(args); }; return msg; }; console.log('Chat Utils installed'); }; })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址