UNPKG

buy-champions

Version:
10 lines (9 loc) 2.38 kB
/** * @author balaclava * @name buy-champions * @link https://github.com/controlado/buy-champions#readme * @description Buy champions automatically! 🐧 * @version 1.1.1 * @license GPL-3.0-or-later */ import{addRoutines as m,StoreBase as p,Champion as f}from"https://cdn.jsdelivr.net/npm/balaclava-utils@latest";const d="1.1.1",h="en",b={pt:"Comprar campeões que custam...",es:"Comprar campeones que cuestan...",en:"Buy champions that cost..."},s={missing:h,tooltip:b},c=`buy-champions(${d}):`;class y{constructor(n){this.rawResponse=n,this.playerIP=n.data.player.ip||0,this.storeData=n.data.catalog||[]}filterByPrice(n){return this.storeData.filter(e=>e.ip===n&&!e.owned).filter(e=>(n+=e.ip)<=this.playerIP).map(e=>new f(e.itemId,e.ip))}get prices(){const n=new Set(this.storeData.map(e=>e.ip));return Array.from(n).sort((e,i)=>e-i)}}class g extends p{async getAvailableChampions(){const n=await this.request("GET","/storefront/v3/view/champions");return new y(n)}}async function v(t,n){var r;const e=document.querySelector("#rcp-fe-lol-store-iframe > iframe"),i=(r=e==null?void 0:e.contentDocument.documentElement)==null?void 0:r.querySelector(n);if(!(!i||i.hasAttribute("buy-button"))){try{const a=await t.getAvailableChampions();var o=w(t,a)}catch(a){l("Failed to fetch champions available for purchase",a);return}try{i.setAttribute("buy-button","true"),i.insertBefore(o,i.firstChild)}catch(a){l("Failed to set button in store UI",a);return}B("Button set without errors")}}function w(t,n){const e=P(n.prices),i=e.next(),o=document.createElement("lol-uikit-flat-button");return o.classList.add("lol-uikit-flat-button-normal","title-on-hover"),o.textContent=u(i.value),o.ariaLabel=C(),o.onclick=async()=>{o.setAttribute("disabled","true");try{const r=n.filterByPrice(i.value);r.length&&await t.buyChampions(...r)}finally{o.removeAttribute("disabled")}},o.oncontextmenu=()=>{const r=e.next();o.textContent=u(r.value)},o}function C(){const t=document.body.dataset.lang;return s.tooltip[t]||s.tooltip[s.missing]}function u(t){return`${t} BE`}function*P(t){for(;;)yield*t}function A(t){console.debug(`${c} ${t}`)}function B(t){console.info(`${c} ${t}`)}function l(t,n){console.error(`${c} ${t}: ${n.message}`)}window.addEventListener("load",async()=>{const t=new g;await t.wait(1e3),m(()=>v(t,"nav.navbar > .nav-right")),A("Report bugs to Balaclava#1912 (@feminismo)")});