您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Best Manager bonk.io
当前为
// ==UserScript== // @name MrMenu // @version 1.37 // @description Best Manager bonk.io // @author MrBonkeiro // @namespace https://greasyfork.org/en/scripts/504571-mrmenu // @match https://bonk.io/ // @match https://bonk.io/* // @match https://bonkisback.io/* // @match https://multiplayer.gg/physics/* // @icon https://www.google.com/s2/favicons?sz=64&domain=bonk.io // @grant none // @unwrap // @namespace https://greasyfork.org/users/1355760 // ==/UserScript== function ScriptInjector(f) { if (window.location.href == `https://bonk.io/gameframe-release.html`) { if (document.readyState == 'complete'){ setTimeout(f, 300); } else { document.addEventListener('readystatechange', function () { setTimeout(f, 1500); }); } } } function addCSS(ID, cssString, replace = false) { let styleElement = document.getElementById(ID); if (styleElement) { if (replace) { styleElement.innerHTML = cssString; } else { styleElement.innerHTML += `\n${cssString}`; } } else { styleElement = document.createElement('style'); styleElement.id = ID; styleElement.innerHTML = cssString; document.head.appendChild(styleElement); } } function addHTML(htmlString, selector, beforeSelector = null) { const targetElement = document.querySelector(selector); if (!targetElement) { return; } const parser = new DOMParser(); const doc = parser.parseFromString(htmlString, 'text/html'); const newElements = Array.from(doc.body.childNodes); if (beforeSelector) { const beforeElement = document.querySelector(beforeSelector); if (!beforeElement) { return; } newElements.forEach(node => { beforeElement.parentNode.insertBefore(node, beforeElement); }); } else { newElements.forEach(node => { targetElement.appendChild(node); }); } } let bonkWSS; ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// let UI = { main: ` <div id="MrMenuUI"> <div id="Mrtitlebar"> <label>MrMenu by MrBonkeiro v1.37</label> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="position:absolute; top:10px; right:10px; cursor:pointer;"> <line x1="18" y1="6" x2="6" y2="18"> </line> <line x1="6" y1="6" x2="18" y2="18"></line> </svg> </div> <div id="MrArea"> <div id="Mrsidebar"> <button data-tab="tab1">Host Manager</button> <button data-tab="tab2">XP Involker</button> <button data-tab="tab3">Chat Manager</button> <button data-tab="tab4">IP Logger</button> <button>Settings</button> <button data-tab="report">Report</button> </div> <div id="Mrcontent"> </div> </div> </div>`, tab: { tab1: `<div data-tab="tab1"> <div class="row"> <div class="info"> <label>Freejoin</label> <p>When you are a host and activated, players can join without restarting the room</p> </div> <div class="action"> <button>Enable</button> <button class="active">Disable</button> </div> </div> <div class="row"> <div class="info"> <label>Freejoin - Guest</label> <p>When you are a host and activated, players can join without restarting the room</p> </div> <div class="action"> <button>YES</button> <button class="active">NO</button> </div> </div> <div class="row"> <div class="info"> <label>Room Search</label> <p>Search room name using searchbox</p> </div> <div class="action"> <button id="MrHostSearchRoomE">YES</button> <button class="active" id="MrHostSearchRoomD">NO</button> </div> </div> </div>`, tab2: `<div data-tab="tab2"> <div class="row"> <div class="info"> <label>XP Farm</label> <p>When you are in a match and enabled, you start with +100 XP</p> </div> <div class="action"> <button id="MrXPE">Enable</button> <button id="MrXPD" class="active">Disable</button> </div> </div> <div class="row"> <div class="info"> <label>Delay: <span id="MrMenuXPDelayms">18500 ms</span></label> <p>Defines an interval in milliseconds if 'Farm XP' is activated</p> </div> <div class="action"> <input type="range" min="7000" max="30000" value="18500" step="500" id="MrMenuXPinputRangeDelay"> </div> </div> </div>`, tab3: `<div data-tab="tab3"> <div class="row"> <div class="info"> <label>FullScreen</label> <p>Define bonk.io fullscreen</p> </div> <div class="action"> <button id="MrFullScreen">toggle</button> </div> </div> <div class="row"> <div class="info"> <label>Chat ingame visibility</label> <p>Activate/deactivate chat in a match.</p> </div> <div class="action"> <button id="MrChatVisibilyE" class="active">Enable</button> <button id="MrChatVisibilyD">Disable</button> </div> </div> <div class="row"> <div class="info"> <label>Chat Position</label> <p>Activate/deactivate chat in a match.</p> </div> <div class="action" style="flex-direction: row-reverse;"> <select id="MrChatPositionV"> <option value="top">Top</option> <option value="bottom" selected>Bottom</option> </select> <select id="MrChatPositionH"> <option value="left" selected>Left</option> <option value="right">Right</option> </select> </div> </div> <div class="row"> <div class="info"> <label>Chat Color</label> <p>Activate/deactivate chat in a match.</p> </div> <div class="action" style="flex-direction: row-reverse;"> <div id="MrChatBgColorbg" style="border-radius:50%; height:40px; width: 40px;background-color:red; border: 1px solid #cccc; margin-left: 5px;"></div> <div id="MrChatBgColorFont" style="border-radius:50%; height:40px; width: 40px;background-color:white; border: 1px solid #cccc;"></div> <input type="color" style="visibility: hidden;" id="MrChatBgColorbgbase"> <input type="color" style="visibility: hidden;" id="MrChatBgColorFontbase"> </div> </div> <div class="row"> <div class="info"> <label>Transparency</label> <p>Set in-game chat background transparency</p> </div> <div class="action"> <input type="range" min="0" max="100" value="100" step="1" id="MrChattransparency"> </div> </div> <div class="row"> <div class="info"> <label>Links in chat game</label> <p>Enable link support in the chat.</p> </div> <div class="action"> <button id="MrChatLinkE">Enable</button> <button class="active" id="MrChatLinkD">Disable</button> </div> </div> <div class="row"> <div class="info"> <label>Emoji</label> <p>Enable Emoji support in the chat.</p> </div> <div class="action"> <button id="MrChatEmojiE">Enable</button> <button class="active" id="MrChatEmojiD">Disable</button> </div> </div> </div>`, }, } let UICSS = ` @import url('https://fonts.googleapis.com/css2?family=Arimo:ital,wght@0,400..700;1,400..700&display=swap'); #MrMenuUI { display: flex; position: absolute; flex-direction: column; top: 50%; left: 50%; width: calc(95% - 50px); height: calc(95% - 50px); transform: translate(-50%, -50%); user-select: none; box-sizing: border-box; font-family: 'Arimo'; background-color: #1f1f1f; color: white; border: 1px solid #cccc; border-radius: 15px; } #MrMenuUI > #Mrtitlebar { display: flex; justify-content: center; align-items: center; width: 100%; height: 44px; border-bottom: 1px solid #cccc; } #MrMenuUI > #MrArea { display: flex; flex-direction: row; width: 100%; height: calc(100% - 44px); box-sizing: border-box; } #MrMenuUI > #MrArea > #Mrsidebar { display: flex; flex-direction: column; justify-content: flex-start; align-items: center; width: 250px; height: 100%; border-radius: 0px 0px 0px 15px; border-right: 1px solid #cccc; padding: 5px; box-sizing: border-box; } #MrMenuUI > #MrArea > #Mrsidebar > button { outline: none; height: 40px; width: 220px; background-color: #1f1f1f; color: white; border: none; font-size: 13px; margin-top: 12px; } #MrMenuUI > #MrArea > #Mrsidebar > button:hover { background-color: #333; } #MrMenuUI > #MrArea > #Mrsidebar > button.active { background-color: #2A51F4; border-radius: 7px; } #MrMenuUI > #MrArea > #Mrcontent { display: flex; flex-direction: column; justify-content: flex-start; align-items: center; width: calc(100% - 250px);; height: 100%; border-radius: 0px 0px 15px 0px; padding: 5px; box-sizing: border-box; } #MrMenuUI > #MrArea > #Mrcontent > div { display: none; //background-color: #272626; margin: 15px; width: calc(100% - 16px); height: 100%; box-sizing: border-box; overflow-x: auto; } #MrMenuUI > #MrArea > #Mrcontent > div.active { display: block; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row { display: flex; flex-direction: row; justify-content: space-between; align-items: center; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row:not(last-child) { margin-bottom: 14px; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row > div.info { display: flex; flex-direction: column; width: 55%; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row > div.action { display: flex; flex-direction: row; width: 45%; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row > div.info > label { font-size: 17px; font-weight: bold; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row > div.info > p { font-size: 13px; color: #C1C1C1; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row > div:has(button:nth-of-type(2)) button { background-color: #333333; outline: none; color: white; width: 45%; height: 40px; border: 1px solid #434343; margin: 3px; border-radius: 5px; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row > div:has(button:nth-of-type(1)) button { background-color: #333333; outline: none; color: white; width: 100%; height: 40px; border: 1px solid #434343; margin: 3px; border-radius: 5px; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row > div:has(button:nth-of-type(2)) button.active { background-color: #2A51F4; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row > div > input[type="range"] { appearance: none; width: 100%; padding: 10px; border-radius: 6px; border: 1px solid #555; background-color: #333; transition: background-color 0.3s, border-color 0.3s; } #MrMenuUI > #MrArea > #Mrcontent > div > div.row > div:has(select:nth-of-type(2)) select { background-color: #333333; outline: none; color: white; width: 100%; height: 40px; border: 1px solid #434343; margin: 3px; border-radius: 5px; text-align: center; } `; ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// function EventUItoggleMenu() { const menu = document.querySelector('div#MrMenuUI'); const visible = window.getComputedStyle(menu).visibility === 'visible'; menu.style.visibility = visible ? 'hidden' : 'visible'; menu.style.opacity = visible ? '0' : '1'; menu.style.zIndex = visible ? '-100' : '100'; } function EventUItoggleEmoji() { const menu = document.querySelector('div#Mremoji-container'); const visible = window.getComputedStyle(menu).visibility === 'visible'; menu.style.visibility = visible ? 'hidden' : 'visible'; menu.style.opacity = visible ? '0' : '1'; menu.style.zIndex = visible ? '-100' : '100'; } function EventUIsidebar(event) { if (event.target.tagName === 'BUTTON') { const dataTab = event.target.getAttribute('data-tab'); if (dataTab == 'report') { window.open(`https://greasyfork.org/en/scripts/504571-mrmenu/feedback`, '_blank'); return; } document.querySelectorAll("div#MrMenuUI > div#MrArea > div#Mrcontent > div[data-tab]").forEach(item => { item.classList.remove('active'); }); const activeItem = document.querySelector(`div#MrMenuUI > div#MrArea > div#Mrcontent > div[data-tab="${dataTab}"]`); if (activeItem) { activeItem.classList.add('active'); } document.querySelectorAll("div#MrMenuUI > div#MrArea > div#Mrsidebar > button").forEach(item => { item.classList.remove('active'); }); event.target.classList.add('active') } } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// function linkifyText(text) { const urlPattern = /(?:https?:\/\/)?([a-zA-Z0-9-]+\.[a-zA-Z]{2,}(?:\/[^\s]*)?)/gi; const matches = text.match(urlPattern); if (!matches) { return null; } let modifiedText = matches.map(match => { let url = match.startsWith('http://') || match.startsWith('https://') ? match : 'http://' + match; return `<a href="${url}" target="_blank">${url}</a>`; }).join(' '); return `<span>${modifiedText}</span>`; } function packet(args) { return ({data:args}); }; function getPlay() { return document.getElementById("gamerenderer").style["visibility"] !== "hidden"; } function updateCSSRule(s, p, v) { let sheets = [...document.styleSheets]; let ruleExists = false; sheets.forEach(sheet => { let rules = [...sheet.cssRules]; rules.forEach(r => { if (r.selectorText === s) { r.style.setProperty(p, v, 'important'); ruleExists = true; } }); }); if (!ruleExists) { sheets[0].insertRule(`${s} { ${p}: ${v} !important; }`, sheets[0].cssRules.length); } } function ActionFreejoin(nick, guest, ID) { if(window.MrMenu.data.flags.freejoin && window.MrMenu.data.HostID !== null) { if(window.MrMenu.data.ID == window.MrMenu.data.HostID && getPlay() == true) { bonkWSS.send(`42[18,` + ID + `,1]`); bonkWSS.onmessage(packet(`42[18,` + ID + `,1]`)); setTimeout(function() { document.getElementById("newbonklobby_editorbutton").click(); document.getElementById("mapeditor_close").click(); document.getElementById("newbonklobby").style["display"] = "none"; document.getElementById("newbonklobby").style["opacity"] = "0"; document.getElementById("mapeditor_midbox_testbutton").click(); }, 166); } } } let intervalXP = null; function ActionXP(event) { try { if (event.readyState !== WebSocket.CLOSING && event.readyState !== WebSocket.CLOSED) { if(window.MrMenu.data.flags.xp == true && getPlay() == true && bonkWSS !== null) { bonkWSS.send(`42[38]`); } } } catch(error) { } } function ActionXPclick(event) { if(event.target.id == 'MrXPE') { window.MrMenu.data.flags.xp = true; intervalXP = setInterval(() => { ActionXP(event); }, document.getElementById(`MrMenuXPinputRangeDelay`).value ); document.getElementById('xpbarfill').style.backgroundColor = `#44bd32`; } if(event.target.id == 'MrXPD') { window.MrMenu.data.flags.xp = false; clearInterval(intervalXP); intervalXP = null; document.getElementById('xpbarfill').style.backgroundColor = `#473aaf`; } } function ActionXPRange(event) { document.getElementById(`MrMenuXPDelayms`).innerHTML = event.target.value + " ms"; document.getElementById(`MrXPE`).classList.remove('active'); document.getElementById(`MrXPD`).classList.add('active'); window.MrMenu.data.flags.xp = false; clearInterval(intervalXP); intervalXP = null; document.getElementById('xpbarfill').style.backgroundColor = `#473aaf`; } function ActionChatVisibility(event) { if(event.target.id == 'MrChatVisibilyE') { document.getElementById('ingamechatcontent').style.visibility = ``; } if(event.target.id == 'MrChatVisibilyD') { document.getElementById('ingamechatcontent').style.visibility = `hidden`; } } function ActionChatPosition(event) { const chatBox = document.getElementById('ingamechatbox'); if(event.target.id == 'MrChatPositionV') { if (event.target.value == 'top') { chatBox.style.top = `50px`; chatBox.style.bottom = `auto`; } else if (event.target.value == 'bottom') { chatBox.style.top = `auto`; chatBox.style.bottom = `50px`; } } if(event.target.id == 'MrChatPositionH') { if (event.target.value == 'left') { chatBox.style.left = `10px`; chatBox.style.right = `auto`; } else if (event.target.value == 'right') { chatBox.style.left = `auto`; chatBox.style.right = `10px`; } } } function ActionChatColor(event) { let color; if(event.target.id == 'MrChatBgColorbg') { color = document.getElementById('MrChatBgColorbgbase'); color.click(); } if(event.target.id == 'MrChatBgColorFont') { color = document.getElementById('MrChatBgColorFontbase'); color.click(); } } const hexToRGBA = (hex, alpha) => { let r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16); return `rgba(${r}, ${g}, ${b}, ${alpha})`; }; function ActionChatColorFinal(event) { if(event.target.id == 'MrChatBgColorbgbase') { if (event.target.value) { const color = document.getElementById('MrChatBgColorbgbase').value; const transparency = document.getElementById('MrChattransparency').value / 100; const rgbaColor = hexToRGBA(color, transparency) updateCSSRule('#ingamechatbox', 'background-color', rgbaColor); } } if(event.target.id == 'MrChatBgColorFontbase') { if (event.target.value) { const color = event.target.value; const transparency = document.getElementById('MrChattransparency').value / 100; const rgbaColor = hexToRGBA(color, transparency) updateCSSRule('.ingamechatname', 'color', rgbaColor); } } } function ActionChatransparency(event) { if (event.target.value) { const color = document.getElementById('MrChatBgColorbgbase').value; const transparency = event.target.value / 100; const rgbaColor = hexToRGBA(color, transparency) updateCSSRule('#ingamechatbox', 'background-color', rgbaColor); } } function ActionChatNicks() { let nickMr = setInterval(() => { let msgLast = document.querySelectorAll(`#newbonklobby_chat_content > div:nth-last-child(-n+3) > span.newbonklobby_chat_msg_name`); msgLast.forEach(msg => { if (msg.innerHTML.includes('MrBonkeiro') && !msg.classList.contains('MrBonkeiro')) { msg.classList.add('MrBonkeiro'); } }); }, 8); } function ActionChatUrls() { let urlskMr = setInterval(() => { let msgLast = document.querySelectorAll(`#newbonklobby_chat_content > div:nth-last-child(-n+3) > span.newbonklobby_chat_msg_txt`); const urlPattern = /(?:https?:\/\/|www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(?:\/[^\s]*)?/g; msgLast.forEach(msg => { if (!msg.innerHTML.includes('<a')) { msg.innerHTML = msg.innerHTML.replace(urlPattern, (url) => { let href = url.startsWith('http') ? url : `http://${url}`; return `<a href="${href}" target="_blank">${url}</a>`; }); } }); clearInterval(urlskMr); }, 8); } function ActionChatremoveEmoji() { const emojiContainer = document.querySelector('#newbonklobby_chatbox > div.emoji-container'); const emojiContainer2 = document.querySelector('#newbonklobby_chat_input > div.emoji-container'); if (emojiContainer) { emojiContainer.remove(); } if (emojiContainer2) { emojiContainer2.remove(); } } function ActionChataddEmoji() { let emojifiles = [ "😀", "😃", "😄", "😁", "😆", "😅", "🤣", "😂", "🙂", "🙃", "😉", "😊", "😇", "🥰", "😍", "🤩", "😘", "😗", "😚", "😙", "😋", "😛", "😜", "🤪", "😝", "🤑", "🤗", "🤭", "🤫", "🤔", "🤐", "🤨", "😐", "😑", "😶", "😶🌫️", "😏", "😒", "🙄", "😬", "😮💨", "🤥", "😌", "😔", "😪", "🤤", "😴", "😷", "🤒", "🤕", "🤢", "🤮", "🤧", "🥵", "🥶", "🥴", "😵", "😵💫", "🤯", "🤠", "🥳", "🥸", "😎", "🤓", "🧐", "😕", "🫤", "😟", "🙁", "☹️", "😮", "😯", "😲", "😳", "🥺", "😦", "😧", "😨", "😰", "😥", "😢", "😭", "😱", "😖", "😣", "😞", "😓", "😩", "😫", "🥱", "😤", "😡", "😠", "🤬", "😈", "👿", "💀", "☠️", "💩", "🤡", "👹", "👺", "👻", "👽", "👾", "🤖", "😺", "😸", "😹", "😻", "😼", "😽", "🙀", "😿", "😾", "🙈", "🙉", "🙊", "💋", "💌", "💘", "💝", "💖", "💗", "💓", "💞", "💕", "💟", "❣️", "💔", "❤️🔥", "❤️🩹", "❤️", "🧡", "💛", "💚", "💙", "💜", "🤎", "🖤", "🤍", "💯", "💢", "💥", "💫", "💦", "💨", "🕳️", "💣", "💬", "👁️🗨️", "🗨️", "🗯️", "💭", "💤",, "👋", "🤚", "🖐️", "✋", "🖖", "👌", "🤏", "✌️", "🤞", "🤟", "🤘", "🤙", "👈", "👉", "👆", "🖕", "👇", "☝️", "👍", "👎", "✊", "👊", "🤛", "🤜", "👏", "🙌", "👐", "🤲", "🤝", "🙏", "✍️", "💅", "🤳", "💪", "🦾", "🦿", "🦵", "🦶", "👂", "🦻", "👃", "🧠", "🦷", "🦴", "👀", "👁️", "👅", "👄", "👶", "🧒", "👦", "👧", "🧑", "👱", "👨", "🧔", "🧔♂️", "🧔♀️", "👨🦰", "👨🦱", "👨🦳", "👨🦲", "👩", "👩🦰", "🧑🦰", "👩🦱", "🧑🦱", "👩🦳", "🧑🦳", "👩🦲", "🧑🦲", "👱♀️", "👱♂️", "🧓", "👴", "👵", "🙍", "🙍♂️", "🙍♀️", "🙎", "🙎♂️", "🙎♀️", "🙅", "🙅♂️", "🙅♀️", "🙆", "🙆♂️", "🙆♀️", "💁", "💁♂️", "💁♀️", "🙋", "🙋♂️", "🙋♀️", "🧏", "🧏♂️", "🧏♀️", "🙇", "🙇♂️", "🙇♀️", "🤦", "🤦♂️", "🤦♀️", "🤷", "🤷♂️", "🤷♀️", "🧑⚕️", "👨⚕️", "👩⚕️", "🧑🎓", "👨🎓", "👩🎓", "🧑🏫", "👨🏫", "👩🏫", "🧑⚖️", "👨⚖️", "👩⚖️", "🧑🌾", "👨🌾", "👩🌾", "🧑🍳", "👨🍳", "👩🍳", "🧑🔧", "👨🔧", "👩🔧", "🧑🏭", "👨🏭", "👩🏭", "🧑💼", "👨💼", "👩💼", "🧑🔬", "👨🔬", "👩🔬", "🧑💻", "👨💻", "👩💻", "🧑🎤", "👨🎤", "👩🎤", "🧑🎨", "👨🎨", "👩🎨", "🧑✈️", "👨✈️", "👩✈️", "🧑🚀", "👨🚀", "👩🚀", "🧑🚒", "👨🚒", "👩🚒", "👮", "👮♂️", "👮♀️", "🕵️", "🕵️♂️", "🕵️♀️", "💂", "💂♂️", "💂♀️", "👷", "👷♂️", "👷♀️", "🤴", "👸", "👳", "👳♂️", "👳♀️", "👲", "🧕", "🤵", "🤵♂️", "🤵♀️", "👰", "👰♂️", "👰♀️", "🤰", "🤱", "👩🍼", "👨🍼", "🧑🍼", "👼", "🎅", "🤶", "🧑🎄", "🦸", "🦸♂️", "🦸♀️", "🦹", "🦹♂️", "🦹♀️", "🧙", "🧙♂️", "🧙♀️", "🧚", "🧚♂️", "🧚♀️", "🧛", "🧛♂️", "🧛♀️", "🧜", "🧜♂️", "🧜♀️", "🧝", "🧝♂️", "🧝♀️", "🧞", "🧞♂️", "🧞♀️", "🧟", "🧟♂️", "🧟♀️", "💆", "💆♂️", "💆♀️", "💇", "💇♂️", "💇♀️", "🚶", "🚶♂️", "🚶♀️", "🧍", "🧍♂️", "🧍♀️", "🧎", "🧎♂️", "🧎♀️", "🧑🦯", "👨🦯", "👩🦯", "🧑🦼", "👨🦼", "👩🦼", "🧑🦽", "👨🦽", "👩🦽", "🏃", "🏃♂️", "🏃♀️", "💃", "🕺", "🕴️", "👯", "👯♂️", "👯♀️", "🧖", "🧖♂️", "🧖♀️", "🧗", "🧗♂️", "🧗♀️", "🤺", "🏇", "⛷️", "🏂", "🏌️", "🏌️♂️", "🏌️♀️", "🏄", "🏄♂️", "🏄♀️", "🚣", "🚣♂️", "🚣♀️", "🏊", "🏊♂️", "🏊♀️", "⛹️", "⛹️♂️", "⛹️♀️", "🏋️", "🏋️♂️", "🏋️♀️", "🚴", "🚴♂️", "🚴♀️", "🚵", "🚵♂️", "🚵♀️", "🤸", "🤸♂️", "🤸♀️", "🤼", "🤼♂️", "🤼♀️", "🤽", "🤽♂️", "🤽♀️", "🤾", "🤾♂️", "🤾♀️", "🤹", "🤹♂️", "🤹♀️", "🧘", "🧘♂️", "🧘♀️", "🛀", "🛌", "🧑🤝🧑", "👭", "👫", "👬", "💏", "👩❤️💋👨", "👨❤️💋👨", "👩❤️💋👩", "💑", "👩❤️👨", "👨❤️👨", "👩❤️👩", "👪", "👨👩👦", "👨👩👧", "👨👩👧👦", "👨👩👦👦", "👨👩👧👧", "👨👨👦", "👨👨👧", "👨👨👧👦", "👨👨👦👦", "👨👨👧👧", "👩👩👦", "👩👩👧", "👩👩👧👦", "👩👩👦👦", "👩👩👧👧", "👨👦", "👨👦👦", "👨👧", "👨👧👦", "👨👧👧", "👩👦", "👩👦👦", "👩👧", "👩👧👦", "👩👧👧", "🗣️", "👤", "👥", "🫂", "👣", "🦰", "🦱", "🦳", "🦲", "🐵", "🐒", "🦍", "🦧", "🐶", "🐕", "🦮", "🐕🦺", "🐩", "🐺", "🦊", "🦝", "🐱", "🐈", "🐈⬛", "🦁", "🐯", "🐅", "🐆", "🐴", "🐎", "🦄", "🦓", "🦌", "🐮", "🐂", "🐃", "🐄", "🐷", "🐖", "🐗", "🐽", "🐏", "🐑", "🐐", "🐪", "🐫", "🦙", "🦒", "🐘", "🦏", "🦛", "🐭", "🐁", "🐀", "🐹", "🐰", "🐇", "🐿️", "🦔", "🦇", "🐻", "🐻❄️", "🐨", "🐼", "🦥", "🦦", "🦨", "🦘", "🦡", "🐾", "🦃", "🐔", "🐓", "🐣", "🐤", "🐥", "🐦", "🐧", "🕊️", "🦅", "🦆", "🦢", "🦉", "🦩", "🦚", "🦜", "🐸", "🐊", "🐢", "🦎", "🐍", "🐲", "🐉", "🦕", "🦖", "🐳", "🐋", "🐬", "🐟", "🐠", "🐡", "🦈", "🐙", "🐚", "🐌", "🦋", "🐛", "🐜", "🐝", "🐞", "🦗", "🕷️", "🕸️", "🦂", "🦟", "🦠", "💐", "🌸", "💮", "🏵️", "🌹", "🥀", "🌺", "🌻", "🌼", "🌷", "🌱", "🌲", "🌳", "🌴", "🌵", "🌾", "🌿", "☘️", "🍀", "🍁", "🍂", "🍃", "🍇", "🍈", "🍉", "🍊", "🍋", "🍌", "🍍", "🥭", "🍎", "🍏", "🍐", "🍑", "🍒", "🍓", "🥝", "🍅", "🥥", "🥑", "🍆", "🥔", "🥕", "🌽", "🌶️", "🥒", "🥬", "🥦", "🧄", "🧅", "🍄", "🥜", "🌰", "🍞", "🥐", "🥖", "🥨", "🥯", "🥞", "🧇", "🧀", "🍖", "🍗", "🥩", "🥓", "🍔", "🍟", "🍕", "🌭", "🥪", "🌮", "🌯", "🥙", "🧆", "🥚", "🍳", "🥘", "🍲", "🥣", "🥗", "🍿", "🧈", "🧂", "🥫", "🍱", "🍘", "🍙", "🍚", "🍛", "🍜", "🍝", "🍠", "🍢", "🍣", "🍤", "🍥", "🥮", "🍡", "🥟", "🥠", "🥡", "🦀", "🦞", "🦐", "🦑", "🦪", "🍦", "🍧", "🍨", "🍩", "🍪", "🎂", "🍰", "🧁", "🥧", "🍫", "🍬", "🍭", "🍮", "🍯", "🍼", "🥛", "☕", "🍵", "🍶", "🍾", "🍷", "🍸", "🍹", "🍺", "🍻", "🥂", "🥃", "🥤", "🧃", "🧉", "🧊", "🥢", "🍽️", "🍴", "🥄", "🔪", "🏺", "🌍", "🌎", "🌏", "🌐", "🗺️", "🗾", "🧭", "🏔️", "⛰️", "🌋", "🗻", "🏕️", "🏖️", "🏜️", "🏝️", "🏞️", "🏟️", "🏛️", "🏗️", "🧱", "🏘️", "🏚️", "🏠", "🏡", "🏢", "🏣", "🏤", "🏥", "🏦", "🏨", "🏩", "🏪", "🏫", "🏬", "🏭", "🏯", "🏰", "💒", "🗼", "🗽", "⛪", "🕌", "🛕", "🕍", "⛩️", "🕋", "⛲", "⛺", "🌁", "🌃", "🏙️", "🌄", "🌅", "🌆", "🌇", "🌉", "♨️", "🎠", "🎡", "🎢", "💈", "🎪", "🚂", "🚃", "🚄", "🚅", "🚆", "🚇", "🚈", "🚉", "🚊", "🚝", "🚞", "🚋", "🚌", "🚍", "🚎", "🚐", "🚑", "🚒", "🚓", "🚔", "🚕", "🚖", "🚗", "🚘", "🚙", "🚚", "🚛", "🚜", "🏎️", "🏍️", "🛵", "🦽", "🦼", "🛺", "🚲", "🛴", "🛹", "🚏", "🛣️", "🛤️", "🛢️", "⛽", "🚨", "🚥", "🚦", "🛑", "🚧", "⚓", "⛵", "🛶", "🚤", "🛳️", "⛴️", "🛥️", "🚢", "✈️", "🛩️", "🛫", "🛬", "🪂", "💺", "🚁", "🚟", "🚠", "🚡", "🛰️", "🚀", "🛸", "🛎️", "🧳", "⌛", "⏳", "⌚", "⏰", "⏱️", "⏲️", "🕰️", "🕛", "🕧", "🕐", "🕜", "🕑", "🕝", "🕒", "🕞", "🕓", "🕟", "🕔", "🕠", "🕕", "🕡", "🕖", "🕢", "🕗", "🕣", "🕘", "🕤", "🕙", "🕥", "🕚", "🕦", "🌑", "🌒", "🌓", "🌔", "🌕", "🌖", "🌗", "🌘", "🌙", "🌚", "🌛", "🌜", "🌡️", "☀️", "🌝", "🌞", "🪐", "⭐", "🌟", "🌠", "🌌", "☁️", "⛅", "⛈️", "🌤️", "🌥️", "🌦️", "🌧️", "🌨️", "🌩️", "🌪️", "🌫️", "🌬️", "🌀", "🌈", "🌂", "☂️", "☔", "⛱️", "⚡", "❄️", "☃️", "⛄", "☄️", "🔥", "💧", "🌊", "🎃", "🎄", "🎆", "🎇", "🧨", "✨", "🎈", "🎉", "🎊", "🎋", "🎍", "🎎", "🎏", "🎐", "🎑", "🧧", "🎀", "🎁", "🎗️", "🎟️", "🎫", "🎖️", "🏆", "🏅", "🥇", "🥈", "🥉", "⚽", "⚾", "🥎", "🏀", "🏐", "🏈", "🏉", "🎾", "🥏", "🎳", "🏏", "🏑", "🏒", "🥍", "🏓", "🏸", "🥊", "🥋", "🥅", "⛳", "⛸️", "🎣", "🤿", "🎽", "🎿", "🛷", "🥌", "🎯", "🪀", "🪁", "🎱", "🔮", "🧿", "🎮", "🕹️", "🎰", "🎲", "🧩", "🧸", "♠️", "♥️", "♦️", "♣️", "♟️", "🃏", "🀄", "🎴", "🎭", "🖼️", "🎨", "🧵", "🪡", "🧶", "👓", "🕶️", "🥽", "🥼", "🦺", "👔", "👕", "👖", "🧣", "🧤", "🧥", "🧦", "👗", "👘", "🥻", "🩱", "🩲", "🩳", "👙", "👚", "👛", "👜", "👝", "🛍️", "🎒", "👞", "👟", "🥾", "🥿", "👠", "👡", "🩰", "👢", "👑", "👒", "🎩", "🎓", "🧢", "⛑️", "📿", "💄", "💍", "💎", "🔇", "🔈", "🔉", "🔊", "📢", "📣", "📯", "🔔", "🔕", "🎼", "🎵", "🎶", "🎙️", "🎚️", "🎛️", "🎤", "🎧", "📻", "🎷", "🎸", "🎹", "🎺", "🎻", "🪕", "🥁", "📱", "📲", "☎️", "📞", "📟", "📠", "🔋", "🔌", "💻", "🖥️", "🖨️", "⌨️", "🖱️", "🖲️", "💽", "💾", "💿", "📀", "🧮", "🎥", "🎞️", "📽️", "🎬", "📺", "📷", "📸", "📹", "📼", "🔍", "🔎", "🕯️", "💡", "🔦", "🏮", "🪔", "📔", "📕", "📖", "📗", "📘", "📙", "📚", "📓", "📒", "📃", "📜", "📄", "📰", "🗞️", "📑", "🔖", "🏷️", "💰", "💴", "💵", "💶", "💷", "💸", "💳", "🧾", "💹", "✉️", "📧", "📨", "📩", "📤", "📥", "📦", "📫", "📪", "📬", "📭", "📮", "🗳️", "✏️", "✒️", "🖋️", "🖊️", "🖌️", "🖍️", "📝", "💼", "📁", "📂", "🗂️", "📅", "📆", "🗒️", "🗓️", "📇", "📈", "📉", "📊", "📋", "📌", "📍", "📎", "🖇️", "📏", "📐", "✂️", "🗃️", "🗄️", "🗑️", "🔒", "🔓", "🔏", "🔐", "🔑", "🗝️", "🔨", "🪓", "⛏️", "⚒️", "🛠️", "🗡️", "⚔️", "🔫", "🏹", "🛡️", "🔧", "🔩", "⚙️", "🗜️", "⚖️", "🦯", "🔗", "⛓️", "🧰", "🧲", "⚗️", "🧪", "🧫", "🧬", "🔬", "🔭", "📡", "💉", "🩸", "💊", "🩹", "🩺", "🚪", "🛏️", "🛋️", "🪑", "🚽", "🚿", "🛁", "🪒", "🧴", "🧷", "🧹", "🧺", "🧻", "🧼", "🧽", "🧯", "🛒", "🚬", "⚰️", "⚱️", "🗿", "🏧", "🚮", "🚰", "♿", "🚹", "🚺", "🚻", "🚼", "🚾", "🛂", "🛃", "🛄", "🛅", "⚠️", "🚸", "⛔", "🚫", "🚳", "🚭", "🚯", "🚱", "🚷", "📵", "🔞", "☢️", "☣️", "⬆️", "↗️", "➡️", "↘️", "⬇️", "↙️", "⬅️", "↖️", "↕️", "↔️", "↩️", "↪️", "⤴️", "⤵️", "🔃", "🔄", "🔙", "🔚", "🔛", "🔜", "🔝", "🛐", "⚛️", "🕉️", "✡️", "☸️", "☯️", "✝️", "☦️", "☪️", "☮️", "🕎", "🔯", "♈", "♉", "♊", "♋", "♌", "♍", "♎", "♏", "♐", "♑", "♒", "♓", "⛎", "🔀", "🔁", "🔂", "▶️", "⏩", "⏭️", "⏯️", "◀️", "⏪", "⏮️", "🔼", "⏫", "🔽", "⏬", "⏸️", "⏹️", "⏺️", "⏏️", "🎦", "🔅", "🔆", "📶", "📳", "📴", "♀️", "♂️", "⚧️", "✖️", "➕", "➖", "➗", "🟰", "♾️", "‼️", "⁉️", "❓", "❔", "❕", "❗", "〰️", "💱", "💲", "⚕️", "♻️", "⚜️", "🔱", "📛", "🔰", "⭕", "✅", "☑️", "✔️", "❌", "❎", "➰", "➿", "〽️", "✳️", "✴️", "❇️", "©️", "®️", "™️", "#️⃣", "*️⃣", "0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6️⃣", "7️⃣", "8️⃣", "9️⃣", "🔟", "🔠", "🔡", "🔢", "🔣", "🔤", "🅰️", "🆎", "🅱️", "🆑", "🆒", "🆓", "ℹ️", "🆔", "Ⓜ️", "🆕", "🆖", "🅾️", "🆗", "🅿️", "🆘", "🆙", "🆚", "🈁", "🈂️", "🈷️", "🈶", "🈯", "🉐", "🈹", "🈚", "🈲", "🉑", "🈸", "🈴", "🈳", "㊗️", "㊙️", "🈺", "🈵", "🔴", "🟠", "🟡", "🟢", "🔵", "🟣", "🟤", "⚫", "⚪", "🟥", "🟧", "🟨", "🟩", "🟦", "🟪", "🟫", "⬛", "⬜", "◼️", "◻️", "◾", "◽", "▪️", "▫️", "🔶", "🔷", "🔸", "🔹", "🔺", "🔻", "💠", "🔘", "🔳", "🔲", "🏁", "🚩", "🎌", "🏴", "🏳️", "🏳️🌈", "🏳️⚧️", "🏴☠️", "🇦🇨", "🇦🇩", "🇦🇪", "🇦🇫", "🇦🇬", "🇦🇮", "🇦🇱", "🇦🇲", "🇦🇴", "🇦🇶", "🇦🇷", "🇦🇸", "🇦🇹", "🇦🇺", "🇦🇼", "🇦🇽", "🇦🇿", "🇧🇦", "🇧🇧", "🇧🇩", "🇧🇪", "🇧🇫", "🇧🇬", "🇧🇭", "🇧🇮", "🇧🇯", "🇧🇱", "🇧🇲", "🇧🇳", "🇧🇴", "🇧🇶", "🇧🇷", "🇧🇸", "🇧🇹", "🇧🇻", "🇧🇼", "🇧🇾", "🇧🇿", "🇨🇦", "🇨🇨", "🇨🇩", "🇨🇫", "🇨🇬", "🇨🇭", "🇨🇮", "🇨🇰", "🇨🇱", "🇨🇲", "🇨🇳", "🇨🇴", "🇨🇵", "🇨🇷", "🇨🇺", "🇨🇻", "🇨🇼", "🇨🇽", "🇨🇾", "🇨🇿", "🇩🇪", "🇩🇬", "🇩🇯", "🇩🇰", "🇩🇲", "🇩🇴", "🇩🇿", "🇪🇦", "🇪🇨", "🇪🇪", "🇪🇬", "🇪🇭", "🇪🇷", "🇪🇸", "🇪🇹", "🇪🇺", "🇫🇮", "🇫🇯", "🇫🇰", "🇫🇲", "🇫🇴", "🇫🇷", "🇬🇦", "🇬🇧", "🇬🇩", "🇬🇪", "🇬🇫", "🇬🇬", "🇬🇭", "🇬🇮", "🇬🇱", "🇬🇲", "🇬🇳", "🇬🇵", "🇬🇶", "🇬🇷", "🇬🇸", "🇬🇹", "🇬🇺", "🇬🇼", "🇬🇾", "🇭🇰", "🇭🇲", "🇭🇳", "🇭🇷", "🇭🇹", "🇭🇺", "🇮🇨", "🇮🇩", "🇮🇪", "🇮🇱", "🇮🇲", "🇮🇳", "🇮🇴", "🇮🇶", "🇮🇷", "🇮🇸", "🇮🇹", "🇯🇪", "🇯🇲", "🇯🇴", "🇯🇵", "🇰🇪", "🇰🇬", "🇰🇭", "🇰🇮", "🇰🇲", "🇰🇳", "🇰🇵", "🇰🇷", "🇰🇼", "🇰🇾", "🇰🇿", "🇱🇦", "🇱🇧", "🇱🇨", "🇱🇮", "🇱🇰", "🇱🇷", "🇱🇸", "🇱🇹", "🇱🇺", "🇱🇻", "🇱🇾", "🇲🇦", "🇲🇨", "🇲🇩", "🇲🇪", "🇲🇫", "🇲🇬", "🇲🇭", "🇲🇰", "🇲🇱", "🇲🇲", "🇲🇳", "🇲🇴", "🇲🇵", "🇲🇶", "🇲🇷", "🇲🇸", "🇲🇹", "🇲🇺", "🇲🇻", "🇲🇼", "🇲🇽", "🇲🇾", "🇲🇿", "🇳🇦", "🇳🇨", "🇳🇪", "🇳🇫", "🇳🇬", "🇳🇮", "🇳🇱", "🇳🇴", "🇳🇵", "🇳🇷", "🇳🇺", "🇳🇿", "🇴🇲", "🇵🇦", "🇵🇪", "🇵🇫", "🇵🇬", "🇵🇭", "🇵🇰", "🇵🇱", "🇵🇲", "🇵🇳", "🇵🇷", "🇵🇸", "🇵🇹", "🇵🇼", "🇵🇾", "🇶🇦", "🇷🇪", "🇷🇴", "🇷🇸", "🇷🇺", "🇷🇼", "🇸🇦", "🇸🇧", "🇸🇨", "🇸🇩", "🇸🇪", "🇸🇬", "🇸🇭", "🇸🇮", "🇸🇯", "🇸🇰", "🇸🇱", "🇸🇲", "🇸🇳", "🇸🇴", "🇸🇷", "🇸🇸", "🇸🇹", "🇸🇻", "🇸🇽", "🇸🇾", "🇸🇿", "🇹🇦", "🇹🇨", "🇹🇩", "🇹🇫", "🇹🇬", "🇹🇭", "🇹🇯", "🇹🇰", "🇹🇱", "🇹🇲", "🇹🇳", "🇹🇴", "🇹🇷", "🇹🇹", "🇹🇻", "🇹🇼", "🇹🇿", "🇺🇦", "🇺🇬", "🇺🇲", "🇺🇳", "🇺🇸", "🇺🇾", "🇺🇿", "🇻🇦", "🇻🇨", "🇻🇪", "🇻🇬", "🇻🇮", "🇻🇳", "🇻🇺", "🇼🇫", "🇼🇸", "🇽🇰", "🇾🇪", "🇹🇿", "🇦🇿", "🇲🇿", "🇼🇿", "🏴", "🏴", "🏴", '👋🏻', '👋🏼', '👋🏽', '👋🏾', '👋🏿', '🤚🏻', '🤚🏼', '🤚🏽', '🤚🏾', '🤚🏿', '🖐🏻', '🖐🏼', '🖐🏽', '🖐🏾', '🖐🏿', '✋🏻', '✋🏼', '✋🏽', '✋🏾', '✋🏿', '🖖🏻', '🖖🏼', '🖖🏽', '🖖🏾', '🖖🏿', '👌🏻', '👌🏼', '👌🏽', '👌🏾', '👌🏿', '🤏🏻', '🤏🏼', '🤏🏽', '🤏🏾', '🤏🏿', '✌🏻', '✌🏼', '✌🏽', '✌🏾', '✌🏿', '🤞🏻', '🤞🏼', '🤞🏽', '🤞🏾', '🤞🏿', '🤟🏻', '🤟🏼', '🤟🏽', '🤟🏾', '🤟🏿', '🤘🏻', '🤘🏼', '🤘🏽', '🤘🏾', '🤘🏿', '🤙🏻', '🤙🏼', '🤙🏽', '🤙🏾', '🤙🏿', '👈🏻', '👈🏼', '👈🏽', '👈🏾', '👈🏿', '👉🏻', '👉🏼', '👉🏽', '👉🏾', '👉🏿', '👆🏻', '👆🏼', '👆🏽', '👆🏾', '👆🏿', '🖕🏻', '🖕🏼', '🖕🏽', '🖕🏾', '🖕🏿', '👇🏻', '👇🏼', '👇🏽', '👇🏾', '👇🏿', '☝🏻', '☝🏼', '☝🏽', '☝🏾', '☝🏿', '👍🏻', '👍🏼', '👍🏽', '👍🏾', '👍🏿', '👎🏻', '👎🏼', '👎🏽', '👎🏾', '👎🏿', '✊🏻', '✊🏼', '✊🏽', '✊🏾', '✊🏿', '👊🏻', '👊🏼', '👊🏽', '👊🏾', '👊🏿', '🤛🏻', '🤛🏼', '🤛🏽', '🤛🏾', '🤛🏿', '🤜🏻', '🤜🏼', '🤜🏽', '🤜🏾', '🤜🏿', '👏🏻', '👏🏼', '👏🏽', '👏🏾', '👏🏿', '🙌🏻', '🙌🏼', '🙌🏽', '🙌🏾', '🙌🏿', '👐🏻', '👐🏼', '👐🏽', '👐🏾', '👐🏿', '🤲🏻', '🤲🏼', '🤲🏽', '🤲🏾', '🤲🏿', '🤝🏻', '🤝🏼', '🤝🏽', '🤝🏾', '🤝🏿', '🙏🏻', '🙏🏼', '🙏🏽', '🙏🏾', '🙏🏿', '✍🏻', '✍🏼', '✍🏽', '✍🏾', '✍🏿', '💅🏻', '💅🏼', '💅🏽', '💅🏾', '💅🏿', '🤳🏻', '🤳🏼', '🤳🏽', '🤳🏾', '🤳🏿', '💪🏻', '💪🏼', '💪🏽', '💪🏾', '💪🏿', '🦵🏻', '🦵🏼', '🦵🏽', '🦵🏾', '🦵🏿', '🦶🏻', '🦶🏼', '🦶🏽', '🦶🏾', '🦶🏿', '👂🏻', '👂🏼', '👂🏽', '👂🏾', '👂🏿', '🦻🏻', '🦻🏼', '🦻🏽', '🦻🏾', '🦻🏿', '👃🏻', '👃🏼', '👃🏽', '👃🏾', '👃🏿', '👶🏻', '👶🏼', '👶🏽', '👶🏾', '👶🏿', '🧒🏻', '🧒🏼', '🧒🏽', '🧒🏾', '🧒🏿', '👦🏻', '👦🏼', '👦🏽', '👦🏾', '👦🏿', '👧🏻', '👧🏼', '👧🏽', '👧🏾', '👧🏿', '🧑🏻', '🧑🏼', '🧑🏽', '🧑🏾', '🧑🏿', '👱🏻', '👱🏼', '👱🏽', '👱🏾', '👱🏿', '👨🏻', '👨🏼', '👨🏽', '👨🏾', '👨🏿', '🧔🏻', '🧔🏼', '🧔🏽', '🧔🏾', '🧔🏿', '🧔🏻♂️', '🧔🏼♂️', '🧔🏽♂️', '🧔🏾♂️', '🧔🏿♂️', '🧔🏻♀️', '🧔🏼♀️', '🧔🏽♀️', '🧔🏾♀️', '🧔🏿♀️', '👨🏻🦰', '👨🏼🦰', '👨🏽🦰', '👨🏾🦰', '👨🏿🦰', '👨🏻🦱', '👨🏼🦱', '👨🏽🦱', '👨🏾🦱', '👨🏿🦱', '👨🏻🦳', '👨🏼🦳', '👨🏽🦳', '👨🏾🦳', '👨🏿🦳', '👨🏻🦲', '👨🏼🦲', '👨🏽🦲', '👨🏾🦲', '👨🏿🦲', '👩🏻', '👩🏼', '👩🏽', '👩🏾', '👩🏿', '👩🏻🦰', '👩🏼🦰', '👩🏽🦰', '👩🏾🦰', '👩🏿🦰', '🧑🏻🦰', '🧑🏼🦰', '🧑🏽🦰', '🧑🏾🦰', '🧑🏿🦰', '👩🏻🦱', '👩🏼🦱', '👩🏽🦱', '👩🏾🦱', '👩🏿🦱', '🧑🏻🦱', '🧑🏼🦱', '🧑🏽🦱', '🧑🏾🦱', '🧑🏿🦱', '👩🏻🦳', '👩🏼🦳', '👩🏽🦳', '👩🏾🦳', '👩🏿🦳', '🧑🏻🦳', '🧑🏼🦳', '🧑🏽🦳', '🧑🏾🦳', '🧑🏿🦳', '👩🏻🦲', '👩🏼🦲', '👩🏽🦲', '👩🏾🦲', '👩🏿🦲', '🧑🏻🦲', '🧑🏼🦲', '🧑🏽🦲', '🧑🏾🦲', '🧑🏿🦲', '👩🏻🦰', '👩🏼🦰', '👩🏽🦰', '👩🏾🦰', '👩🏿🦰', '👩🏻🦱', '👩🏼🦱', '👩🏽🦱', '👩🏾🦱', '👩🏿🦱', '👩🏻🦳', '👩🏼🦳', '👩🏽🦳', '👩🏾🦳', '👩🏿🦳', '👩🏻🦲', '👩🏼🦲', '👩🏽🦲', '👩🏾🦲', '👩🏿🦲', '👩🏻🦳', '👩🏼🦳', '👩🏽🦳', '👩🏾🦳', '👩🏿🦳', '🧑🏻🦰', '🧑🏼🦰', '🧑🏽🦰', '🧑🏾🦰', '🧑🏿🦰', '🧑🏻🦱', '🧑🏼🦱', '🧑🏽🦱', '🧑🏾🦱', '🧑🏿🦱', '🧑🏻🦳', '🧑🏼🦳', '🧑🏽🦳', '🧑🏾🦳', '🧑🏿🦳', '🧑🏻🦲', '🧑🏼🦲', '🧑🏽🦲', '🧑🏾🦲', '🧑🏿🦲', '👩🏻🦰', '👩🏼🦰', '👩🏽🦰', '👩🏾🦰', '👩🏿🦰', '👩🏻🦱', '👩🏼🦱', '👩🏽🦱', '👩🏾🦱', '👩🏿🦱', '👩🏻🦳', '👩🏼🦳', '👩🏽🦳', '👩🏾🦳', '👩🏿🦳', '👩🏻🦲', '👩🏼🦲', '👩🏽🦲', '👩🏾🦲', '👩🏿🦲' ]; function addEmojiContainers() { let icon = `<div class="emoji-container" style="position: absolute; width: 20px; height: 20px; bottom: 2px; left: auto; right: 10px; margin: auto; visibility: inherit;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 1a11 11 0 1 0 11 11A11.013 11.013 0 0 0 12 1zm0 20a9 9 0 1 1 9-9 9.01 9.01 0 0 1-9 9zm4.632-6.775a1 1 0 0 1 .143 1.407A6.036 6.036 0 0 1 12 18a1 1 0 0 1 0-2 4.045 4.045 0 0 0 3.225-1.632 1 1 0 0 1 1.407-.143zM18 8a1 1 0 0 1 1 1 4 4 0 0 1-4 4 2 2 0 0 1-2-2v-1h-2v1a2 2 0 0 1-2 2 4 4 0 0 1-4-4 1 1 0 0 1 1-1h4a1 1 0 0 1 1 1h2a1 1 0 0 1 1-1z" fill="black"></path></svg></div>`; addHTML(icon, `#newbonklobby_chatbox`); document.getElementById('newbonklobby_chat_input').style.pointerEvents = 'auto'; addHTML(icon, `#ingamechatbox`); document.getElementById('ingamechatbox').style.pointerEvents = 'auto'; document.querySelectorAll('.emoji-container').forEach(container => { container.addEventListener('click', (event) => { document.getElementById('newbonklobby_chat_lowerinstruction').innerHTML = ``; EventUItoggleEmoji() }); }); } function hiddenIcon() { document.getElementById('ingamechatinputtext').addEventListener('keydown', function() { const emojiContainer = document.querySelector('#ingamechatbox .emoji-container'); setTimeout(() => { emojiContainer.style.display = this.classList.contains('ingamechatinputtextbg') ? 'block' : 'none'; }, 30); }); } function addStyles() { addCSS(`MrMenuUICSS`, ` @keyframes colorEmoji { 0%, 50%, 100% { fill: black; } 25%, 75% { fill: white; } } .emoji-container > svg > path { animation: colorEmoji 4s infinite; } `); addCSS(`MrMenuUIemoji`, ` #Mremoji-container { visibility: hidden; opacity: 0; z-index: -100; display: flex; position: absolute; top: 50%; left: 50%; width: calc(90% - 50px); height: calc(90% - 50px); transform: translate(-50%, -50%); margin: 12px; flex-wrap: wrap; justify-content: flex-start;align-content: flex-start; padding: 10px; background-color: #1f1f1f; border: 2px solid #ccc; border-radius: 10px; overflow-y: auto; } .emoji { font-size: 40px; width: 60px; height: 60px; } .emoji:hover { transform: scale(1.2); } `); } function addEmojiPicker() { const emojiHTML = emojifiles.map(emoji => `<div class="emoji">${emoji}</div>`).join(''); const emojiContainer = `<div id="Mremoji-container">${emojiHTML}</div>`; addHTML(emojiContainer, '#bonkiocontainer'); } function addEmojiClickEvent() { document.querySelector('#Mremoji-container').addEventListener('click', function(event) { if (event.target.classList.contains('emoji')) { const chatInputId = getPlay() ? 'ingamechatinputtext' : 'newbonklobby_chat_input'; const chatInput = document.getElementById(chatInputId); chatInput.value += ` ${event.target.textContent}`; chatInput.setSelectionRange(chatInput.value.length, chatInput.value.length); chatInput.focus(); EventUItoggleEmoji(); } }); } addEmojiContainers(); hiddenIcon(); addStyles(); addEmojiPicker(); addEmojiPicker(); addEmojiClickEvent(); } function ActionResetData(event) { window.MrMenu.data.HostID = null; window.MrMenu.data.ID = null; window.MrMenu.data.players = []; } function ActionIPLoggerClick(event) { function IPLoggerAddIP(ip) { if (!window.MrMenu.IPLogger.IPs.some(item => item.IP === ip)) { window.MrMenu.IPLogger.IPs.push({ IP: ip, loc: '' }); } } function addPlayer(nick, ip) { const ipEntry = window.MrMenu.IPLogger.IPs.find(item => item.IP === ip); if (!ipEntry) return console.error(`IP ${ip} does not exist. Add the IP first.`); const playerEntry = window.MrMenu.IPLogger.players.find(player => player.nick === nick); if (playerEntry) { const ipRecord = playerEntry.ips.find(record => record.ip === ip); if (ipRecord) ipRecord.hit++; else playerEntry.ips.push({ ip, hit: 1 }); } else { window.MrMenu.IPLogger.players.push({ nick, ips: [{ ip, hit: 1 }] }); } } RTCPeerConnection.prototype.addIceCandidate2 = null; function enable() { RTCPeerConnection.prototype.addIceCandidate = function(...args) { if (!args[0].address.includes(".local")) { IPLoggerAddIP(args[0].address); if (window.MrMenu && window.MrMenu.data && window.MrMenu.data.players) { for (let n = 0; n < window.MrMenu.data.players.length; n++) { let nick = window.MrMenu.data.players[n].nick; addPlayer(nick, args[0].address); } } } this.addIceCandidate2(...args); }; } function disable() { if(RTCPeerConnection.prototype.addIceCandidate2 !== null) { RTCPeerConnection.prototype.addIceCandidate = RTCPeerConnection.prototype.addIceCandidate2; RTCPeerConnection.prototype.addIceCandidate2 = null; } } if(event.target.id == 'IPLoggerE') { window.MrMenu.data.flags.iplogger = true; enable(); } if(event.target.id == 'IPLoggerD') { window.MrMenu.data.flags.iplogger = false; disable(); } } function toggleFullscreen() { const el = document.getElementById('bonkiocontainer'); if (el) { try { if (!document.fullscreenElement) { el.requestFullscreen?.() || el.mozRequestFullScreen?.() || el.webkitRequestFullscreen?.() || el.msRequestFullscreen?.(); } else { document.exitFullscreen?.() || document.mozCancelFullScreen?.() || document.webkitExitFullscreen?.() || document.msExitFullscreen?.(); } } catch (error) { } } } function SearchRoom() { function addSearchBox() { addHTML('<div id="MrSearchBox" style=" display: flex; height: 40px; align-items: center; justify-content: center;"><input type="text" style=" height: 30px; width: 45%; outline: none; border: 1px solid #cccc; border-radius: 30px; background-color: #c1cdd2; color: black; text-align: center; "></div>', `div#roomlisttopbar`); document.getElementById('MrSearchBox').addEventListener('input', function(event) { const filterValue = event.target.value.toLowerCase(); const rows = document.querySelectorAll('#roomlisttable > tbody > tr'); rows.forEach(row => { const cellText = row.querySelector('td').textContent.toLowerCase(); if (filterValue === "" || cellText.includes(filterValue)) { row.style.display = 'table-row'; } else { row.style.display = 'none'; } }); }); } function removeSearchBox() { const emojiContainer = document.querySelector('div#roomlisttopbar > div#MrSearchBox'); if (emojiContainer) { emojiContainer.remove(); } } if(event.target.id == `MrHostSearchRoomE`) { if(document.getElementById('MrSearchBox') == null) { addSearchBox(); } } if(event.target.id == `MrHostSearchRoomD`) { removeSearchBox(); } } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// function ManagerWSS(event) { if(event.data && event.data.startsWith("42[3,")) { Event_Roomjoin(event); } if(event.data && event.data.startsWith("42[4,")) { Event_Playerjoin(event); } if(event.data && event.data.startsWith("42[5,")) { Event_Playerleave(event); } if(event.data && event.data.startsWith("42[20,")) { Event_ChatMessage(event); } if(event.data && event.data.startsWith("42[33,")) { Event_MapSuggest(event); } } function Event_Roomjoin(event) { let vdata; try { vdata = JSON.parse(event.data.slice(2)); let ID = vdata[1]; let HostID = vdata[2]; window.MrMenu.data.HostID = HostID; window.MrMenu.data.ID = ID; } catch (error) { } } function Event_Playerjoin(event) { let vdata; try { vdata = JSON.parse(event.data.slice(2)); let ID = vdata[1]; let PeerID = vdata[2]; let Nick = vdata[3]; let guest = vdata[4]; let newPlayer = { id: ID, peerID: PeerID, nick: Nick, guest: guest }; let isUnique = !window.MrMenu.data.players.some(player => player.id === newPlayer.id); if (isUnique) { window.MrMenu.data.players.push(newPlayer); } if(window.MrMenu.data.flags.freejoin == true) { if(window.MrMenu.data.flags.freejoinguest == true && guest == true) { ActionFreejoin(Nick, guest, ID); } if(guest == false) { ActionFreejoin(Nick, guest, ID); } } } catch (error) { } } function Event_Playerleave(event) { let vdata; try { vdata = JSON.parse(event.data.slice(2)); let ID = vdata[1]; if(window.MrMenu.data.ID == ID) { ActionResetData(event); } else { let playerIndex = window.MrMenu.data.players.findIndex(player => player.id === ID); if (playerIndex !== -1) { window.MrMenu.data.players.splice(playerIndex, 1); } } } catch (error) { } } function Event_ChatMessage(event) { let vdata; try { vdata = JSON.parse(event.data.slice(2)); let ID = vdata[1]; let MSG = vdata[2]; if(window.MrMenu.data.lastmsg !== MSG) { if(window.MrMenu.data.flags.linkmsg == true) { ActionChatUrls(); } if(!getPlay()) { ActionChatNicks(); } } } catch (error) { } } function Event_MapSuggest(event) { let vdata; try { vdata = JSON.parse(event.data.slice(2)); let map = vdata[1]; let ID = vdata[2]; } catch (error) { } } ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// function InterceptWSS() { window.MrMenu = {}; window.MrMenu.data = { HostID: null, ID: null, lastmsg:null, players: [], IPLogger : { IPs: [], players: [] }, flags: { freejoin: false, freejoinguest: false, xp: false, linkmsg: false, iplogger: false, } }; var originalSend = WebSocket.prototype.send; WebSocket.prototype.send = function(args) { if (this.readyState == WebSocket.OPEN) { bonkWSS = this; } var originalReceive = this.onmessage; this.onmessage = function(event) { ManagerWSS(event); return originalReceive.call(this, event); }; return originalSend.call(this, args); } } function Init() { InterceptWSS(); addCSS(`MrMenuUICSS`, UICSS); addHTML(UI.main, `#bonkiocontainer`); for (let key in UI.tab) { if (typeof UI.tab[key] === 'string') { addHTML(UI.tab[key], `#MrArea > #Mrcontent`); } } updateCSSRule('.ingamechatname.MrBonkeiro::before', 'content', '"👑 "'); updateCSSRule('.newbonklobby_chat_msg_name.MrBonkeiro::before', 'content', '"👑 "'); EventUItoggleMenu(); document.querySelector("body").addEventListener("keydown", (event) => { if (event.key === 'Delete') { EventUItoggleMenu(); } }); document.querySelector(`div#pretty_top_name`).addEventListener(`click`, () => { EventUItoggleMenu();}); document.querySelector(`#Mrtitlebar > svg`).addEventListener(`click`, () => { EventUItoggleMenu();}); document.querySelector(`div#MrMenuUI > div#MrArea > div#Mrsidebar`).addEventListener("click", (event) => { EventUIsidebar(event); const actionElements = document.querySelectorAll("#Mrcontent > div.active > div > div.action"); actionElements.forEach(actionElement => { actionElement.addEventListener("click", (event) => { if (event.target.tagName === 'BUTTON') { event.target.parentElement.querySelectorAll("button").forEach(button => { button.classList.remove('active'); }); event.target.classList.add('active'); } }); }); }); document.querySelector(`button#MrXPE`).addEventListener("click", (event) => { ActionXPclick(event); }); document.querySelector(`button#MrXPD`).addEventListener("click", (event) => { ActionXPclick(event) }); document.querySelector(`#MrMenuXPinputRangeDelay`).addEventListener("input", (event) => { ActionXPRange(event); }); document.querySelector(`button#MrChatVisibilyE`).addEventListener("click", (event) => { ActionChatVisibility(event); }); document.querySelector(`button#MrChatVisibilyD`).addEventListener("click", (event) => { ActionChatVisibility(event); }); document.querySelector(`select#MrChatPositionH`).addEventListener("change", (event) => { ActionChatPosition(event); }); document.querySelector(`select#MrChatPositionV`).addEventListener("change", (event) => { ActionChatPosition(event); }); document.querySelector(`div#MrChatBgColorbg`).addEventListener("click", (event) => { ActionChatColor(event); }); document.querySelector(`div#MrChatBgColorFont`).addEventListener("click", (event) => { ActionChatColor(event); }); document.querySelector(`input#MrChatBgColorbgbase`).addEventListener("input", (event) => { document.getElementById('MrChatBgColorbg').style.backgroundColor = event.target.value; ActionChatColorFinal(event);}); document.querySelector(`input#MrChatBgColorFontbase`).addEventListener("input", (event) => { document.getElementById('MrChatBgColorFont').style.backgroundColor = event.target.value; ActionChatColorFinal(event);}); document.querySelector(`input#MrChattransparency`).addEventListener('input', (event) => { ActionChatransparency(event);}); document.querySelector(`button#MrChatLinkE`).addEventListener("click", (event) => { window.MrMenu.data.flags.linkmsg = true; }); document.querySelector(`button#MrChatLinkD`).addEventListener("click", (event) => { window.MrMenu.data.flags.linkmsg = false; }); document.querySelector(`button#MrChatEmojiE`).addEventListener("click", (event) => { ActionChataddEmoji(); }); document.querySelector(`button#MrChatEmojiD`).addEventListener("click", (event) => { ActionChatremoveEmoji(); }); document.querySelector(`button#MrHostSearchRoomE`).addEventListener("click", (event) => { SearchRoom(); }); document.querySelector(`button#MrHostSearchRoomD`).addEventListener("click", (event) => { SearchRoom(); }); document.querySelector(`#bonkiocontainer`).addEventListener("click", (event) => { if(event.target.id == `leaveconfirmwindow_okbutton`){ ActionResetData(event); } }); document.querySelector(`button#MrFullScreen`).addEventListener("click", (event) => { toggleFullscreen(); }); EventUItoggleMenu(); } ScriptInjector(Init);