jank-client-fork/.dist/member.js
MathMan05 ac939e5fb6 Correcting names, and deleting message
There is a known regresion for the MESSAGE_CREATE event while it's not on screen, though I have not been able to replicate it while I'm looking for it. If you see this bug, please let me know the conditions it happens under
2024-06-28 11:13:26 -05:00

119 lines
3.4 KiB
JavaScript

import { User } from "./user.js";
import { Guild } from "./guild.js";
class Member {
static already = {};
owner;
user;
roles;
error;
constructor(memberjson, owner, error = false) {
this.error = error;
this.owner = owner;
let membery = memberjson;
this.roles = [];
if (!error) {
if (memberjson.guild_member) {
membery = memberjson.guild_member;
this.user = memberjson.user;
}
}
for (const thing of Object.keys(membery)) {
if (thing === "guild") {
continue;
}
if (thing === "owner") {
continue;
}
if (thing === "roles") {
for (const strrole of membery["roles"]) {
const role = this.guild.getRole(strrole);
this.roles.push(role);
}
continue;
}
this[thing] = membery[thing];
}
if (error) {
this.user = memberjson;
}
else {
this.user = new User(this.user, owner.localuser);
}
}
get guild() {
return this.owner;
}
get localuser() {
return this.guild.localuser;
}
get info() {
return this.owner.info;
}
static async resolve(unkown, guild) {
if (!(guild instanceof Guild)) {
console.error(guild);
}
let user;
if (unkown instanceof User) {
user = unkown;
}
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];
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 memb = new Member(json, guild);
Member.already[guild.id][user.id] = memb;
console.log("resolved");
return memb;
});
Member.already[guild.id][user.id] = promoise;
try {
return await promoise;
}
catch (_) {
const memb = new Member(user, guild, true);
Member.already[guild.id][user.id] = memb;
return memb;
}
}
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.getPermision("ADMINISTRATOR")) {
return true;
}
}
return this.guild.properties.owner_id === this.user.id;
}
}
export { Member };