mirror of
https://github.com/spacebarchat/server.git
synced 2026-08-28 09:34:07 +00:00
some thread fixes
This commit is contained in:
@@ -81,6 +81,7 @@ router.post(
|
||||
}
|
||||
|
||||
const member = await Member.findOneOrFail({ where: { id: user_id, guild_id: thread.guild_id! } });
|
||||
|
||||
if (await ThreadMember.existsBy({ member_idx: member.index, id: channel_id })) {
|
||||
return res.status(204).send();
|
||||
}
|
||||
@@ -100,7 +101,7 @@ router.post(
|
||||
guild_id: thread.guild_id!,
|
||||
id: thread.id,
|
||||
member_count: thread.member_count,
|
||||
added_member_ids: [user_id],
|
||||
added_members: [{ user_id: user_id, ...threadMember.toJSON() }],
|
||||
},
|
||||
channel_id: thread.id,
|
||||
} as ThreadMembersUpdateEvent);
|
||||
|
||||
@@ -47,6 +47,7 @@ import {
|
||||
SessionsReplace,
|
||||
Sticker,
|
||||
Stopwatch,
|
||||
ThreadMember,
|
||||
timeFunction,
|
||||
timePromise,
|
||||
TraceNode,
|
||||
@@ -206,7 +207,7 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
||||
where: { id: this.user_id },
|
||||
select: {
|
||||
// We only want some member props
|
||||
...Object.fromEntries(MemberPrivateProjection.map((x) => [x, true])),
|
||||
...Object.fromEntries(["index", ...MemberPrivateProjection].map((x) => [x, true])),
|
||||
settings: true, // guild settings
|
||||
roles: { id: true }, // the full role is fetched from the `guild` relation
|
||||
guild: { id: true },
|
||||
@@ -298,7 +299,7 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
||||
Channel.find({
|
||||
where: {
|
||||
guild_id: In(guildIds),
|
||||
type: Not(ChannelType.GUILD_PUBLIC_THREAD),
|
||||
type: Not(In([ChannelType.GUILD_PUBLIC_THREAD, ChannelType.GUILD_PRIVATE_THREAD, ChannelType.GUILD_NEWS_THREAD])),
|
||||
},
|
||||
order: { guild_id: "ASC" },
|
||||
}),
|
||||
@@ -412,9 +413,17 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
||||
];
|
||||
});
|
||||
const mergedMembersTime = taskSw.getElapsedAndReset();
|
||||
const member_idx = members.map(({ index }) => index);
|
||||
|
||||
const threadMembers = await ThreadMember.find({
|
||||
where: { member_idx: In(member_idx) },
|
||||
relations: { channel: { recipients: { user: true } } },
|
||||
});
|
||||
const threadMemberTime = taskSw.getElapsedAndReset();
|
||||
|
||||
// Populated with guilds 'unavailable' currently
|
||||
// Just for bots
|
||||
|
||||
const pending_guilds: Guild[] = [];
|
||||
|
||||
// Generate guilds list ( make them unavailable if user is bot )
|
||||
@@ -445,12 +454,23 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
||||
pending_guilds.push(member.guild);
|
||||
return { id: member.guild.id, unavailable: true };
|
||||
}
|
||||
const threads = threadMembers
|
||||
.filter(({ channel }) => channel.guild_id === member.guild.id)
|
||||
.map((_) => {
|
||||
return {
|
||||
member: {
|
||||
..._.toJSON(),
|
||||
channel: undefined,
|
||||
},
|
||||
..._.channel.toJSON(),
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
...member.guild.toJSON(),
|
||||
joined_at: member.joined_at,
|
||||
|
||||
threads: member.guild.channels.filter((x) => x.isThread()),
|
||||
threads,
|
||||
};
|
||||
});
|
||||
const generateGuildsListTime = taskSw.getElapsedAndReset();
|
||||
@@ -665,6 +685,7 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
||||
emitPresenceUpdateTime,
|
||||
remapReadStateIdsTime,
|
||||
buildReadyEventDataTime,
|
||||
threadMemberTime,
|
||||
};
|
||||
for (const [key, value] of Object.entries(times)) {
|
||||
if (value) {
|
||||
|
||||
@@ -676,7 +676,7 @@ export class Channel extends BaseClass {
|
||||
user_limit: this.user_limit || undefined,
|
||||
rate_limit_per_user: this.rate_limit_per_user || undefined,
|
||||
owner_id: this.owner_id || undefined,
|
||||
...(this.type === ChannelType.GUILD_PUBLIC_THREAD && this.recipients ? { member_ids_preview: this.recipients.map((_) => _.user.id) } : {}),
|
||||
...(this.isThread() && this.recipients ? { member_ids_preview: this.recipients.map((_) => _.user.id) } : {}),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -645,7 +645,7 @@ export interface ThreadMembersUpdateEvent extends Event {
|
||||
id: string;
|
||||
guild_id: string;
|
||||
member_count: number;
|
||||
added_members?: ThreadMember[];
|
||||
added_members?: (ThreadMember & { user_id: string })[];
|
||||
removed_member_ids?: string[];
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user