From f79b108b0d4b4f48e61ea581e5887e4b5257ffd3 Mon Sep 17 00:00:00 2001 From: MathMan05 Date: Mon, 24 Jun 2024 15:35:59 -0500 Subject: [PATCH] Various changes along with some initial perm stuff --- webpage/guild.js | 2 - webpage/index.html | 1 + webpage/localuser.js | 7 +- webpage/member.js | 53 +++++++++- webpage/message.js | 14 ++- webpage/permissions.js | 234 +++++++++++++++++++++++++++++++++++++++++ webpage/role.js | 14 +++ webpage/user.js | 16 +-- 8 files changed, 319 insertions(+), 22 deletions(-) create mode 100644 webpage/permissions.js diff --git a/webpage/guild.js b/webpage/guild.js index 6e75798..3fa9d77 100644 --- a/webpage/guild.js +++ b/webpage/guild.js @@ -341,12 +341,10 @@ class guild{ }) } fillMember(member){ - member.guild=this; const realroles=[]; for(const thing of member.roles){ realroles.push(this.getRole(thing)); } - member.guild=this; member.roles=realroles; return member; } diff --git a/webpage/index.html b/webpage/index.html index 0656ee8..3f9559c 100644 --- a/webpage/index.html +++ b/webpage/index.html @@ -17,6 +17,7 @@ + diff --git a/webpage/localuser.js b/webpage/localuser.js index df36c1e..dcabfbc 100644 --- a/webpage/localuser.js +++ b/webpage/localuser.js @@ -7,7 +7,7 @@ class localuser{ this.headers={"Content-type": "application/json; charset=UTF-8",Authorization:this.userinfo.token}; } gottenReady(ready){ - this.usersettings; + this.usersettings=null; this.initialized=true; this.ready=ready; this.guilds=[]; @@ -34,8 +34,9 @@ class localuser{ this.guildids[thing.guild_id].notisetting(thing); } for(const thing of ready.d.merged_members){ - const temp=new member(thing[0]); - this.guildids[temp.guild_id].giveMember(temp); + const guild=this.guildids[thing[0].guild_id] + const temp=new member(thing[0],guild); + guild.giveMember(temp); } for(const thing of ready.d.read_state.entries){ const guild=this.resolveGuildidFromChannelID(thing.id) diff --git a/webpage/member.js b/webpage/member.js index c9b5656..453e0a0 100644 --- a/webpage/member.js +++ b/webpage/member.js @@ -1,9 +1,45 @@ class member{ - constructor(memberjson){ - for(const thing of Object.keys(memberjson)){ - this[thing]=memberjson[thing]; + static already={}; + constructor(memberjson,owner){ + if(!owner){console.error("Guild not included in the creation of a member object")} + this.owner=owner; + let membery=memberjson; + if(memberjson.guild_member){ + membery=memberjson.guild_member; + this.user=memberjson.user; + } + for(const thing of Object.keys(membery)){ + if(thing==="guild"){continue} + this[thing]=membery[thing]; } this.user=new user(this.user); + console.log(this) + } + get guild(){ + return this.owner; + } + get localuser(){ + return this.guild.localuser; + } + static async resolve(user,guild){ + if(!member.already[guild.id]){ + member.already[guild.id]={}; + }else if(member.already[guild.id][user.id]){ + const memb=member.already[guild.id][user.id] + if(memb instanceof Promise){ + return await memb; + } + return memb; + } + const promoise= fetch(info.api.toString()+"/v9/users/"+user.id+"/profile?with_mutual_guilds=true&with_mutual_friends_count=true&guild_id="+guild.id,{headers:guild.headers}).then(_=>_.json()).then(json=>{ + const memb=new member(json,guild); + member.already[guild.id][user.id]=memb; + guild.fillMember(memb); + console.log("resolved") + return memb + }); + member.already[guild.id][user.id]=promoise; + return await promoise; } hasRole(ID){ for(const thing of this.roles){ @@ -14,6 +50,17 @@ class member{ } return false; } + getColor(){ + console.log(this); + for(const thing of this.roles){ + const color=thing.getColor(); + console.log(thing); + if(color){ + return color; + } + } + return ""; + } isAdmin(){ console.log(this); return this.guild.properties.owner_id===this.user.id; diff --git a/webpage/message.js b/webpage/message.js index e17433b..06c247a 100644 --- a/webpage/message.js +++ b/webpage/message.js @@ -108,7 +108,14 @@ class cmessage{ const username=document.createElement("span"); replyline.appendChild(username); const reply=document.createElement("div"); - username.classList.add("username") + username.classList.add("username"); + + member.resolve(this.author,this.guild).then(_=>{ + console.log(_); + console.log(_.getColor()); + username.style.color=_.getColor(); + }); + reply.classList.add("replytext"); replyline.appendChild(reply); const line2=document.createElement("hr"); @@ -165,6 +172,11 @@ class cmessage{ const username=document.createElement("span"); username.classList.add("username") profileclick(username,this.author); + member.resolve(this.author,this.guild).then(_=>{ + console.log(_); + console.log(_.getColor()); + username.style.color=_.getColor(); + }) username.textContent=this.author.username; const userwrap=document.createElement("tr") userwrap.appendChild(username) diff --git a/webpage/permissions.js b/webpage/permissions.js new file mode 100644 index 0000000..d844fce --- /dev/null +++ b/webpage/permissions.js @@ -0,0 +1,234 @@ +class permissions{ + constructor(b){ + this.permissions=BigInt(b); + } + getPermisionbit(b){ + return Boolean((this.permissions>>BigInt(b))&1n); + } + setPermisionbit(b,state){ + const bit=1n< { - usercache[this.id+"+"+guild.id]={done:false}; - fetch(info.api.toString()+"/v9/users/"+this.id+"/profile?with_mutual_guilds=true&with_mutual_friends_count=false&guild_id="+guild.id).then(json).then(str=>{ - return new member(str); - }); - }); - usercache[this.id+"+"+guild.id]=tempy; - } + await member.resolve(this,guild); } buildpfp(){ const pfp=document.createElement('img');