adds support for role settings and various fixes

This commit is contained in:
MathMan05 2024-06-30 22:05:14 -05:00
parent 96b2dbb21c
commit 8fe0c9f46b
20 changed files with 1199 additions and 183 deletions

View file

@ -1,12 +1,27 @@
import {User} from "./user.js";
import {Role} from "./role.js";
import {Guild} from "./guild.js";
import { Contextmenu } from "./contextmenu.js";
class Member{
static already={};
owner:Guild;
user:User;
roles:Role[];
error:boolean;
static contextmenu:Contextmenu=new Contextmenu("User Menu");
static setUpContextMenu(){
this.contextmenu.addbutton("Copy user id",function(){
navigator.clipboard.writeText(this.id);
});
this.contextmenu.addbutton("Message user",function(){
fetch(this.info.api.toString()+"/v9/users/@me/channels",
{method:"POST",
body:JSON.stringify({"recipients":[this.id]}),
headers: this.headers
});
});
}
constructor(memberjson,owner:Guild,error=false){
this.error=error;
this.owner=owner;
@ -45,38 +60,42 @@ class Member{
get info(){
return this.owner.info;
}
static async resolve(unkown:User|object,guild:Guild):Promise<Member>{
static async resolve(unkown:User|object|string,guild:Guild):Promise<Member>{
if(!(guild instanceof Guild)){
console.error(guild)
}
let user:User;
let id="";
if(unkown instanceof User){
user=unkown as User;
id=user.id;
}else if(typeof unkown===typeof ""){
id=unkown as string;
}else{
return new Member(unkown,guild);
}
if(guild.id==="@me"){return null}
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]
}else if(Member.already[guild.id][id]){
const memb=Member.already[guild.id][id]
if(memb instanceof Promise){
return await memb;
}
return memb;
}
const promoise= fetch(guild.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 promoise= fetch(guild.info.api.toString()+"/v9/users/"+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;
Member.already[guild.id][id]=memb;
console.log("resolved")
return memb
})
Member.already[guild.id][user.id]=promoise;
Member.already[guild.id][id]=promoise;
try{
return await promoise
}catch(_){
const memb=new Member(user,guild,true);
Member.already[guild.id][user.id]=memb;
Member.already[guild.id][id]=memb;
return memb;
}
}
@ -105,7 +124,27 @@ class Member{
}
}
return this.guild.properties.owner_id===this.user.id;
}
bind(html:HTMLElement){
if(html.tagName==="SPAN"){
if(!this) {return};
console.log(this.error);
if(this.error){
const error=document.createElement("span");
error.textContent="!";
error.classList.add("membererror");
html.after(error);
return;
}
html.style.color=this.getColor();
}
this.profileclick(html);
Member.contextmenu.bind(html);
}
profileclick(html:HTMLElement){
//to be implemented
}
}
Member.setUpContextMenu();
export {Member};