adds support for role settings and various fixes
This commit is contained in:
parent
96b2dbb21c
commit
8fe0c9f46b
20 changed files with 1199 additions and 183 deletions
|
@ -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};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue