diff --git a/src/userbadges.js b/src/userbadges.js deleted file mode 100644 index 8fb56b6..0000000 --- a/src/userbadges.js +++ /dev/null @@ -1,138 +0,0 @@ -(function(){ - -if(window.__AVIA_PROFILE_BADGES__)return; -window.__AVIA_PROFILE_BADGES__=true; - -const BADGE_URL="https://raw.githubusercontent.com/AvaLilac/AviaClientBadges/refs/heads/main/userbadgesbackend.js"; - -let badgeData=null,loadingPromise=null; - -function loadBadges(){ -if(badgeData)return Promise.resolve(); -if(loadingPromise)return loadingPromise; - -loadingPromise=fetch(BADGE_URL+"?t="+Date.now()) -.then(r=>r.text()) -.then(code=>{ - -const start = code.indexOf("["); -const end = code.lastIndexOf("]"); - -if(start === -1 || end === -1){ -console.error("Badge backend format invalid"); -badgeData=[]; -return; -} - -let arrayText = code.slice(start, end + 1); - -arrayText = arrayText -.replace(/(\w+)\s*:/g, '"$1":'); // quote keys - -try{ -badgeData = JSON.parse(arrayText); -}catch(err){ -console.error("Badge parse failed:", err); -badgeData=[]; -} - -}) -.catch(err=>{ -console.error("Badge backend failed:",err); -badgeData=[]; -}); - -return loadingPromise; -} - -function getUsername(root){ -const tag=root.querySelector("span.fw_200"); -if(!tag)return null; -const span=tag.parentElement; -return span?span.textContent.trim():null; -} - -function getUserBadges(username){ -if(!badgeData)return[]; -const clean=username.trim().toLowerCase(); -return badgeData.filter(b=> -Array.isArray(b.users) && -b.users.some(u=>u.toLowerCase()===clean) -); -} - -function injectBadge(card,username){ -if(card.dataset.aviaBadgeInjected)return; -card.dataset.aviaBadgeInjected="true"; - -card.classList.remove("asp_1/1"); -card.style.aspectRatio="auto"; -card.style.height="auto"; -card.style.minHeight="unset"; -card.style.overflow="visible"; - -const container=document.createElement("div"); -container.style.marginTop="8px"; -container.style.display="flex"; -container.style.flexDirection="column"; -container.style.gap="4px"; - -const label=document.createElement("span"); -label.className="lh_1.25rem fs_0.875rem fw_550"; -label.textContent="BADGE"; -container.appendChild(label); - -const badges=getUserBadges(username); - -if(badges.length){ -badges.forEach(b=>{ -const line=document.createElement("span"); -line.className="lh_1rem fs_0.75rem fw_500"; -line.textContent=`${b.icon} ${b.name}`; -line.style.color=b.color; -container.appendChild(line); -}); -}else{ -const none=document.createElement("span"); -none.className="lh_1rem fs_0.75rem fw_500"; -none.textContent="User Has No Badges"; -none.style.opacity="0.7"; -container.appendChild(none); -} - -card.appendChild(container); -} - -async function processProfile(root){ -await loadBadges(); -const username=getUsername(root); -if(!username)return; - -const joined=[...root.querySelectorAll("div.pos_relative")] -.find(c=>c.querySelector("span")&&c.querySelector("span").textContent.trim()==="Joined"); - -if(!joined)return; - -injectBadge(joined,username); -} - -const observer=new MutationObserver(muts=>{ -for(const m of muts){ -for(const n of m.addedNodes){ -if(!(n instanceof HTMLElement))continue; - -if(n.matches?.("div.will-change_transform"))processProfile(n); -if(n.matches?.("div.p_24px.min-w_280px.max-w_560px"))processProfile(n); - -const small=n.querySelector?.("div.will-change_transform"); -if(small)processProfile(small); - -const expanded=n.querySelector?.("div.p_24px.min-w_280px.max-w_560px"); -if(expanded)processProfile(expanded); -} -} -}); - -observer.observe(document.body,{childList:true,subtree:true}); - -})();