resolve members better and with the WS
This commit is contained in:
parent
a45188c1fc
commit
6f97a06cd3
10 changed files with 170 additions and 159 deletions
|
@ -5,6 +5,7 @@ import { Dialog } from "./dialog.js";
|
||||||
import { Member } from "./member.js";
|
import { Member } from "./member.js";
|
||||||
import { Settings, RoleList } from "./settings.js";
|
import { Settings, RoleList } from "./settings.js";
|
||||||
import { SnowFlake } from "./snowflake.js";
|
import { SnowFlake } from "./snowflake.js";
|
||||||
|
import { User } from "./user.js";
|
||||||
class Guild {
|
class Guild {
|
||||||
owner;
|
owner;
|
||||||
headers;
|
headers;
|
||||||
|
@ -92,7 +93,12 @@ class Guild {
|
||||||
this.roles.push(roleh);
|
this.roles.push(roleh);
|
||||||
this.roleids.set(roleh.snowflake, roleh);
|
this.roleids.set(roleh.snowflake, roleh);
|
||||||
}
|
}
|
||||||
Member.resolve(member, this).then(_ => this.member = _);
|
if (member instanceof User) {
|
||||||
|
Member.resolveMember(member, this).then(_ => this.member = _);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Member.new(member, this).then(_ => this.member = _);
|
||||||
|
}
|
||||||
for (const thing of json.channels) {
|
for (const thing of json.channels) {
|
||||||
const temp = new Channel(thing, this);
|
const temp = new Channel(thing, this);
|
||||||
this.channels.push(temp);
|
this.channels.push(temp);
|
||||||
|
|
|
@ -161,7 +161,7 @@ class Localuser {
|
||||||
if (temp.op === 0 && temp.t === "READY") {
|
if (temp.op === 0 && temp.t === "READY") {
|
||||||
returny();
|
returny();
|
||||||
}
|
}
|
||||||
this.handleEvent(temp);
|
await this.handleEvent(temp);
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
|
@ -196,7 +196,7 @@ class Localuser {
|
||||||
if (temp.op === 0 && temp.t === "READY") {
|
if (temp.op === 0 && temp.t === "READY") {
|
||||||
returny();
|
returny();
|
||||||
}
|
}
|
||||||
this.handleEvent(temp);
|
await this.handleEvent(temp);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
@ -240,7 +240,7 @@ class Localuser {
|
||||||
await promise;
|
await promise;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
handleEvent(temp) {
|
async handleEvent(temp) {
|
||||||
console.debug(temp);
|
console.debug(temp);
|
||||||
if (temp.s)
|
if (temp.s)
|
||||||
this.lastSequence = temp.s;
|
this.lastSequence = temp.s;
|
||||||
|
@ -314,7 +314,7 @@ class Localuser {
|
||||||
const guild = SnowFlake.getSnowFlakeFromID(temp.d.guild_id, Guild).getObject();
|
const guild = SnowFlake.getSnowFlakeFromID(temp.d.guild_id, Guild).getObject();
|
||||||
let thing;
|
let thing;
|
||||||
if (temp.d.member) {
|
if (temp.d.member) {
|
||||||
thing = new Member(temp.d.member, guild);
|
thing = await Member.new(temp.d.member, guild);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
thing = { id: temp.d.user_id };
|
thing = { id: temp.d.user_id };
|
||||||
|
@ -1033,8 +1033,6 @@ class Localuser {
|
||||||
//---------- resolving members code -----------
|
//---------- resolving members code -----------
|
||||||
waitingmembers = new Map();
|
waitingmembers = new Map();
|
||||||
async resolvemember(id, guildid) {
|
async resolvemember(id, guildid) {
|
||||||
console.warn("this function may or may not work on any instance, use at your own risk");
|
|
||||||
//throw new Error("Not implemented on the server side and not fully implemented, do not use");
|
|
||||||
if (!this.waitingmembers.has(guildid)) {
|
if (!this.waitingmembers.has(guildid)) {
|
||||||
this.waitingmembers.set(guildid, new Map());
|
this.waitingmembers.set(guildid, new Map());
|
||||||
}
|
}
|
||||||
|
|
134
.dist/member.js
134
.dist/member.js
|
@ -1,14 +1,12 @@
|
||||||
import { User } from "./user.js";
|
import { User } from "./user.js";
|
||||||
import { Role } from "./role.js";
|
import { Role } from "./role.js";
|
||||||
import { Guild } from "./guild.js";
|
|
||||||
import { Contextmenu } from "./contextmenu.js";
|
import { Contextmenu } from "./contextmenu.js";
|
||||||
import { SnowFlake } from "./snowflake.js";
|
import { SnowFlake } from "./snowflake.js";
|
||||||
class Member {
|
class Member {
|
||||||
static already = {};
|
static already = {};
|
||||||
owner;
|
owner;
|
||||||
user;
|
user;
|
||||||
roles;
|
roles = [];
|
||||||
error;
|
|
||||||
id;
|
id;
|
||||||
static contextmenu = new Contextmenu("User Menu");
|
static contextmenu = new Contextmenu("User Menu");
|
||||||
static setUpContextMenu() {
|
static setUpContextMenu() {
|
||||||
|
@ -22,19 +20,15 @@ class Member {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
constructor(memberjson, owner, error = false) {
|
constructor(memberjson, owner) {
|
||||||
this.error = error;
|
if (User.userids[memberjson.id]) {
|
||||||
this.owner = owner;
|
this.user = User.userids[memberjson.id];
|
||||||
let membery = memberjson;
|
|
||||||
this.roles = [];
|
|
||||||
if (!error) {
|
|
||||||
if (memberjson["guild_member"]) {
|
|
||||||
memberjson = memberjson;
|
|
||||||
membery = memberjson.guild_member;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
membery = membery;
|
else {
|
||||||
for (const thing of Object.keys(membery)) {
|
this.user = new User(memberjson.user, owner.localuser);
|
||||||
|
}
|
||||||
|
this.owner = owner;
|
||||||
|
for (const thing of Object.keys(memberjson)) {
|
||||||
if (thing === "guild") {
|
if (thing === "guild") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -42,23 +36,17 @@ class Member {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (thing === "roles") {
|
if (thing === "roles") {
|
||||||
for (const strrole of membery["roles"]) {
|
for (const strrole of memberjson["roles"]) {
|
||||||
const role = SnowFlake.getSnowFlakeFromID(strrole, Role).getObject();
|
const role = SnowFlake.getSnowFlakeFromID(strrole, Role).getObject();
|
||||||
this.roles.push(role);
|
this.roles.push(role);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
this[thing] = membery[thing];
|
this[thing] = memberjson[thing];
|
||||||
}
|
}
|
||||||
if (error) {
|
if (SnowFlake.getSnowFlakeFromID(this?.id, User)) {
|
||||||
this.user = memberjson;
|
this.user = SnowFlake.getSnowFlakeFromID(this.id, User).getObject();
|
||||||
}
|
return;
|
||||||
else {
|
|
||||||
if (SnowFlake.getSnowFlakeFromID(this?.id, User)) {
|
|
||||||
this.user = SnowFlake.getSnowFlakeFromID(this.id, User).getObject();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.user = new User(membery.user, owner.localuser);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
get guild() {
|
get guild() {
|
||||||
|
@ -70,53 +58,59 @@ class Member {
|
||||||
get info() {
|
get info() {
|
||||||
return this.owner.info;
|
return this.owner.info;
|
||||||
}
|
}
|
||||||
static async resolve(unkown, guild) {
|
static async new(memberjson, owner) {
|
||||||
if (!(guild instanceof Guild)) {
|
const user = new User(memberjson.user, owner.localuser);
|
||||||
console.error(guild);
|
if (user.members.has(owner)) {
|
||||||
}
|
let memb = user.members.get(owner);
|
||||||
let user;
|
if (memb === undefined) {
|
||||||
let id;
|
memb = new Member(memberjson, owner);
|
||||||
if (unkown instanceof User) {
|
user.members.set(owner, memb);
|
||||||
user = unkown;
|
return memb;
|
||||||
id = user.snowflake;
|
}
|
||||||
}
|
else if (memb instanceof Promise) {
|
||||||
else if (typeof unkown === typeof "") {
|
return await memb; //I should do something else, though for now this is "good enough"
|
||||||
id = new SnowFlake(unkown, undefined);
|
}
|
||||||
|
else {
|
||||||
|
return memb;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return new Member(unkown, guild);
|
const memb = new Member(memberjson, owner);
|
||||||
|
user.members.set(owner, memb);
|
||||||
|
return memb;
|
||||||
}
|
}
|
||||||
if (guild.id === "@me") {
|
}
|
||||||
return null;
|
static async resolveMember(user, guild) {
|
||||||
}
|
const maybe = user.members.get(guild);
|
||||||
if (!Member.already[guild.id]) {
|
if (!user.members.has(guild)) {
|
||||||
Member.already[guild.id] = {};
|
const membpromise = guild.localuser.resolvemember(user.id, guild.id);
|
||||||
}
|
let res;
|
||||||
else if (Member.already[guild.id][id]) {
|
const promise = new Promise(r => { res = r; });
|
||||||
const memb = Member.already[guild.id][id];
|
user.members.set(guild, promise);
|
||||||
if (memb instanceof Promise) {
|
const membjson = await membpromise;
|
||||||
return await memb;
|
if (membjson === undefined) {
|
||||||
|
res(undefined);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const member = new Member(membjson, guild);
|
||||||
|
res(member);
|
||||||
|
return member;
|
||||||
}
|
}
|
||||||
return memb;
|
|
||||||
}
|
}
|
||||||
guild.localuser.resolvemember(id.id, guild.id);
|
if (maybe instanceof Promise) {
|
||||||
const prom1 = fetch(guild.info.api.toString() + "/users/" + id + "/profile?with_mutual_guilds=true&with_mutual_friends_count=true&guild_id=" + guild.snowflake, { headers: guild.headers });
|
return await maybe;
|
||||||
prom1.catch(_ => { console.log(_); });
|
|
||||||
const promoise = prom1.then(_ => _.json()).then(json => {
|
|
||||||
const memb = new Member(json, guild);
|
|
||||||
Member.already[guild.id][id] = memb;
|
|
||||||
return memb;
|
|
||||||
});
|
|
||||||
Member.already[guild.id][id] = promoise;
|
|
||||||
try {
|
|
||||||
return await promoise;
|
|
||||||
}
|
}
|
||||||
catch (_) {
|
else {
|
||||||
const memb = new Member(user, guild, true);
|
return maybe;
|
||||||
Member.already[guild.id][id] = memb;
|
|
||||||
return memb;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @todo
|
||||||
|
*/
|
||||||
|
highInfo() {
|
||||||
|
fetch(this.info.api + "/users/" + this.id + "/profile?with_mutual_guilds=true&with_mutual_friends_count=true&guild_id=" + this.guild.id, { headers: this.guild.headers });
|
||||||
|
}
|
||||||
hasRole(ID) {
|
hasRole(ID) {
|
||||||
console.log(this.roles, ID);
|
console.log(this.roles, ID);
|
||||||
for (const thing of this.roles) {
|
for (const thing of this.roles) {
|
||||||
|
@ -149,13 +143,11 @@ class Member {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
if (this.error) {
|
/*
|
||||||
const error = document.createElement("span");
|
if(this.error){
|
||||||
error.textContent = "!";
|
|
||||||
error.classList.add("membererror");
|
|
||||||
html.after(error);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
html.style.color = this.getColor();
|
html.style.color = this.getColor();
|
||||||
}
|
}
|
||||||
this.profileclick(html);
|
this.profileclick(html);
|
||||||
|
|
|
@ -107,7 +107,7 @@ class Message {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (thing === "member") {
|
else if (thing === "member") {
|
||||||
this.member = new Member(messagejson.member, this.guild);
|
Member.new(messagejson.member, this.guild).then(_ => { this.member = _; });
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (thing === "embeds") {
|
else if (thing === "embeds") {
|
||||||
|
|
|
@ -21,6 +21,7 @@ class User {
|
||||||
premium_type;
|
premium_type;
|
||||||
theme_colors;
|
theme_colors;
|
||||||
badge_ids;
|
badge_ids;
|
||||||
|
members = new WeakMap();
|
||||||
clone() {
|
clone() {
|
||||||
return new User({
|
return new User({
|
||||||
username: this.username,
|
username: this.username,
|
||||||
|
@ -97,7 +98,7 @@ class User {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async resolvemember(guild) {
|
async resolvemember(guild) {
|
||||||
return await Member.resolve(this, guild);
|
return await Member.resolveMember(this, guild);
|
||||||
}
|
}
|
||||||
buildpfp() {
|
buildpfp() {
|
||||||
const pfp = document.createElement('img');
|
const pfp = document.createElement('img');
|
||||||
|
@ -114,7 +115,14 @@ class User {
|
||||||
}
|
}
|
||||||
bind(html, guild = null) {
|
bind(html, guild = null) {
|
||||||
if (guild && guild.id !== "@me") {
|
if (guild && guild.id !== "@me") {
|
||||||
Member.resolve(this, guild).then(_ => {
|
Member.resolveMember(this, guild).then(_ => {
|
||||||
|
if (_ === undefined) {
|
||||||
|
const error = document.createElement("span");
|
||||||
|
error.textContent = "!";
|
||||||
|
error.classList.add("membererror");
|
||||||
|
html.after(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
_.bind(html);
|
_.bind(html);
|
||||||
}).catch(_ => {
|
}).catch(_ => {
|
||||||
console.log(_);
|
console.log(_);
|
||||||
|
|
|
@ -7,7 +7,8 @@ import {Member} from "./member.js";
|
||||||
import {Settings,RoleList} from "./settings.js";
|
import {Settings,RoleList} from "./settings.js";
|
||||||
import {Permissions} from "./permissions.js";
|
import {Permissions} from "./permissions.js";
|
||||||
import { SnowFlake } from "./snowflake.js";
|
import { SnowFlake } from "./snowflake.js";
|
||||||
import { channeljson, guildjson, emojijson } from "./jsontypes.js";
|
import { channeljson, guildjson, emojijson, memberjson } from "./jsontypes.js";
|
||||||
|
import { User } from "./user.js";
|
||||||
class Guild{
|
class Guild{
|
||||||
owner:Localuser;
|
owner:Localuser;
|
||||||
headers:Localuser["headers"];
|
headers:Localuser["headers"];
|
||||||
|
@ -81,7 +82,7 @@ class Guild{
|
||||||
s1.options.push(new RoleList(permlist,this,this.updateRolePermissions.bind(this)));
|
s1.options.push(new RoleList(permlist,this,this.updateRolePermissions.bind(this)));
|
||||||
settings.show();
|
settings.show();
|
||||||
}
|
}
|
||||||
constructor(json:guildjson|-1,owner:Localuser,member){
|
constructor(json:guildjson|-1,owner:Localuser,member:memberjson|User){
|
||||||
if(json===-1){
|
if(json===-1){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -101,7 +102,12 @@ class Guild{
|
||||||
this.roles.push(roleh)
|
this.roles.push(roleh)
|
||||||
this.roleids.set(roleh.snowflake,roleh);
|
this.roleids.set(roleh.snowflake,roleh);
|
||||||
}
|
}
|
||||||
Member.resolve(member,this).then(_=>this.member=_);
|
if(member instanceof User){
|
||||||
|
Member.resolveMember(member,this).then(_=>this.member=_);
|
||||||
|
}else{
|
||||||
|
Member.new(member,this).then(_=>this.member=_);
|
||||||
|
}
|
||||||
|
|
||||||
for(const thing of json.channels){
|
for(const thing of json.channels){
|
||||||
const temp=new Channel(thing,this);
|
const temp=new Channel(thing,this);
|
||||||
this.channels.push(temp);
|
this.channels.push(temp);
|
||||||
|
|
|
@ -167,7 +167,7 @@ class Localuser{
|
||||||
if(temp.op===0&&temp.t==="READY"){
|
if(temp.op===0&&temp.t==="READY"){
|
||||||
returny();
|
returny();
|
||||||
}
|
}
|
||||||
this.handleEvent(temp);
|
await this.handleEvent(temp);
|
||||||
}catch{}
|
}catch{}
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
@ -205,7 +205,7 @@ class Localuser{
|
||||||
if(temp.op===0&&temp.t==="READY"){
|
if(temp.op===0&&temp.t==="READY"){
|
||||||
returny();
|
returny();
|
||||||
}
|
}
|
||||||
this.handleEvent(temp);
|
await this.handleEvent(temp);
|
||||||
}catch(e){
|
}catch(e){
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}finally{
|
}finally{
|
||||||
|
@ -247,7 +247,7 @@ class Localuser{
|
||||||
await promise;
|
await promise;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
handleEvent(temp){
|
async handleEvent(temp){
|
||||||
console.debug(temp);
|
console.debug(temp);
|
||||||
if (temp.s) this.lastSequence=temp.s;
|
if (temp.s) this.lastSequence=temp.s;
|
||||||
if(temp.op==0){
|
if(temp.op==0){
|
||||||
|
@ -320,7 +320,7 @@ class Localuser{
|
||||||
const guild=SnowFlake.getSnowFlakeFromID(temp.d.guild_id,Guild).getObject();
|
const guild=SnowFlake.getSnowFlakeFromID(temp.d.guild_id,Guild).getObject();
|
||||||
let thing:Member|{id:string};
|
let thing:Member|{id:string};
|
||||||
if(temp.d.member){
|
if(temp.d.member){
|
||||||
thing=new Member(temp.d.member,guild);
|
thing=await Member.new(temp.d.member,guild);
|
||||||
}else{
|
}else{
|
||||||
thing={id:temp.d.user_id}
|
thing={id:temp.d.user_id}
|
||||||
}
|
}
|
||||||
|
@ -1065,8 +1065,6 @@ class Localuser{
|
||||||
//---------- resolving members code -----------
|
//---------- resolving members code -----------
|
||||||
waitingmembers:Map<string,Map<string,(returns:memberjson|undefined)=>void>>=new Map();
|
waitingmembers:Map<string,Map<string,(returns:memberjson|undefined)=>void>>=new Map();
|
||||||
async resolvemember(id:string,guildid:string):Promise<memberjson|undefined>{
|
async resolvemember(id:string,guildid:string):Promise<memberjson|undefined>{
|
||||||
console.warn("this function may or may not work on any instance, use at your own risk");
|
|
||||||
//throw new Error("Not implemented on the server side and not fully implemented, do not use");
|
|
||||||
if(!this.waitingmembers.has(guildid)){
|
if(!this.waitingmembers.has(guildid)){
|
||||||
this.waitingmembers.set(guildid,new Map());
|
this.waitingmembers.set(guildid,new Map());
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,8 +9,7 @@ class Member{
|
||||||
static already={};
|
static already={};
|
||||||
owner:Guild;
|
owner:Guild;
|
||||||
user:User;
|
user:User;
|
||||||
roles:Role[];
|
roles:Role[]=[];
|
||||||
error:boolean;
|
|
||||||
id:string;
|
id:string;
|
||||||
static contextmenu:Contextmenu=new Contextmenu("User Menu");
|
static contextmenu:Contextmenu=new Contextmenu("User Menu");
|
||||||
static setUpContextMenu(){
|
static setUpContextMenu(){
|
||||||
|
@ -25,39 +24,31 @@ class Member{
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
constructor(memberjson:memberjson|User|{guild_member:memberjson,user:userjson},owner:Guild,error=false){
|
private constructor(memberjson:memberjson,owner:Guild){
|
||||||
this.error=error;
|
if(User.userids[memberjson.id]){
|
||||||
this.owner=owner;
|
this.user=User.userids[memberjson.id];
|
||||||
let membery=memberjson;
|
}else{
|
||||||
this.roles=[];
|
this.user=new User(memberjson.user,owner.localuser);
|
||||||
if(!error){
|
|
||||||
if(memberjson["guild_member"]){
|
|
||||||
memberjson=memberjson as {guild_member:memberjson,user:userjson};
|
|
||||||
membery=memberjson.guild_member;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
membery=membery as User|memberjson;
|
this.owner=owner;
|
||||||
for(const thing of Object.keys(membery)){
|
for(const thing of Object.keys(memberjson)){
|
||||||
if(thing==="guild"){continue}
|
if(thing==="guild"){continue}
|
||||||
if(thing==="owner"){continue}
|
if(thing==="owner"){continue}
|
||||||
if(thing==="roles"){
|
if(thing==="roles"){
|
||||||
for(const strrole of membery["roles"]){
|
for(const strrole of memberjson["roles"]){
|
||||||
const role=SnowFlake.getSnowFlakeFromID(strrole,Role).getObject();
|
const role=SnowFlake.getSnowFlakeFromID(strrole,Role).getObject();
|
||||||
this.roles.push(role);
|
this.roles.push(role);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
this[thing]=membery[thing];
|
this[thing]=memberjson[thing];
|
||||||
}
|
}
|
||||||
if(error){
|
if(SnowFlake.getSnowFlakeFromID(this?.id,User)){
|
||||||
this.user=memberjson as User;
|
this.user=SnowFlake.getSnowFlakeFromID(this.id,User).getObject();
|
||||||
}else{
|
return;
|
||||||
if(SnowFlake.getSnowFlakeFromID(this?.id,User)){
|
|
||||||
this.user=SnowFlake.getSnowFlakeFromID(this.id,User).getObject();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.user=new User((membery as memberjson).user,owner.localuser);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
get guild(){
|
get guild(){
|
||||||
return this.owner;
|
return this.owner;
|
||||||
|
@ -68,47 +59,53 @@ class Member{
|
||||||
get info(){
|
get info(){
|
||||||
return this.owner.info;
|
return this.owner.info;
|
||||||
}
|
}
|
||||||
static async resolve(unkown:User|memberjson|string,guild:Guild):Promise<Member>{
|
static async new(memberjson:memberjson,owner:Guild):Promise<Member>{
|
||||||
if(!(guild instanceof Guild)){
|
const user=new User(memberjson.user,owner.localuser);
|
||||||
console.error(guild)
|
if(user.members.has(owner)){
|
||||||
}
|
let memb=user.members.get(owner)
|
||||||
let user:User;
|
if(memb===undefined){
|
||||||
let id:SnowFlake<User>;
|
memb=new Member(memberjson,owner);
|
||||||
if(unkown instanceof User){
|
user.members.set(owner,memb);
|
||||||
user=unkown as User;
|
return memb
|
||||||
id=user.snowflake;
|
}else if(memb instanceof Promise){
|
||||||
}else if(typeof unkown===typeof ""){
|
return await memb;//I should do something else, though for now this is "good enough"
|
||||||
id=new SnowFlake(unkown as string,undefined);
|
}else{
|
||||||
}else{
|
return memb;
|
||||||
return new Member(unkown as User|memberjson,guild);
|
|
||||||
}
|
|
||||||
if(guild.id==="@me"){return null}
|
|
||||||
if(!Member.already[guild.id]){
|
|
||||||
Member.already[guild.id]={};
|
|
||||||
}else if(Member.already[guild.id][id]){
|
|
||||||
const memb=Member.already[guild.id][id]
|
|
||||||
if(memb instanceof Promise){
|
|
||||||
return await memb;
|
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
const memb=new Member(memberjson,owner);
|
||||||
|
user.members.set(owner,memb);
|
||||||
return memb;
|
return memb;
|
||||||
}
|
}
|
||||||
guild.localuser.resolvemember(id.id,guild.id);
|
}
|
||||||
const prom1= fetch(guild.info.api.toString()+"/users/"+id+"/profile?with_mutual_guilds=true&with_mutual_friends_count=true&guild_id="+guild.snowflake,{headers:guild.headers})
|
static async resolveMember(user:User,guild:Guild):Promise<Member|undefined>{
|
||||||
prom1.catch(_=>{console.log(_)})
|
const maybe=user.members.get(guild);
|
||||||
const promoise=prom1.then(_=>_.json()).then(json=>{
|
if(!user.members.has(guild)){
|
||||||
const memb=new Member(json,guild);
|
const membpromise=guild.localuser.resolvemember(user.id,guild.id);
|
||||||
Member.already[guild.id][id]=memb;
|
let res:Function;
|
||||||
return memb
|
const promise=new Promise<Member|undefined>(r=>{res=r})
|
||||||
})
|
user.members.set(guild,promise);
|
||||||
Member.already[guild.id][id]=promoise;
|
const membjson=await membpromise;
|
||||||
try{
|
if(membjson===undefined){
|
||||||
return await promoise
|
res(undefined);
|
||||||
}catch(_){
|
return undefined;
|
||||||
|
}else{
|
||||||
const memb=new Member(user,guild,true);
|
const member=new Member(membjson,guild);
|
||||||
Member.already[guild.id][id]=memb;
|
res(member);
|
||||||
return memb;
|
return member;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if(maybe instanceof Promise){
|
||||||
|
return await maybe;
|
||||||
|
}else{
|
||||||
|
return maybe
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @todo
|
||||||
|
*/
|
||||||
|
highInfo(){
|
||||||
|
fetch(this.info.api+"/users/"+this.id+"/profile?with_mutual_guilds=true&with_mutual_friends_count=true&guild_id="+this.guild.id,{headers:this.guild.headers})
|
||||||
}
|
}
|
||||||
hasRole(ID:string){
|
hasRole(ID:string){
|
||||||
console.log(this.roles,ID);
|
console.log(this.roles,ID);
|
||||||
|
@ -139,13 +136,11 @@ class Member{
|
||||||
bind(html:HTMLElement){
|
bind(html:HTMLElement){
|
||||||
if(html.tagName==="SPAN"){
|
if(html.tagName==="SPAN"){
|
||||||
if(!this) {return};
|
if(!this) {return};
|
||||||
|
/*
|
||||||
if(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();
|
html.style.color=this.getColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ class Message{
|
||||||
this.snowflake=new SnowFlake(messagejson.id,this);
|
this.snowflake=new SnowFlake(messagejson.id,this);
|
||||||
continue;
|
continue;
|
||||||
}else if(thing==="member"){
|
}else if(thing==="member"){
|
||||||
this.member=new Member(messagejson.member,this.guild);
|
Member.new(messagejson.member,this.guild).then(_=>{this.member=_});
|
||||||
continue;
|
continue;
|
||||||
}else if(thing ==="embeds"){
|
}else if(thing ==="embeds"){
|
||||||
this.embeds=[];
|
this.embeds=[];
|
||||||
|
|
|
@ -25,6 +25,7 @@ class User{
|
||||||
premium_type: number;
|
premium_type: number;
|
||||||
theme_colors: string;
|
theme_colors: string;
|
||||||
badge_ids: string;
|
badge_ids: string;
|
||||||
|
members: WeakMap<Guild, Member|undefined|Promise<Member|undefined>>=new WeakMap();
|
||||||
clone(){
|
clone(){
|
||||||
return new User({
|
return new User({
|
||||||
username:this.username,
|
username:this.username,
|
||||||
|
@ -98,7 +99,7 @@ class User{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async resolvemember(guild:Guild){
|
async resolvemember(guild:Guild){
|
||||||
return await Member.resolve(this,guild);
|
return await Member.resolveMember(this,guild);
|
||||||
}
|
}
|
||||||
buildpfp(){
|
buildpfp(){
|
||||||
const pfp=document.createElement('img');
|
const pfp=document.createElement('img');
|
||||||
|
@ -115,7 +116,14 @@ class User{
|
||||||
}
|
}
|
||||||
bind(html:HTMLElement,guild:Guild=null){
|
bind(html:HTMLElement,guild:Guild=null){
|
||||||
if(guild&&guild.id!=="@me"){
|
if(guild&&guild.id!=="@me"){
|
||||||
Member.resolve(this,guild).then(_=>{
|
Member.resolveMember(this,guild).then(_=>{
|
||||||
|
if(_===undefined){
|
||||||
|
const error=document.createElement("span");
|
||||||
|
error.textContent="!";
|
||||||
|
error.classList.add("membererror");
|
||||||
|
html.after(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
_.bind(html);
|
_.bind(html);
|
||||||
}).catch(_=>{
|
}).catch(_=>{
|
||||||
console.log(_)
|
console.log(_)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue