From 3d921cbcece6c29736fe626f2ad1ae2cf4b0f26d Mon Sep 17 00:00:00 2001 From: MathMan05 Date: Tue, 3 Feb 2026 15:54:28 -0600 Subject: [PATCH] send message to join thread --- .../channels/#channel_id/messages/index.ts | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/api/routes/channels/#channel_id/messages/index.ts b/src/api/routes/channels/#channel_id/messages/index.ts index 7f8b4b955..a5913e52c 100644 --- a/src/api/routes/channels/#channel_id/messages/index.ts +++ b/src/api/routes/channels/#channel_id/messages/index.ts @@ -42,6 +42,10 @@ import { uploadFile, User, Recipient, + ThreadMember, + ThreadMemberFlags, + ThreadMembersUpdateEvent, + ThreadCreateEvent, } from "@spacebar/util"; import { Request, Response, Router } from "express"; import { HTTPError } from "lambert-server"; @@ -315,6 +319,7 @@ router.post( }, route({ requestBody: "MessageCreateSchema", + permission: "VIEW_CHANNEL", right: "SEND_MESSAGES", responses: { 200: { @@ -338,6 +343,43 @@ router.post( }); if (channel.isThread()) { req.permission!.hasThrow("SEND_MESSAGES_IN_THREADS"); + if (channel.recipients && !channel.recipients.find(({ id }) => id === req.user_id)) { + const member = await Member.findOneOrFail({ where: { id: req.user_id, guild_id: channel.guild_id! } }); + + if (!(await ThreadMember.existsBy({ member_idx: member.index, id: channel_id }))) { + const threadMember = ThreadMember.create({ + member_idx: member.index, + id: channel_id, + join_timestamp: new Date(), + muted: false, + flags: ThreadMemberFlags.ALL_MESSAGES, + }); + await threadMember.save(); + + // increment member count + if (channel.member_count !== null && channel.member_count !== undefined) { + channel.member_count++; + await channel.save(); + } + + await emitEvent({ + event: "THREAD_MEMBERS_UPDATE", + data: { + guild_id: channel.guild_id!, + id: channel.id, + member_count: channel.member_count, + added_members: [{ user_id: req.user_id, ...threadMember.toJSON() }], + }, + channel_id: channel.id, + } as ThreadMembersUpdateEvent); + + await emitEvent({ + event: "THREAD_CREATE", + data: { ...channel.toJSON(), newly_created: false }, + user_id: req.user_id, + } as ThreadCreateEvent); + } + } } else { req.permission!.hasThrow("SEND_MESSAGES"); }