// ==UserScript==
// @name AWBW game chat
// @namespace http://tampermonkey.net/
// @version 0.0.0.0.0.0.5
// @description Show chat on game page
// @author new1234
// @match https://awbw.amarriner.com/game.php?games_id=*
// @icon https://awbw.amarriner.com/terrain/messages.gif
// @grant none
// @license MIT
// ==/UserScript==
(function () {
'use strict';
const userName = document.querySelector('h2.green-bold a').textContent.trim();
const chatUrl = window.location.href.replace('game.php', 'press.php');
let chatContainer, toggleButton, badge, sendMessageContainer;
let isChatHidden = false;
let unreadCount = 0;
let currentCount = 0;
let isYourChat = true;
const gifMap = {
":SaluteGirl_YC_Inf:": "https://cdn.discordapp.com/emojis/1100180778232578088.png?size=96",
":happy_sasha:": "https://cdn.discordapp.com/emojis/385660054595960833.png?size=96",
":Grimm_Sweats:": "https://cdn.discordapp.com/emojis/1059238674597957642.png?size=240",
":Pog:": "https://cdn.discordapp.com/emojis/949888810580312075.png?size=240",
":NellWarCrimes:": "https://cdn.discordapp.com/emojis/911692037160579164.png?size=96",
":DogKek:": "https://cdn.discordapp.com/emojis/1032019469733736538.png?size=100",
":GrinGrimm:": "https://cdn.discordapp.com/emojis/769071175585890304.png?size=100",
":Nooo_Whyyy:": "https://cdn.discordapp.com/emojis/1007135137391194223.png?size=100",
":GS_Inf:": "https://cdn.discordapp.com/emojis/1397768999705641001.png?size=100",
":MiniJugger:": "https://cdn.discordapp.com/emojis/1392115444873171037.png?size=100",
":MonkeMax:": "https://cdn.discordapp.com/emojis/953465265000165376.png?size=100",
":Jugger_HeadPat:": "https://cdn.discordapp.com/emojis/1189392736525242378.png?size=100",
":Floppus:": "https://cdn.discordapp.com/emojis/1297782242545893428.png?size=100",
":senile_vonbolt:": "https://cdn.discordapp.com/emojis/385661550159200267.png?size=100",
":AndyNod:": "https://cdn.discordapp.com/emojis/1297367887937540147.png?size=100",
":FlakGrin:": "https://cdn.discordapp.com/emojis/1022689428071796776.png?size=100",
":Kindle_WineAboutIt:": "https://cdn.discordapp.com/emojis/1184154519383330879.png?size=100",
":OozeCruise:": "https://cdn.discordapp.com/emojis/933381036740583434.png?size=100",
":ConfusedAndy:": "https://cdn.discordapp.com/emojis/930990061170855948.png?size=100",
":SadEagle:": "https://cdn.discordapp.com/emojis/981903868826890320.png?size=100",
":Sonja_Nooooo:": "https://cdn.discordapp.com/emojis/1175605077042536498.png?size=100",
":fog~1:": "https://cdn.discordapp.com/emojis/890402734459715644.png?size=100",
":Sonja_Calculated:": "https://cdn.discordapp.com/emojis/1268651886064435232.png?size=100",
":Ohohoho_Kindle:": "https://cdn.discordapp.com/emojis/1082517278161109042.png?size=100",
":OlafGrin:": "https://cdn.discordapp.com/emojis/934192279520956426.png?size=100",
":MD_Classy:": "https://cdn.discordapp.com/emojis/917134216611889153.png?size=100",
":Troll_Koal:": "https://cdn.discordapp.com/emojis/993268371657343057.png?size=100",
":StealthSan:": "https://cdn.discordapp.com/emojis/745713642938433626.png?size=100",
":WiseSensei:": "https://cdn.discordapp.com/emojis/943834512847175700.png?size=100",
":BattleShipping:": "https://cdn.discordapp.com/emojis/932509911366119434.png?size=100",
":MarketCrash_Sasha:": "https://cdn.discordapp.com/emojis/1281046429158080556.png?size=100",
":NoSurvivors_Rachel:": "https://cdn.discordapp.com/emojis/1030552250831097886.png?size=100",
":NervousColin:": "https://cdn.discordapp.com/emojis/1306819591418413066.png?size=100",
":AAirTrafficControl:": "https://cdn.discordapp.com/emojis/1315865700509941770.png?size=100",
":AndyAirport:": "https://cdn.discordapp.com/emojis/1169087384072224888.png?size=100",
":Sami_Whaet:": "https://cdn.discordapp.com/emojis/1227733541853462538.png?size=100",
":BombVoyage:": "https://cdn.discordapp.com/emojis/933457083548979290.png?size=100",
":MEGATANK:": "https://cdn.discordapp.com/emojis/869741733540413461.png?size=100",
":CopterSac:": "https://cdn.discordapp.com/emojis/1315869235989188701.png?size=100",
":CarryMe:": "https://cdn.discordapp.com/emojis/915590613284585524.png?size=100",
":Hawke_Yeah:": "https://cdn.discordapp.com/emojis/932503724348276846.png?size=100",
":Cool_Eagle:": "https://cdn.discordapp.com/emojis/1139598736448815256.png?size=100",
":SenPipe:": "https://cdn.discordapp.com/emojis/865314376700919808.png?size=100",
":APC_APerfectBait:": "https://cdn.discordapp.com/emojis/917131066874134538.png?size=100",
":Adderenaline:": "https://cdn.discordapp.com/emojis/1098364166009540699.png?size=100",
":AmberLander:": "https://cdn.discordapp.com/emojis/933194211812069436.png?size=100",
":AndyGrin:": "https://cdn.discordapp.com/emojis/953357652702933002.png?size=100",
":AngryKanbei:": "https://cdn.discordapp.com/emojis/1175995777496121384.png?size=100",
":AngryKitteh:": "https://cdn.discordapp.com/emojis/1008717391011774484.png?size=100",
":Angry_Flak:": "https://cdn.discordapp.com/emojis/325404480676036608.png?size=100",
":Angry_Sonja:": "https://cdn.discordapp.com/emojis/325608078877655040.png?size=100",
":Annoyed_Sasha:": "https://cdn.discordapp.com/emojis/1131367288180850749.png?size=100",
":ArtyParty:": "https://cdn.discordapp.com/emojis/908538470186758256.png?size=100",
":Aww_Lash:": "https://cdn.discordapp.com/emojis/1067659762709315674.png?size=100",
":BadLuck_Sonja:": "https://cdn.discordapp.com/emojis/1098361538764623902.png?size=100",
":BannedBomb:": "https://cdn.discordapp.com/emojis/1315863409333637183.png?size=100",
":BigBrain:": "https://cdn.discordapp.com/emojis/932227159391629312.png?size=100",
":BlackCatRachel:": "https://cdn.discordapp.com/emojis/1355005110224158950.png?size=100",
":BlankStareHawke:": "https://cdn.discordapp.com/emojis/1025812223815331901.png?size=100",
":Blep_Sami:": "https://cdn.discordapp.com/emojis/1098376825111064756.png?size=100",
":BoomBaboon:": "https://cdn.discordapp.com/emojis/1390390697646886993.png?size=100",
":BootyHunterDrake:": "https://cdn.discordapp.com/emojis/433573167697625091.png?size=100",
":BrainHurt_CloneAndy:": "https://cdn.discordapp.com/emojis/1099180968876707981.png?size=100",
":BullyMax:": "https://cdn.discordapp.com/emojis/1048472053168222248.png?size=100",
":COpower:": "https://cdn.discordapp.com/emojis/852953743343616060.png?size=100",
":CatinHat:": "https://cdn.discordapp.com/emojis/932472401768374363.png?size=100",
":Chad_Kanbei:": "https://cdn.discordapp.com/emojis/1384904027610939552.png?size=100",
":Cheers_Sasha:": "https://cdn.discordapp.com/emojis/1009887757553901578.png?size=100",
":Clever_Girl:": "https://cdn.discordapp.com/emojis/1299445598340251688.png?size=100",
":Cringe_Kanbei:": "https://cdn.discordapp.com/emojis/325574195943702528.png?size=100",
":Cruisin4ABruisin:": "https://cdn.discordapp.com/emojis/933192292578242570.png?size=100",
":Cry_OS_inf:": "https://cdn.discordapp.com/emojis/520585397638529044.png?size=100",
":D2D_DaytoDay:": "https://cdn.discordapp.com/emojis/1131387035479965817.png?size=100",
":Devious_Lash:": "https://cdn.discordapp.com/emojis/1098739264264609883.png?size=100",
":Disappointed_Kindle:": "https://cdn.discordapp.com/emojis/580551903943852032.png?size=100",
":Do_it_Adder:": "https://cdn.discordapp.com/emojis/1029390076381233182.png?size=100",
":DoginHat:": "https://cdn.discordapp.com/emojis/1008017533074427944.png?size=100",
":DrakeAbouttoBlow:": "https://cdn.discordapp.com/emojis/956475191742054410.png?size=100",
":Drake_Eeeh:": "https://cdn.discordapp.com/emojis/1131336797226541248.png?size=100",
":Drake_ShiverMeTimbers:": "https://cdn.discordapp.com/emojis/1273401571702739007.png?size=100",
":EagleAngry:": "https://cdn.discordapp.com/emojis/857802039312646155.png?size=100",
":EagleFlyHigh:": "https://cdn.discordapp.com/emojis/855167497791864852.png?size=100",
":ElJavier:": "https://cdn.discordapp.com/emojis/1022633536206950461.png?size=100",
":EvilCloneAndy:": "https://cdn.discordapp.com/emojis/1103134365552234546.png?size=100",
":Excited_Lash:": "https://cdn.discordapp.com/emojis/1098637016553492641.png?size=100",
":FacepalmSonja:": "https://cdn.discordapp.com/emojis/915041256810364958.png?size=100",
":Fail_Sturm:": "https://cdn.discordapp.com/emojis/1104587436488675388.png?size=100",
":Fascinating_Caulder:": "https://cdn.discordapp.com/emojis/460280745035038720.png?size=100",
":FightOrFlight:": "https://cdn.discordapp.com/emojis/1315866880694685747.png?size=100",
":FlakBonk:": "https://cdn.discordapp.com/emojis/1317222890071920740.png?size=100",
":FlakSmirk:": "https://cdn.discordapp.com/emojis/933944985450082304.png?size=100",
":FlexRunner:": "https://cdn.discordapp.com/emojis/1008379362611048478.png?size=100",
":FreeCity:": "https://cdn.discordapp.com/emojis/932352916856111255.png?size=100",
":FreeDude:": "https://cdn.discordapp.com/emojis/1009273947524710480.png?size=100",
":Gasp:": "https://cdn.discordapp.com/emojis/1009214358200516618.png?size=100",
":Gladder:": "https://cdn.discordapp.com/emojis/597561297479139338.png?size=100",
":GodMode_Grimm:": "https://cdn.discordapp.com/emojis/1189752762288853093.png?size=100",
":GreedyLash:": "https://cdn.discordapp.com/emojis/983457607597559908.png?size=100",
":GrimmReaper:": "https://cdn.discordapp.com/emojis/1291349320037044306.png?size=100",
":Grimmstinct:": "https://cdn.discordapp.com/emojis/808221982537678849.png?size=100",
":GrinKanbei:": "https://cdn.discordapp.com/emojis/1029249533470842900.png?size=100",
":Grit_Gun:": "https://cdn.discordapp.com/emojis/1037166830772555806.png?size=100",
":Grit_Hehehe:": "https://cdn.discordapp.com/emojis/1097338578960388136.png?size=100",
":Gun_Lin:": "https://cdn.discordapp.com/emojis/1016171259836502117.png?size=100",
":Gwarharhar_Beast:": "https://cdn.discordapp.com/emojis/642509360148250663.png?size=100",
":HangThem_Greyfield:": "https://cdn.discordapp.com/emojis/795729757803118622.png?size=100",
":HappyEagle:": "https://cdn.discordapp.com/emojis/1168759142081630310.png?size=100",
":HappyGirl_OS_Inf:": "https://cdn.discordapp.com/emojis/1100193863299244142.png?size=100",
":HappyKoal:": "https://cdn.discordapp.com/emojis/937232507915604029.png?size=100",
":Happy_Jess:": "https://cdn.discordapp.com/emojis/950189055788859442.png?size=100",
":Happy_Lash:": "https://cdn.discordapp.com/emojis/325608122238500865.png?size=100",
":Happy_Olaf:": "https://cdn.discordapp.com/emojis/1095064011512487967.png?size=100",
":Happy_Sami:": "https://cdn.discordapp.com/emojis/325404805440995350.png?size=100",
":Happy_Sonja:": "https://cdn.discordapp.com/emojis/1103121003648929862.png?size=100",
":Happy_Sturm:": "https://cdn.discordapp.com/emojis/1374575761264083085.png?size=100",
":Hawke_Approves:": "https://cdn.discordapp.com/emojis/1100525155052179528.png?size=100",
":Hawke_DeepBreath:": "https://cdn.discordapp.com/emojis/1102757683595071509.png?size=100",
":Hawke_Disapproves:": "https://cdn.discordapp.com/emojis/1101011360340529222.png?size=100",
":Hawkeward:": "https://cdn.discordapp.com/emojis/938105930334220289.png?size=100",
":High_Society_Kindle:": "https://cdn.discordapp.com/emojis/1269832087423160405.png?size=100",
":Hopium_VonBolt:": "https://cdn.discordapp.com/emojis/1042655906070003722.png?size=100",
":ImWatchingYou:": "https://cdn.discordapp.com/emojis/1278769529354190869.png?size=100",
":Interested_Jess:": "https://cdn.discordapp.com/emojis/1100099182389362739.png?size=100",
":JakeTheMan:": "https://cdn.discordapp.com/emojis/1076907050564591726.png?size=100",
":Javier0Towers:": "https://cdn.discordapp.com/emojis/869374111468617788.png?size=100",
":Javier1Tower:": "https://cdn.discordapp.com/emojis/1374148379680182394.png?size=100",
":Javier2Towers:": "https://cdn.discordapp.com/emojis/674075939784622080.png?size=100",
":Javier3Towers:": "https://cdn.discordapp.com/emojis/1268363337612394567.png?size=100",
":Jesster:": "https://cdn.discordapp.com/emojis/1056281730547449908.png?size=100",
":JuggerUhoh:": "https://cdn.discordapp.com/emojis/936662947663605861.png?size=100",
":Juggerright:": "https://cdn.discordapp.com/emojis/899527673141927986.png?size=100",
":KindleBlush:": "https://cdn.discordapp.com/emojis/960147961847898142.png?size=100",
":Kindle_Hair:": "https://cdn.discordapp.com/emojis/1131331922736455842.png?size=100",
":KoalMiner:": "https://cdn.discordapp.com/emojis/938641561409970186.png?size=100",
":LFG_LetsFlakingGo:": "https://cdn.discordapp.com/emojis/941142242360451164.png?size=100",
":LOL_Drake:": "https://cdn.discordapp.com/emojis/1103125007024013352.png?size=100",
":Lash_Out:": "https://cdn.discordapp.com/emojis/1098634081161449664.png?size=100",
":Laugh_Sensei:": "https://cdn.discordapp.com/emojis/1098373273869361233.png?size=100",
":LeChadder:": "https://cdn.discordapp.com/emojis/945043389710221342.png?size=100",
":LowRoll_Flak:": "https://cdn.discordapp.com/emojis/1098352957847765103.png?size=100",
":LumpOfKoal:": "https://cdn.discordapp.com/emojis/1314973531544748072.png?size=100",
":MadBeatsJake:": "https://cdn.discordapp.com/emojis/936685325386924062.png?size=100",
":Madder:": "https://cdn.discordapp.com/emojis/1099539231493337118.png?size=100",
":MaxPain:": "https://cdn.discordapp.com/emojis/941216734235467797.png?size=100",
":MaxStronk:": "https://cdn.discordapp.com/emojis/855159792536256569.png?size=100",
":MissileChan:": "https://cdn.discordapp.com/emojis/760196804540498011.png?size=100",
":Monke:": "https://cdn.discordapp.com/emojis/1390390281999880333.png?size=100",
":Mwahaha_Sturm:": "https://cdn.discordapp.com/emojis/1328806036999507978.png?size=100",
":NellLuckyStar:": "https://cdn.discordapp.com/emojis/1040313833757093990.png?size=100",
":Nell_glhf:": "https://cdn.discordapp.com/emojis/643778713636438027.png?size=100",
":NellDoro_SlotMachine:": "https://cdn.discordapp.com/emojis/1399059185718526012.gif?size=100",
":NellDoro:": "https://cdn.discordapp.com/emojis/1375223936261951599.png?size=240",
":NellInfinite:": "https://media1.tenor.com/m/MFu7yHgp4k8AAAAd/awbw-nelldoro.gif",
":NellDoro_Headpat:": "https://media.discordapp.net/stickers/1389956651255205930.webp?size=320&quality=lossless",
":NellDoro_Gray:": "https://cdn.discordapp.com/emojis/1384648714773205124.webp?size=240",
":NoMoney_Colin:": "https://cdn.discordapp.com/emojis/1102759826720817172.png?size=100",
":OOF:": "https://cdn.discordapp.com/emojis/705067072534872115.png?size=100",
":OlafConfused:": "https://cdn.discordapp.com/emojis/857799789445906453.png?size=100",
":Olaf_Tears:": "https://cdn.discordapp.com/emojis/1277770151894454316.png?size=100",
":Oof_Hachi:": "https://cdn.discordapp.com/emojis/1102761279510290492.png?size=100",
":Pain_Kanbei:": "https://cdn.discordapp.com/emojis/1093348753630576640.png?size=100",
":PossumSpitGrit:": "https://cdn.discordapp.com/emojis/1028180500973629460.png?size=100",
":Pouty_Lash:": "https://cdn.discordapp.com/emojis/1094116252118679592.png?size=100",
":PowerofMoney:": "https://cdn.discordapp.com/emojis/937565112015921272.png?size=100",
":Press_MaX_to_Doubt:": "https://cdn.discordapp.com/emojis/1098391064018161694.png?size=100",
":Proud_Colin:": "https://cdn.discordapp.com/emojis/1100493494411341917.png?size=100",
":RachelWink:": "https://cdn.discordapp.com/emojis/934127886674325564.png?size=100",
":Rachel_Thonk:": "https://cdn.discordapp.com/emojis/1186522275047022592.png?size=100",
":Rage_Sami:": "https://cdn.discordapp.com/emojis/1094767475373125662.png?size=100",
":RaisedEyebrow_Kanbei:": "https://cdn.discordapp.com/emojis/1034151124128768150.png?size=100",
":Really_BM:": "https://cdn.discordapp.com/emojis/933941281950949396.png?size=100",
":RichHachi:": "https://cdn.discordapp.com/emojis/937565012933890108.png?size=100",
":RocketNLoad:": "https://cdn.discordapp.com/emojis/917134818154803231.png?size=100",
":Roger_Colin:": "https://cdn.discordapp.com/emojis/325573948378972160.png?size=100",
":SCOpower:": "https://cdn.discordapp.com/emojis/852953758857953342.png?size=100",
":SadGE_inf:": "https://cdn.discordapp.com/emojis/520585397764620308.png?size=100",
":Sad_Grit:": "https://cdn.discordapp.com/emojis/325419692472926208.png?size=100",
":Sadder:": "https://cdn.discordapp.com/emojis/325607727881519106.png?size=100",
":SaluteGirl_YC_Inf:": "https://cdn.discordapp.com/emojis/1100180778232578088.png?size=100",
":SamiSwitch:": "https://cdn.discordapp.com/emojis/854874491393802241.png?size=100",
":Sami_Smile:": "https://cdn.discordapp.com/emojis/1056341596297244722.png?size=100",
":SantaOlaf:": "https://cdn.discordapp.com/emojis/1314973110281175101.png?size=100",
":SashaOMG:": "https://cdn.discordapp.com/emojis/1296982034505400380.png?size=100",
":SashaSmile:": "https://cdn.discordapp.com/emojis/950706588199559168.png?size=100",
":ScaredColin:": "https://cdn.discordapp.com/emojis/1282517125663162400.png?size=100",
":Scared_BH:": "https://cdn.discordapp.com/emojis/933202199536869486.png?size=100",
":SeriousColin:": "https://cdn.discordapp.com/emojis/942781164580655184.png?size=100",
":Shakefist_Andy:": "https://cdn.discordapp.com/emojis/1019082158771535932.png?size=100",
":ShoalPool:": "https://cdn.discordapp.com/emojis/911390709351858237.png?size=100",
":ShockedGrimm:": "https://cdn.discordapp.com/emojis/943705832766468208.png?size=100",
":Shrug_Hachi:": "https://cdn.discordapp.com/emojis/1045733595542724648.png?size=100",
":Smirk_Sensei:": "https://cdn.discordapp.com/emojis/325419741927964672.png?size=100",
":SmugColin:": "https://cdn.discordapp.com/emojis/940229355454476299.png?size=100",
":SmugEagle:": "https://cdn.discordapp.com/emojis/325608337305632768.png?size=100",
":SomberSalute_Sami:": "https://cdn.discordapp.com/emojis/580552533903409161.png?size=100",
":SonjaShades:": "https://cdn.discordapp.com/emojis/911393322919153734.png?size=100",
":Sonja_Shocked:": "https://cdn.discordapp.com/emojis/1371636998548226199.png?size=100",
":SpannIsland:": "https://cdn.discordapp.com/emojis/999072845940392058.png?size=100",
":Squak_CI_inf:": "https://cdn.discordapp.com/emojis/745706900015939594.png?size=100",
":StoicJess:": "https://cdn.discordapp.com/emojis/942096546919497778.png?size=100",
":SturmFist:": "https://cdn.discordapp.com/emojis/953823553424326706.png?size=100",
":SturmOut:": "https://cdn.discordapp.com/emojis/1305698974077816872.png?size=100",
":SubOptimal:": "https://cdn.discordapp.com/emojis/1315874019701952553.png?size=100",
":SurfinDrake:": "https://cdn.discordapp.com/emojis/1220523488889143336.png?size=100",
":Surprised_Jess:": "https://cdn.discordapp.com/emojis/1100597961160925254.png?size=100",
":Surprised_Lash:": "https://cdn.discordapp.com/emojis/966625937229758514.png?size=100",
":Sus_Impostor:": "https://cdn.discordapp.com/emojis/1001118787841572914.png?size=100",
":TCopRide:": "https://cdn.discordapp.com/emojis/915452885398085693.png?size=100",
":ThankTank:": "https://cdn.discordapp.com/emojis/760196782940225577.png?size=100",
":This_Andy:": "https://cdn.discordapp.com/emojis/1025367337962065971.png?size=100",
":TriggeredEagle:": "https://cdn.discordapp.com/emojis/1021264019962732626.png?size=100",
":True_Hawke:": "https://cdn.discordapp.com/emojis/1273399235139862591.png?size=100",
":TurboCharged_Jess:": "https://cdn.discordapp.com/emojis/1099184260780404849.png?size=100",
":UnitCap_Sensei:": "https://cdn.discordapp.com/emojis/1042575856880590978.png?size=100",
":Vibing_GS:": "https://cdn.discordapp.com/emojis/933940003984277554.png?size=100",
":VictoryMarch:": "https://cdn.discordapp.com/emojis/1024433528236146810.png?size=100",
":VonBowl:": "https://cdn.discordapp.com/emojis/940690530449383454.png?size=100",
":VonBulb:": "https://cdn.discordapp.com/emojis/1066546447237001306.png?size=100",
":WN_MechSpam:": "https://cdn.discordapp.com/emojis/1315872277056716860.png?size=100",
":What_YC:": "https://cdn.discordapp.com/emojis/933422136872304760.png?size=100",
":Wingman_Waylon:": "https://cdn.discordapp.com/emojis/888142369172627517.png?size=100",
":Wink_Kindle:": "https://cdn.discordapp.com/emojis/385654699279253505.png?size=100",
":Wisecrack_Grit:": "https://cdn.discordapp.com/emojis/1098381464577515653.png?size=100",
":WorriedHachi:": "https://cdn.discordapp.com/emojis/937235358704365608.png?size=100",
":Worried_Drake:": "https://cdn.discordapp.com/emojis/325574058953670658.png?size=100",
":YeahSure_Jake:": "https://cdn.discordapp.com/emojis/1126968024453361725.png?size=100",
":YouWot_Grit:": "https://cdn.discordapp.com/emojis/933405408205361222.png?size=100",
":Zombie_Sensei:": "https://cdn.discordapp.com/emojis/1223127068175372328.png?size=100",
":angry_koal:": "https://cdn.discordapp.com/emojis/385649720485478410.png?size=100",
":annoyed_rachel:": "https://cdn.discordapp.com/emojis/385660982044786688.png?size=100",
":any:": "https://cdn.discordapp.com/emojis/890403723342405652.png?size=100",
":bitter_nell:": "https://cdn.discordapp.com/emojis/585983754724573205.png?size=100",
":bmbboat:": "https://cdn.discordapp.com/emojis/870920521544519720.png?size=100",
":drakenshake:": "https://cdn.discordapp.com/emojis/854459929946226738.png?size=100",
":embarrassed_jess:": "https://cdn.discordapp.com/emojis/325608309887598592.png?size=100",
":gasp_nell:": "https://cdn.discordapp.com/emojis/585986549917941770.png?size=100",
":happy_hachi:": "https://cdn.discordapp.com/emojis/325608462908129280.png?size=100",
":happy_max:": "https://cdn.discordapp.com/emojis/385656510698618890.png?size=100",
":happy_nell:": "https://cdn.discordapp.com/emojis/934815103730192444.png?size=100",
":hasnofeelings_sturm:": "https://cdn.discordapp.com/emojis/325947988188987392.png?size=100",
":hf:": "https://cdn.discordapp.com/emojis/890404234112159764.png?size=100",
":hmm_olaf:": "https://cdn.discordapp.com/emojis/325607810476015616.png?size=100",
":osbboat:": "https://cdn.discordapp.com/emojis/870805502802669588.png?size=100",
":shocked_sami:": "https://cdn.discordapp.com/emojis/325608265448816643.png?size=100",
":shook_kanbei:": "https://cdn.discordapp.com/emojis/557425447651246081.png?size=100",
":std:": "https://cdn.discordapp.com/emojis/890403004614860830.png?size=100",
":stern_hawke:": "https://cdn.discordapp.com/emojis/580551903809634325.png?size=100",
":stoic_javier:": "https://cdn.discordapp.com/emojis/385659523181969409.png?size=100",
":sturmkart:": "https://cdn.discordapp.com/emojis/859258795968299079.png?size=100",
":surprisekiss_sturm:": "https://cdn.discordapp.com/emojis/326351964336291841.png?size=100",
":thinking_lin:": "https://cdn.discordapp.com/emojis/877392297170440275.png?size=100",
":thistbh:": "https://cdn.discordapp.com/emojis/1044824685663244318.png?size=100",
":unimpressed_jake:": "https://cdn.discordapp.com/emojis/385658779464892418.png?size=100",
":working_bot:": "https://cdn.discordapp.com/emojis/580551904183189514.png?size=100",
":BigMonke:": "https://cdn.discordapp.com/emojis/1382114663961071656.webp?size=60&animated=true",
":BooHoo_Sturm:": "https://cdn.discordapp.com/emojis/1382114851425357894.gif?size=100",
":Boom_Explosion:": "https://cdn.discordapp.com/emojis/1382114518058143875.webp?size=60&animated=true",
":Caesar_Happy:": "https://cdn.discordapp.com/emojis/579454151696842752.gif?size=100",
":DoomPengus:": "https://cdn.discordapp.com/emojis/865011667002589224.gif?size=100",
":Flag10_JS:": "https://cdn.discordapp.com/emojis/1223129529011277885.gif?size=100",
":Flag11_CI:": "https://cdn.discordapp.com/emojis/1223129545893351476.gif?size=100",
":Flag12_PC:": "https://cdn.discordapp.com/emojis/1223129555418480650.gif?size=100",
":Flag13_TG:": "https://cdn.discordapp.com/emojis/1223130004247019520.gif?size=100",
":Flag14_PL:": "https://cdn.discordapp.com/emojis/1223130023305805856.gif?size=100",
":Flag15_AR:": "https://cdn.discordapp.com/emojis/1223130036954075136.gif?size=100",
":Flag16_WN:": "https://cdn.discordapp.com/emojis/1223130050006876191.gif?size=100",
":Flag17_AA:": "https://cdn.discordapp.com/emojis/1234057073151442954.gif?size=100",
":Flag18_NE:": "https://cdn.discordapp.com/emojis/1304083510247690293.gif?size=100",
":Flag19_SC:": "https://cdn.discordapp.com/emojis/1304083538555043861.gif?size=100",
":Flag1_OS:": "https://cdn.discordapp.com/emojis/1223128030004772954.gif?size=100",
":Flag20_UW:": "https://cdn.discordapp.com/emojis/1382114010635309056.gif?size=100",
":Flag2_BM:": "https://cdn.discordapp.com/emojis/1223128274243420180.gif?size=100",
":Flag3_GE:": "https://cdn.discordapp.com/emojis/1223128607535267892.gif?size=100",
":Flag4_YC:": "https://cdn.discordapp.com/emojis/1223128618536927242.gif?size=100",
":Flag5_BH:": "https://cdn.discordapp.com/emojis/1223128631056928959.gif?size=100",
":Flag6_RF:": "https://cdn.discordapp.com/emojis/1223129097321054229.gif?size=100",
":Flag7_GS:": "https://cdn.discordapp.com/emojis/1223129109258043423.gif?size=100",
":Flag8_BD:": "https://cdn.discordapp.com/emojis/1223129124013473833.gif?size=100",
":Flag9_AB:": "https://cdn.discordapp.com/emojis/1223129159153225729.gif?size=100",
":G_Signal:": "https://cdn.discordapp.com/emojis/1382114292136017950.gif?size=100",
":GooMechGo:": "https://cdn.discordapp.com/emojis/1382114224658186290.gif?size=100",
":GrimmIntensifies:": "https://cdn.discordapp.com/emojis/674075940019634195.gif?size=100",
":Grimmier:": "https://cdn.discordapp.com/emojis/869723639539466261.gif?size=100",
":Grin_Eagle:": "https://cdn.discordapp.com/emojis/1100945089154527304.gif?size=100",
":ILaughAtYouNow_Sturm:": "https://cdn.discordapp.com/emojis/1382114793581969580.gif?size=100",
":Kanbei_happy:": "https://cdn.discordapp.com/emojis/579458525307338755.gif?size=100",
":MechaDino:": "https://cdn.discordapp.com/emojis/1382114329020858582.gif?size=100",
":Nooo:": "https://cdn.discordapp.com/emojis/1382114267989545043.gif?size=100",
":Sandy:": "https://cdn.discordapp.com/emojis/579458525437231104.gif?size=100",
":Sneaky:": "https://cdn.discordapp.com/emojis/864966048193052713.gif?size=100",
":SturmKartSelect:": "https://cdn.discordapp.com/emojis/1382114196187254945.gif?size=100",
":WGSami:": "https://cdn.discordapp.com/emojis/632433510539329537.gif?size=100",
":drake_booty:": "https://cdn.discordapp.com/emojis/579458525101686806.gif?size=100",
":good_rng:": "https://cdn.discordapp.com/emojis/579458525600677906.gif?size=100",
":grit_smug:": "https://cdn.discordapp.com/emojis/579458525596483588.gif?size=100",
":max_blast:": "https://cdn.discordapp.com/emojis/579458525441294347.gif?size=100",
":olaf_smirk:": "https://cdn.discordapp.com/emojis/579458525135110175.gif?size=100",
":sad_olaf:": "https://cdn.discordapp.com/emojis/579458526842454026.gif?size=100",
":sami_victory:": "https://cdn.discordapp.com/emojis/579458525151887371.gif?size=100",
":santa_sad:": "https://cdn.discordapp.com/emojis/579458525474848768.gif?size=100",
":smoke_sturm:": "https://cdn.discordapp.com/emojis/536186609217961984.gif?size=100",
":soaring_eagle:": "https://cdn.discordapp.com/emojis/579458525214932994.gif?size=100",
":sonja_smile:": "https://cdn.discordapp.com/emojis/579458525617455104.gif?size=100",
":sticker_Sticker,_⭐_Olaf's_Fury,_:": "https://media.discordapp.net/stickers/1402255046422433824.png?size=240",
":sticker_Sticker,_Hmm,_Nice_HQ!,_Be_a_shame_if_something_happened_to_it!:": "https://media.discordapp.net/stickers/1072737826283716669.png?size=240",
":sticker_Sticker,_Oh_No!,_Oh_no,_my_tank!:": "https://media.discordapp.net/stickers/915041125251821619.png?size=240",
":sticker_Sticker,_Kindle_Super,_High_Societyyyy!_:": "https://media.discordapp.net/stickers/911392402772733983.png?size=240",
":sticker_Sticker,_Olaf_Send_Link,_:": "https://media.discordapp.net/stickers/1268545405214265445.gif?size=320",
":sticker_Sticker,_⭐_Jugger_Prime_,_:": "https://media.discordapp.net/stickers/1401285808891105362.gif?size=320",
":sticker_Sticker,_Missile-Chan_Dance,_Permission_received_from_artist:_https://twitter.com/NCHproductions:": "https://media.discordapp.net/stickers/1157254342269743114.png?size=320",
":sticker_Sticker,_Chadder,_:": "https://media.discordapp.net/stickers/899862255200526346.png?size=240",
":sticker_Sticker,_Strut_Kanbei,_They_see_me_walking,_they_hatin!:": "https://media.discordapp.net/stickers/1021960280810467438.png?size=240",
":sticker_Sticker,_Power_of_Tower,_:": "https://media.discordapp.net/stickers/930990803596226611.png?size=240",
":sticker_Sticker,_The_\"Hawke\"_Johnson,_:": "https://media.discordapp.net/stickers/1189331240759869582.png?size=240",
":sticker_Sticker,_Sitting_on_Cities_,_Young_whippersnappers_:": "https://media.discordapp.net/stickers/933040279118827562.png?size=240",
":sticker_Sticker,_Hachi_Stronks_Up,_Market_Crash:": "https://media.discordapp.net/stickers/1024730056414724207.png?size=320",
":sticker_Sticker,_Sturm_Warning,_Scattered_showers_and_a_chance_of_DEATH!!!:": "https://media.discordapp.net/stickers/1024514184744013884.png?size=320",
":sticker_Sticker,_Eagle_Grin,_Eagle_Grin:": "https://media.discordapp.net/stickers/865316024214749236.png?size=320",
":sticker_Sticker,_Yeah_Boi_Jake,_:": "https://media.discordapp.net/stickers/932680719547916288.png?size=240",
":sticker_Sticker,_Broken_Max,_Oh_no,_Max_looks_sad:": "https://media.discordapp.net/stickers/982009265965371394.png?size=240",
":sticker_Sticker,_MaP_dEpEnDEnT,_It's_MaP_DepEnDEnT:": "https://media.discordapp.net/stickers/884998800450674698.png?size=320",
":sticker_Sticker,_JESS_She_Can!,_But_can_she_though?!_:": "https://media.discordapp.net/stickers/1052067797699670106.png?size=240",
":sticker_Sticker,_Sonja_Headpats,_:": "https://media.discordapp.net/stickers/1191498781879971970.png?size=240",
":sticker_Sticker,_Eagle_Pog,_Eagle_Pog:": "https://media.discordapp.net/stickers/865007175373684736.png?size=240",
":sticker_Sticker,_Nell_Smiles,_Nell_Smiles:": "https://media.discordapp.net/stickers/865313046750167050.png?size=320",
":sticker_Sticker,_Winter_Is_Coming,_Winter_is_Coming:": "https://media.discordapp.net/stickers/870091457241972756.png?size=240",
":sticker_Sticker,_Jugger_Spin,_:": "https://media.discordapp.net/stickers/899528896364576828.png?size=240",
":sticker_Sticker,_Drake_Peter,_Hey_Lois!_I'm_a_CO_now!_I_could_even_build_a_boat.:": "https://media.discordapp.net/stickers/911393972331626506.png?size=240",
":sticker_Sticker,_Sacks,_Sacks_sticker,_oh_no_:": "https://media.discordapp.net/stickers/911397326373941298.png?size=240",
":sticker_Sticker,_Andy'll_fix_it,_He_might_not_know_what_an_airport_is,_but_he_can_still_fix_airplanes_:": "https://media.discordapp.net/stickers/911411093551841321.png?size=240",
":sticker_Sticker,_Eat_Free_Dudes,_Eat_Free_Dudes,_Woah_Whoa_:": "https://media.discordapp.net/stickers/915041510758707220.png?size=240",
":sticker_Sticker,_Grimm's_Cracker_Tank,_Grimm_has_no_brakes_and_all_gas:": "https://media.discordapp.net/stickers/915042999011016704.png?size=320",
":sticker_Sticker,_Popcorn_Pengu,_Mmmmm,_Popcorn:": "https://media.discordapp.net/stickers/916765803074973727.png?size=320",
":sticker_Sticker,_Sen-Tzu,_:": "https://media.discordapp.net/stickers/919524365798875156.png?size=240",
":sticker_Sticker,_Kindle_Tee_Hee_Hee,_Tee_Hee_Hee:": "https://media.discordapp.net/stickers/921988482409308190.png?size=320",
":sticker_Sticker,_Arty_SPAM,_:": "https://media.discordapp.net/stickers/931809205629894707.png?size=240",
":sticker_Sticker,_Rocket_Girl_Rachel,_Yeeeee-Haaaaaw!!!:": "https://media.discordapp.net/stickers/933750973074145340.png?size=240",
":sticker_Sticker,_They're_Grrrit!,_:": "https://media.discordapp.net/stickers/934591343290896466.png?size=240",
":sticker_Sticker,_Salt_Bei,_:": "https://media.discordapp.net/stickers/937089142439956502.png?size=240",
":sticker_Sticker,_Sturm_YES!,_:": "https://media.discordapp.net/stickers/941727905787052043.png?size=320",
":sticker_Sticker,_Let's_Go_Flak,_Let's_Go_Beeches!!!:": "https://media.discordapp.net/stickers/942093278969487410.png?size=320",
":sticker_Sticker,_That_Face_When...,_Oh_Noes!_You_broke_through_my_wall!:": "https://media.discordapp.net/stickers/956714739487113286.png?size=320",
":sticker_Sticker,_Worth_it_Flak,_Flak_Approved:": "https://media.discordapp.net/stickers/992543540800397403.png?size=240",
":sticker_Sticker,_Clone_Andy,_Knows_what_an_airport_is:": "https://media.discordapp.net/stickers/1021971606702141630.png?size=240",
":sticker_Sticker,_Adder_Comin_Atcha!!!,_SIDESLIIIIIP!!!:": "https://media.discordapp.net/stickers/1062818946065104936.png?size=320",
":sticker_Sticker,_Koal,_Road_Warrior,_Hail_to_the_King_Baby!_:": "https://media.discordapp.net/stickers/1066063830368665630.png?size=240",
":sticker_Sticker,_Excited_Lash,_Lash_is_excited!_Are_YOU?!:": "https://media.discordapp.net/stickers/1094033384482811924.png?size=320",
":sticker_Sticker,_NO_U!,_:": "https://media.discordapp.net/stickers/1099338797608616057.png?size=320",
":sticker_Sticker,_Yeet_your_troops_NOW!,_:": "https://media.discordapp.net/stickers/1103896411612921926.png?size=320",
":sticker_Sticker,_STOP_IT!!!,_Permission_received_from_artist:_https://twitter.com/nekoznekoVEVO:": "https://media.discordapp.net/stickers/1152033392020439050.png?size=240",
":sticker_Sticker,_Rachel_was_Sturm!!!,_:": "https://media.discordapp.net/stickers/1183999834441666570.png?size=240",
":sticker_Sticker,_Jess_Headcannon_⭐,_:": "https://media.discordapp.net/stickers/1184154162213158935.png?size=240",
":sticker_Sticker,_Kindle_again⭐,_People_just_talk_about_Kindle_so_much._:": "https://media.discordapp.net/stickers/1240134069740638229.png?size=240",
":sticker_Sticker,_Oh_You!_(Hawke_&_Lash)_⭐,_:": "https://media.discordapp.net/stickers/1283498204561936477.png?size=240",
":sticker_Sticker,_Rock_the_Block_Jake_⭐,_:": "https://media.discordapp.net/stickers/1306822791982616639.png?size=240",
":sticker_Sticker,_Trust_Grimm,_:": "https://media.discordapp.net/stickers/1343586354130456587.png?size=240",
":sticker_Sticker,_Cash_Money_Colin!,_:": "https://media.discordapp.net/stickers/1364055591877873717.gif?size=320",
":sticker_Sticker,_Speedrunner_Grimm,_:": "https://media.discordapp.net/stickers/1374185750332964884.png?size=240",
":sticker_Sticker,_Sami_No_Victory_March_⭐,_:": "https://media.discordapp.net/stickers/1401285443953229844.png?size=320",
":sticker_Sticker,_⭐_GS_Finger_Guns_,_:": "https://media.discordapp.net/stickers/1401285649876652033.png?size=240",
":sticker_Sticker,_⭐_Sasha_War_Funds_,_:": "https://media.discordapp.net/stickers/1401286479665299527.png?size=240",
":sticker_Sticker,_⭐_Ghost_Koal_,_:": "https://media.discordapp.net/stickers/1401286890652700712.png?size=240",
":sticker_Sticker,_Sasha_Hug,_Woah,_Big_Sister_Sasha!:": "https://media.discordapp.net/stickers/873365332318879776.png?size=320",
};
function renderChatMessage(text) {
// Convert non-breaking spaces back to normal spaces
text = text.replace(/\u00A0/g, ' ');
// Replace all codes with <img> tags
Object.keys(gifMap).forEach(code => {
const imgTag = `<img src="${gifMap[code]}"
alt="${code}"
style="width: 60px; height: auto; vertical-align: middle;">`;
text = text.replaceAll(code, imgTag);
});
return text;
}
function makeDraggable(element) {
let isDragging = false;
let offsetX = 0, offsetY = 0;
const resizeMargin = 10; // px from edges to reserve for resizing
element.addEventListener('mousedown', function(e) {
// Only left-click drag
if (e.button !== 0) return;
if (e.target.closest('textarea, input, select, label')) return;
const rect = element.getBoundingClientRect();
const onRightEdge = e.clientX > rect.right - resizeMargin;
const onBottomEdge = e.clientY > rect.bottom - resizeMargin;
// If clicking near the right/bottom edge, let resize happen
if (onRightEdge || onBottomEdge) return;
isDragging = true;
offsetX = e.clientX - rect.left;
offsetY = e.clientY - rect.top;
element.style.cursor = 'grabbing';
e.preventDefault();
});
document.addEventListener('mousemove', function(e) {
if (!isDragging) return;
element.style.left = `${e.clientX - offsetX}px`;
element.style.top = `${e.clientY - offsetY}px`;
element.style.right = '';
element.style.bottom = '';
});
document.addEventListener('mouseup', function() {
if (isDragging) {
isDragging = false;
element.style.cursor = 'grab';
}
});
element.style.cursor = 'grab';
element.style.position = 'fixed';
}
function injectChatBox() {
chatContainer = document.createElement('div');
chatContainer.id = 'awbw-chat-container';
chatContainer.style.cssText = `
position: fixed;
top: 60px;
right: 20px;
width: 350px;
height: 300px;
background: #f9f9f9;
border: 2px solid #aaa;
border-radius: 10px;
padding: 10px;
z-index: 1000;
box-shadow: 0 2px 10px rgba(0,0,0,0.3);
resize: both;
overflow: auto;
min-width: 200px;
min-height: 150px;
`;
chatContainer.style.resize = 'both';
chatContainer.style.overflow = 'auto';
document.body.appendChild(chatContainer);
sendMessageContainer = document.createElement('div');
sendMessageContainer.id = 'awbw-send-message-container';
sendMessageContainer.style.cssText = `
position: fixed;
top: 400px;
right: 20px;
width: 500px;
max-height: 270px;
overflow-y: auto;
background: #f9f9f9;
border: 1px solid #aaa;
border-radius: 10px;
padding: 10px;
z-index: 1000;
box-shadow: 0 2px 10px rgba(0,0,0,0.3);
`;
sendMessageContainer.style.resize = 'both';
sendMessageContainer.style.overflow = 'auto';
document.body.appendChild(sendMessageContainer);
toggleButton = document.createElement('button');
toggleButton.innerHTML = 'Game Chat💬 <span id="awbw-unread-badge"></span>';
toggleButton.style.cssText = `
position: fixed;
top: 30px;
right: 30px;
z-index: 1001;
background: #0066cc;
color: white;
padding: 5px 10px;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
`;
toggleButton.onclick = toggleChatVisibility;
document.body.appendChild(toggleButton);
badge = toggleButton.querySelector('#awbw-unread-badge');
badge.style.marginLeft = '5px';
// Make draggable
makeDraggable(chatContainer);
makeDraggable(sendMessageContainer);
makeDraggable(toggleButton);
}
function toggleChatVisibility() {
isChatHidden = !isChatHidden;
chatContainer.style.display = isChatHidden ? 'none' : 'block';
if (isYourChat) {
sendMessageContainer.style.display = isChatHidden ? 'none' : 'block';
}
if (!isChatHidden) {
unreadCount = 0;
updateBadge();
}
}
function updateBadge() {
badge.textContent = unreadCount > 0 ? `(${unreadCount})` : '';
}
function isUserAtBottom() {
// How close to the bottom counts as "at the bottom"
const threshold = 150;
if (chatContainer.scrollHeight - chatContainer.scrollTop - chatContainer.clientHeight < threshold) {
return true;
}
return false;
}
async function refreshChat() {
return fetch(chatUrl)
.then(res => res.text())
.then(html => {
const tempDOM = new DOMParser().parseFromString(html, 'text/html');
const rawMessages = tempDOM.querySelectorAll('table[id^="showmsg_"]');
const currentMessageInChatContainer = chatContainer.querySelectorAll('.bubble').length;
if (rawMessages.length > currentCount && isChatHidden) {
unreadCount += rawMessages.length - currentCount;
updateBadge();
}
if (rawMessages.length > currentMessageInChatContainer) {
const newMessages = Array.from(rawMessages).slice(currentMessageInChatContainer); // Only the new ones
newMessages.forEach(msg => {
chatContainer.appendChild(transformToBubble(msg));
});
if (!isChatHidden) {
const isBottom = isUserAtBottom();
if (isBottom) {
chatContainer.scrollTop = chatContainer.scrollHeight;
}
}
}
currentCount = rawMessages.length;
});
}
function getToPlayers(fromCell) {
const toPlayers = [];
const bTo = Array.from(fromCell.querySelectorAll('b'))
.find(b => b.textContent.trim().startsWith('To:'));
if (bTo) {
// Iterate over the siblings after the <b>To:</b> until we hit another <b> or end
let node = bTo.nextSibling;
while (node) {
if (node.nodeType === Node.ELEMENT_NODE) {
if (node.tagName === 'B') break; // stop if next section starts
if (node.tagName === 'IMG') {
// Get the next text node after the <img> for the name
let nameNode = node.nextSibling;
while (nameNode && nameNode.nodeType !== Node.TEXT_NODE) {
nameNode = nameNode.nextSibling;
}
if (nameNode) {
const name = nameNode.textContent.trim();
if (name) toPlayers.push(name);
}
}
}
node = node.nextSibling;
}
}
return toPlayers.length !== 0 ? toPlayers : ["All Player"];
}
function transformToBubble(msgTable) {
const fromCell = msgTable.querySelector('td:first-child');
const messageCell = msgTable.querySelector('td:last-child');
const senderMatch = fromCell?.innerText?.match(/From:\s*(.+)/u);
const sender = senderMatch ? senderMatch[1] : 'Unknown';
const toPlayers = getToPlayers(fromCell);
const isSelf = sender === userName;
// Find timestamp
let time = '';
let timeElem = msgTable.closest('tr')?.previousElementSibling;
if (timeElem) {
const timeSpan = timeElem.querySelector('.small_text');
if (timeSpan) {
time = timeSpan.textContent.trim();
}
}
const bubble = document.createElement('div');
bubble.className = isSelf ? 'bubble right' : 'bubble left';
bubble.innerHTML = `
<div class="sender"><strong>From: ${sender}</strong></div>
<div class="receiver">To: ${toPlayers.join(', ')}</div>
<div class="content">${renderChatMessage(messageCell.textContent)}</div>
<div class="timestamp">${time}</div>
`;
return bubble;
}
function injectStyle() {
const style = document.createElement('style');
style.textContent = `
.bubble {
max-width: 80%;
padding: 10px;
border-radius: 10px;
margin: 6px;
position: relative;
background: #ffffff;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
word-wrap: break-word;
font-size: 14px;
}
.bubble.right {
background: #dcf8c6;
margin-left: auto;
text-align: left;
}
.bubble.left {
background: #f1f0f0;
margin-right: auto;
text-align: left;
}
.bubble .sender {
font-weight: bold;
margin-bottom: 5px;
font-size: 12px;
}
.bubble .receiver {
margin-bottom: 10px;
color: blue;
font-size: 12px;
border-bottom: 2px solid #000;
}
.timestamp {
font-size: 0.7em;
color: gray;
text-align: right;
margin-top: 4px;
}
`;
document.head.appendChild(style);
}
async function fetchAndInsertMessageForm(container, gamesId) {
const response = await fetch(`/press.php?games_id=${gamesId}`);
const text = await response.text();
const dom = new DOMParser().parseFromString(text, 'text/html');
// Get all recipients
const checkboxes = dom.querySelectorAll('input[name="press_to_players_id[]"]');
const users = Array.from(checkboxes).map(cb => {
const img = cb.parentNode.querySelector(`input[value="${cb.value}"] + img`);
const anchor = img?.nextElementSibling;
return {
id: cb.value,
name: anchor?.textContent?.trim() || 'Unknown',
logo: img?.getAttribute('src')?.split('/').pop() || '',
};
});
// Your player ID
const playersIdInput = dom.querySelector('input[name="players_id"]');
const playersId = playersIdInput?.value || '';
const uniqId = dom.querySelector('input[name="uniq_id"]')?.value || '';
chatContainer.scrollTop = chatContainer.scrollHeight;
if (users.length == 0) {
isYourChat = false;
sendMessageContainer = null;
return;
}
// Insert form
createMessageForm(container, gamesId, playersId, uniqId, users);
}
// Create emoji button container
function createEmojiPicker() {
const container = document.createElement('div');
container.style.display = 'flex';
container.style.flexWrap = 'wrap';
container.style.gap = '4px';
container.style.marginTop = '5px';
container.style.border = '1px solid #ccc';
container.style.padding = '5px';
container.style.maxHeight = '120px';
container.style.overflowY = 'auto';
container.style.background = '#fff';
container.style.borderRadius = '6px';
// Add emojis from Map
gifMap.forEach((url, code) => {
const img = document.createElement('img');
img.src = url;
img.alt = code;
img.title = code;
img.style.width = '24px';
img.style.height = '24px';
img.style.cursor = 'pointer';
img.addEventListener('click', () => {
const textarea = document.querySelector('#message-textarea'); // Change selector to your textarea
if (textarea) {
textarea.value += code + ' ';
textarea.focus();
}
});
container.appendChild(img);
});
return container;
}
function createMessageForm(container, gamesId, playersId, uniqId, users) {
const form = document.createElement('form');
form.method = 'POST';
form.action = '/press.php';
form.style.marginTop = '10px';
form.style.borderTop = '1px solid #ccc';
form.style.paddingTop = '10px';
let userCheckboxes = '';
users.forEach(user => {
userCheckboxes += `
<label style="margin-right: 10px; display: inline-flex; align-items: center; cursor: pointer;">
<input type="checkbox" name="press_to_players_id[]" value="${user.id}" style="margin-right: 4px;">
<img src="terrain/ani/${user.logo}" style="vertical-align: middle; width: 20px; height: 20px; margin-right: 3px;">
${user.name}
</label>
`;
});
form.innerHTML = `
<div style="display: flex; flex-wrap: wrap; gap: 8px; max-height: 75px; overflow-y: auto; padding: 4px; border: 1px solid #ccc; background: #fafafa;">
${userCheckboxes}
</div>
<div style="margin-top: 5px; display: flex; gap: 5px;">
<button type="button" id="emoji-btn" style="padding: 4px 8px;">😊</button>
<textarea class="press" name="press_text" rows="5" style="flex: 1;" required></textarea>
</div>
<input type="hidden" name="players_id" value="${playersId}">
<input type="hidden" name="games_id" value="${gamesId}">
<input type="hidden" name="uniq_id" value="${uniqId}">
<div style="margin-top: 10px; text-align: right;">
<input type="submit" class="submit" value="Send Message">
</div>
`;
// Create popup container for emojis
const popup = document.createElement("div");
popup.id = "emoji-popup";
popup.style.position = "absolute";
popup.style.width = "500px";
popup.style.maxHeight = "150px";
popup.style.overflowY = "auto";
popup.style.background = "#fff";
popup.style.border = "1px solid #ccc";
popup.style.padding = "5px";
popup.style.display = "flex";
popup.style.flexWrap = "wrap";
popup.style.gap = "5px";
popup.style.zIndex = "9999";
popup.style.boxShadow = "0 2px 5px rgba(0,0,0,0.2)";
// Position popup above the button
const rect = popup.getBoundingClientRect();
const scrollTop = window.scrollY || document.documentElement.scrollTop;
const scrollLeft = window.scrollX || document.documentElement.scrollLeft;
popup.style.left = (rect.left + scrollLeft) + "px";
popup.style.top = (rect.top + scrollTop - 210) + "px";
// Populate popup with gifMap emojis
for (const [code, url] of Object.entries(gifMap)) {
const img = document.createElement("img");
img.src = url;
img.alt = code;
img.title = code;
img.style.width = "32px";
img.style.height = "32px";
img.style.cursor = "pointer";
img.addEventListener("click", () => {
const textarea = form.querySelector(".press");
textarea.value += ` ${code} `;
popup.style.display = "none";
});
popup.appendChild(img);
}
// Append popup to body
document.body.appendChild(popup);
// Show popup on button click
form.querySelector("#emoji-btn").addEventListener("click", (e) => {
const rect = e.target.getBoundingClientRect();
const popupWidth = popup.offsetWidth; // get actual width
popup.style.top = `${rect.top + window.scrollY}px`;
popup.style.left = `${rect.left + window.scrollX - popupWidth - 520}px`; // shift left with small gap
popup.style.display = popup.style.display === "none" ? "flex" : "none";
});
// Hide popup if clicking outside
document.addEventListener("click", (e) => {
if (!popup.contains(e.target) && e.target.id !== "emoji-btn") {
popup.style.display = "none";
}
});
// Handle form submission
form.addEventListener('submit', async function (e) {
e.preventDefault();
e.stopImmediatePropagation();
const selected = form.querySelectorAll('input[name="press_to_players_id[]"]:checked');
if (selected.length === 0) {
alert("Please select at least one player before sending a message.");
return;
}
const formData = new FormData(form);
const res = await fetch(form.action, {
method: 'POST',
body: formData
});
if (res.ok) {
console.log("Message sent without page reload");
form.querySelector('.press').value = '';
refreshChat().then(() => {
chatContainer.scrollTop = chatContainer.scrollHeight;
});
} else {
console.error("Message send failed");
}
});
container.appendChild(form);
}
function main() {
injectStyle();
injectChatBox();
refreshChat();
const originalLog = console.log;
function customLog(...args) {
// Detect the specific notification object
if (args.length > 0 && typeof args[0] === 'object') {
const data = args[0];
if (data.Notification?.action === 'Notification' && data.Notification?.newMessage) {
refreshChat();
}
}
// Pass everything through to original log
originalLog.apply(console, args);
}
// Hook into console.log
console.log = customLog;
// Auto-unhook when navigating away / closing tab
window.addEventListener('beforeunload', () => {
console.log = originalLog;
});
const gamesId = new URLSearchParams(window.location.search).get('games_id');
fetchAndInsertMessageForm(sendMessageContainer, gamesId);
toggleChatVisibility();
}
main();
})();