Skip to content

Commit e66767b

Browse files
committed
make an unsafe sync and fix up joining guilds
1 parent 579e4ab commit e66767b

4 files changed

Lines changed: 52 additions & 7 deletions

File tree

src/webpage/guild.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,11 +1533,7 @@ class Guild extends SnowFlake {
15331533
}
15341534
});
15351535
} else {
1536-
Member.new(member, this).then((_) => {
1537-
if (_) {
1538-
this.member = _;
1539-
}
1540-
});
1536+
this.member = Member.newUnsafe(member, this);
15411537
}
15421538

15431539
for (const thing of json.channels) {

src/webpage/jsontypes.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,14 @@ type roleCreate = {
10101010
type wsjson =
10111011
| readySuplemental
10121012
| roleCreate
1013+
| {
1014+
op: 0;
1015+
t: "GUILD_CREATE";
1016+
d: guildjson & {
1017+
members: memberjson[];
1018+
};
1019+
s: number;
1020+
}
10131021
| {
10141022
op: 0;
10151023
d: any;
@@ -1021,7 +1029,6 @@ type wsjson =
10211029
| "CHANNEL_CREATE"
10221030
| "CHANNEL_DELETE"
10231031
| "GUILD_DELETE"
1024-
| "GUILD_CREATE"
10251032
| "MESSAGE_REACTION_REMOVE_ALL"
10261033
| "MESSAGE_REACTION_REMOVE_EMOJI"
10271034
| "THREAD_CREATE";

src/webpage/localuser.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -891,8 +891,12 @@ class Localuser {
891891
}
892892
case "GUILD_CREATE":
893893
(async () => {
894-
const guildy = new Guild(temp.d, this, this.user);
894+
const m = temp.d.members.find(({id}) => id === this.user.id);
895+
const guildy = new Guild(temp.d, this, m ?? this.user);
895896
this.guilds.set(guildy.id, guildy);
897+
for (const m of temp.d.members) {
898+
Member.newUnsafe(m, guildy);
899+
}
896900
const divy = this.makeGuildIcon(guildy);
897901
guildy.HTMLicon = divy;
898902
(document.getElementById("guildRail") as HTMLDivElement).insertBefore(

src/webpage/member.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,44 @@ class Member extends SnowFlake {
401401
get info() {
402402
return this.owner.info;
403403
}
404+
static newUnsafe(memberjson: memberjson, owner: Guild): Member {
405+
let user: User;
406+
if (owner.localuser.userMap.has(memberjson.id)) {
407+
if (memberjson.user) {
408+
new User(memberjson.user, owner.localuser);
409+
}
410+
user = owner.localuser.userMap.get(memberjson.id) as User;
411+
} else if (memberjson.user) {
412+
user = new User(memberjson.user, owner.localuser);
413+
} else {
414+
throw new Error("missing user object of this member");
415+
}
416+
if (user.members.has(owner)) {
417+
let memb = user.members.get(owner);
418+
if (memb instanceof Promise) {
419+
console.error("uh oh, that was a bad call!");
420+
//Welp, this is ignored in sync unsafe
421+
} else if (memb === undefined || memb instanceof Promise) {
422+
memb = new Member(memberjson, owner);
423+
user.members.set(owner, memb);
424+
owner.members.add(memb);
425+
user.localuser.memberListUpdate();
426+
return memb;
427+
} else {
428+
if (memberjson.presence) {
429+
memb.getPresence(memberjson.presence);
430+
}
431+
memb.update(memberjson);
432+
return memb;
433+
}
434+
}
435+
436+
const memb = new Member(memberjson, owner);
437+
user.members.set(owner, memb);
438+
owner.members.add(memb);
439+
memb.localuser.memberListUpdate();
440+
return memb;
441+
}
404442
static async new(memberjson: memberjson, owner: Guild): Promise<Member> {
405443
let user: User;
406444
if (owner.localuser.userMap.has(memberjson.id)) {

0 commit comments

Comments
 (0)