// ==UserScript== // @name TETR.IO Emote Helper // @namespace https://tampermonkey.net/ // @version 1.0 // @description Allows you to press [TAB] to autocomplete emotes. // @author Jabster28 // @license MIT // @copyright 2020, Jabster28 (https://openuserjs.org/users/Jabster28) // @require https://gitcdn.xyz/cdn/nol13/fuzzball.js/21f0a68247185fafee0c9684ab0d6678c2049dd5/dist/fuzzball.umd.min.js // @match https://tetr.io // @grant none // @downloadURL none // ==/UserScript== var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; /* eslint-disable prefer-const */ var emotes = { base: { awesome: 'emotes/awesome.png', b1: 'emotes/b1.png', bigflush: 'emotes/bigflush.png', checked: 'emotes/checked.png', crossed: 'emotes/crossed.png', dogchoke: 'emotes/dogchoke.png', evil: 'emotes/evil.png', kagari: 'emotes/kagari.png', kagayes: 'emotes/kagayes.png', kagablush: 'emotes/kagablush.png', kagri: 'emotes/kagri.png', konata: 'emotes/konata.png', nicodab: 'emotes/nicodab.png', pog: 'emotes/pog.png', pausechamp: 'emotes/pausechamp.png', weirdchamp: 'emotes/weirdchamp.png', sadchamp: 'emotes/sadchamp.png', tetrio: 'emotes/tetrio.png', trelele: 'emotes/trelele.png', ultreme: 'emotes/ultreme.png', woomy: 'emotes/woomy.png', yui_eyes: 'emotes/yui_eyes.png', oyes: 'emotes/oyes.png', eee: 'emotes/eee.png', woke: 'emotes/woke.png', bin: 'emotes/bin.png', drboob: 'emotes/drboob.png', vno: 'emotes/vno.png', konacry: 'emotes/konacry.png', thonk: 'emotes/thonk.png', goodmorning: 'emotes/goodmorning.png', goodnight: 'emotes/goodnight.png', kagasing: 'emotes/kagasing.png', kagashock: 'emotes/kagashock.png', crying: 'emotes/crying.png', mikotommr: 'emotes/mikotommr.png', happy: 'emotes/happy.png', feisty: 'emotes/feisty.png', cacopog: 'emotes/cacopog.png', chaotic_cat: 'emotes/chaotic_cat.png', eyes: 'emotes/eyes.png', unranked: 'emotes/unranked.png', rankD: 'emotes/rankD.png', rankDplus: 'emotes/rankDplus.png', rankCminus: 'emotes/rankCminus.png', rankC: 'emotes/rankC.png', rankCplus: 'emotes/rankCplus.png', rankBminus: 'emotes/rankBminus.png', rankB: 'emotes/rankB.png', rankBplus: 'emotes/rankBplus.png', rankAminus: 'emotes/rankAminus.png', rankA: 'emotes/rankA.png', rankAplus: 'emotes/rankAplus.png', rankSminus: 'emotes/rankSminus.png', rankS: 'emotes/rankS.png', rankSplus: 'emotes/rankSplus.png', rankSS: 'emotes/rankSS.png', rankU: 'emotes/rankU.png', rankX: 'emotes/rankX.png', garpog: 'emotes/garpog.png', scott_pog: 'emotes/scott_pog.png', beastpog: 'emotes/beastpog.png', kagapog: 'emotes/kagapog.jpg', pogari: 'emotes/kagapog.jpg', kogori: 'emotes/kogori.png', goodkagari: 'emotes/goodkagari.png', kagablanket: 'emotes/goodkagari.png', ohyeah: 'emotes/ohyeah.png', alcapog: 'emotes/alcapog.png', link_pog: 'emotes/link_pog.png', cabpog: 'emotes/cabpog.png', caboozledpog: 'emotes/cabpog.png', caboozled_pog: 'emotes/cabpog.png', piece_z: 'emotes/piece_z.png', piece_l: 'emotes/piece_l.png', piece_o: 'emotes/piece_o.png', piece_s: 'emotes/piece_s.png', piece_i: 'emotes/piece_i.png', piece_j: 'emotes/piece_j.png', piece_t: 'emotes/piece_t.png', pasta: 'emotes/pasta.png', sad: 'emotes/sad.png', kagathink: 'emotes/kagathink.png', thinkagari: 'emotes/kagathink.png', notlikethis: 'emotes/notlikethis.png', random: 'emotes/random.png', starechamp: 'emotes/starechamp.png', bench: 'emotes/bench.png', lizzieboi: 'emotes/lizzieboi.gif' }, supporter: { supporter: 'emotes/supporter.png', drake: 'emotes/drake.gif', kagaristep: 'emotes/kagaristep.gif', nyndance: 'emotes/nyndance.gif', pogchomp: 'emotes/pogchomp.gif', worthit: 'emotes/worthit.gif', laundrycat: 'emotes/laundrycat.gif', catbedoingthelaundry: 'emotes/laundrycat.gif', h: 'emotes/h.gif', gg: 'emotes/gg.png', ggs: 'emotes/ggs.png', glhf: 'emotes/glhf.png' }, verified: { verified: 'emotes/verified.png' }, staff: { gotcha: 'emotes/gotcha.png', kagahorny: 'emotes/kagahorny.png', mikotohorny: 'emotes/mikotohorny.png' } }; var supporter = false; var cycle = ''; var cyclenum = 0; // @ts-ignore var emote = document === null || document === void 0 ? void 0 : document.querySelector('#chat_input'); var emoteChecker = function () { var _a; var text = (_a = emote === null || emote === void 0 ? void 0 : emote.value) === null || _a === void 0 ? void 0 : _a.split(' ').pop(); if (text && /^:\w*$/.exec(text)) return text; else return undefined; // try { // document // ?.querySelector('#emotepicker') // // @ts-ignore // ?.parentElement?.removeChild(document.querySelector('#emotepicker')); // } catch { // // // } // if (!text || text.split('').shift() != ':') return; // const picker = document.createElement('div'); // picker.setAttribute('id', 'emotepicker'); // document?.querySelector('#chat_input')?.parentElement?.appendChild(picker); }; emoteChecker(); window.addEventListener('keydown', function (e) { var _a; if (e.key == 'Tab') { if ((_a = document === null || document === void 0 ? void 0 : document.querySelector('#me_supporter')) === null || _a === void 0 ? void 0 : _a.offsetParent) supporter = true; if (!cycle) { var text = emoteChecker(); if (text) { var results = fuzzball.extract(text, __spreadArrays(Object.keys(emotes.base), (supporter ? Object.keys(emotes.supporter) : []))); if (results[0][1] < 50) return; var oldtext = emote.value.split(' '); oldtext.pop(); emote.value = __spreadArrays(oldtext, [':' + results[0][0] + ':']).join(' '); cycle = text; cyclenum = 1; } } else { var results = fuzzball.extract(cycle, __spreadArrays(Object.keys(emotes.base), (supporter ? Object.keys(emotes.supporter) : []))); if (results[cyclenum][1] < 50) { cyclenum = 0; var text = emoteChecker(); if (text) { var results_1 = fuzzball.extract(text, __spreadArrays(Object.keys(emotes.base), (supporter ? Object.keys(emotes.supporter) : []))); if (results_1[0][1] < 50) return; var oldtext_1 = emote.value.split(' '); oldtext_1.pop(); emote.value = __spreadArrays(oldtext_1, [':' + results_1[0][0] + ':']).join(' '); cycle = text; cyclenum = 1; } return; } if (cyclenum >= results.length || cyclenum >= 10) cyclenum = 0; var oldtext = emote.value.split(' '); oldtext.pop(); emote.value = __spreadArrays(oldtext, [':' + results[cyclenum][0] + ':']).join(' '); cyclenum++; } } else { cycle = ''; cyclenum = 0; } });