//const usercache={}; import {Member} from "./member.js"; import {markdown} from "./markdown.js"; import {Contextmenu} from "./contextmenu.js"; import {Localuser} from "./localuser.js"; import {Guild} from "./guild.js"; class User{ static userids={}; owner:Localuser; hypotheticalpfp:boolean; id:string; avatar:string; username:string; bio:string; discriminator:string; pronouns:string; bot:boolean; static checkuser(userjson,owner:Localuser){ if(User.userids[userjson.id]){ return User.userids[userjson.id]; }else{ const tempuser=new User(userjson,owner,true) User.userids[userjson.id]=tempuser; return tempuser; } } get info(){ return this.owner.info; } get localuser(){ return this.owner; } constructor(userjson,owner:Localuser,dontclone=false){ this.owner=owner; if(!owner){console.error("missing localuser")} if(dontclone){ for(const thing of Object.keys(userjson)){ this[thing]=userjson[thing]; } this.hypotheticalpfp=false; }else{ return User.checkuser(userjson,owner); } } async resolvemember(guild:Guild){ await Member.resolve(this,guild); } buildpfp(){ const pfp=document.createElement('img'); pfp.src=this.getpfpsrc(); pfp.classList.add("pfp"); pfp.classList.add("userid:"+this.id); return pfp; } userupdate(json){ if(json.avatar!==this.avatar){ console.log this.changepfp(json.avatar); } } changepfp(update:string){ this.avatar=update; this.hypotheticalpfp=false; const src=this.getpfpsrc(); console.log(src) for(const thing of document.getElementsByClassName("userid:"+this.id)){ (thing as HTMLImageElement).src=src; } } getpfpsrc(){ if(this.hypotheticalpfp){ return this.avatar; } if(this.avatar!=null){ return this.info.cdn.toString()+"avatars/"+this.id+"/"+this.avatar+".png"; }else{ return this.info.cdn.toString()+"embed/avatars/3.png"; } } createjankpromises(){ new Promise(_=>{}) } buildprofile(x:number,y:number){ if(Contextmenu.currentmenu!=""){ Contextmenu.currentmenu.remove(); } const div=document.createElement("table"); if(x!==-1){ div.style.left=x+"px"; div.style.top=y+"px"; div.classList.add("profile"); }else{ div.classList.add("hypoprofile"); } { const pfp=this.buildpfp(); const pfprow=document.createElement("tr"); div.appendChild(pfprow); pfprow.appendChild(pfp); } { const userbody=document.createElement("tr"); userbody.classList.add("infosection"); div.appendChild(userbody); const usernamehtml=document.createElement("h2"); usernamehtml.textContent=this.username; userbody.appendChild(usernamehtml); const discrimatorhtml=document.createElement("h3"); discrimatorhtml.classList.add("tag"); discrimatorhtml.textContent=this.username+"#"+this.discriminator; userbody.appendChild(discrimatorhtml) const pronounshtml=document.createElement("p"); pronounshtml.textContent=this.pronouns; pronounshtml.classList.add("pronouns"); userbody.appendChild(pronounshtml) const rule=document.createElement("hr"); userbody.appendChild(rule); const biohtml=markdown(this.bio); userbody.appendChild(biohtml); } console.log(div); if(x!==-1){ Contextmenu.currentmenu=div; document.body.appendChild(div) Contextmenu.keepOnScreen(div); } return div; } profileclick(obj:HTMLElement){ obj.onclick=e=>{ this.buildprofile(e.clientX,e.clientY); e.stopPropagation(); } } } export {User};