jank-client-fork/.dist/member.js
2024-08-21 11:37:26 -05:00

165 lines
4.8 KiB
JavaScript

import { User } from "./user.js";
import { Role } from "./role.js";
import { SnowFlake } from "./snowflake.js";
class Member {
static already = {};
owner;
user;
roles = [];
id;
nick;
constructor(memberjson, owner) {
if (User.userids[memberjson.id]) {
this.user = User.userids[memberjson.id];
}
else if (memberjson.user) {
this.user = new User(memberjson.user, owner.localuser);
}
else {
throw new Error("Missing user object of this member");
}
this.owner = owner;
for (const thing of Object.keys(memberjson)) {
if (thing === "guild") {
continue;
}
if (thing === "owner") {
continue;
}
if (thing === "roles") {
for (const strrole of memberjson["roles"]) {
const role = SnowFlake.getSnowFlakeFromID(strrole, Role).getObject();
this.roles.push(role);
}
continue;
}
this[thing] = memberjson[thing];
}
if (SnowFlake.getSnowFlakeFromID(this?.id, User)) {
this.user = SnowFlake.getSnowFlakeFromID(this.id, User).getObject();
return;
}
}
get guild() {
return this.owner;
}
get localuser() {
return this.guild.localuser;
}
get info() {
return this.owner.info;
}
static async new(memberjson, owner) {
let user;
if (User.userids[memberjson.id]) {
user = User.userids[memberjson.id];
}
else if (memberjson.user) {
user = new User(memberjson.user, owner.localuser);
}
else {
throw new Error("missing user object of this member");
}
if (user.members.has(owner)) {
let memb = user.members.get(owner);
if (memb === undefined) {
memb = new Member(memberjson, owner);
user.members.set(owner, memb);
return memb;
}
else if (memb instanceof Promise) {
return await memb; //I should do something else, though for now this is "good enough"
}
else {
return memb;
}
}
else {
const memb = new Member(memberjson, owner);
user.members.set(owner, memb);
return memb;
}
}
static async resolveMember(user, guild) {
const maybe = user.members.get(guild);
if (!user.members.has(guild)) {
const membpromise = guild.localuser.resolvemember(user.id, guild.id);
const promise = new Promise(async (res) => {
const membjson = await membpromise;
if (membjson === undefined) {
res(undefined);
return undefined;
}
else {
const member = new Member(membjson, guild);
const map = guild.localuser.presences;
member.getPresence(map.get(member.id));
map.delete(member.id);
res(member);
return member;
}
});
user.members.set(guild, promise);
}
if (maybe instanceof Promise) {
return await maybe;
}
else {
return maybe;
}
}
getPresence(presence) {
this.user.getPresence(presence);
}
/**
* @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) {
console.log(this.roles, ID);
for (const thing of this.roles) {
if (thing.id === ID) {
return true;
}
}
return false;
}
getColor() {
for (const thing of this.roles) {
const color = thing.getColor();
if (color) {
return color;
}
}
return "";
}
isAdmin() {
for (const role of this.roles) {
if (role.permissions.getPermission("ADMINISTRATOR")) {
return true;
}
}
return this.guild.properties.owner_id === this.user.id;
}
bind(html) {
if (html.tagName === "SPAN") {
if (!this) {
return;
}
;
/*
if(this.error){
}
*/
html.style.color = this.getColor();
}
//this.profileclick(html);
}
profileclick(html) {
//to be implemented
}
}
export { Member };