From d42519e330eb5946f0d240442c6ec8f092abae73 Mon Sep 17 00:00:00 2001 From: MathMan05 Date: Wed, 19 Nov 2025 10:58:27 -0600 Subject: [PATCH 1/3] fix mentions issues --- src/api/util/handlers/Message.ts | 39 +++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/src/api/util/handlers/Message.ts b/src/api/util/handlers/Message.ts index 70bbc479..433d9468 100644 --- a/src/api/util/handlers/Message.ts +++ b/src/api/util/handlers/Message.ts @@ -324,8 +324,31 @@ export async function handleMessage(opts: MessageOptions): Promise { ]; message.mention_everyone = mention_everyone; - - if (mention_everyone || channel.type === ChannelType.DM || channel.type === ChannelType.GROUP_DM) { + async function fillInMissingIDs(ids: string[]) { + const states = await ReadState.findBy({ + user_id: Or(...ids.map((id) => Equal(id))), + channel_id: channel.id, + }); + const users = new Set(ids); + states.forEach((state) => users.delete(state.user_id)); + if (!users.size) { + return; + } + return Promise.all( + [...users].map((user_id) => { + return ReadState.create({ user_id, channel_id: channel.id }).save(); + }), + ); + } + if (!!message.content?.match(EVERYONE_MENTION) || channel.type === ChannelType.DM || channel.type === ChannelType.GROUP_DM) { + if (channel.type === ChannelType.DM || channel.type === ChannelType.GROUP_DM) { + if (channel.recipients) { + await fillInMissingIDs(channel.recipients.map(({ user_id }) => user_id)); + } + } else { + console.log(channel.guild_id); + await fillInMissingIDs((await Member.find({ where: { guild_id: channel.guild_id } })).map(({ id }) => id)); + } const repository = ReadState.getRepository(); const condition = { channel_id: channel.id }; repository.update({ ...condition, mention_count: IsNull() }, { mention_count: 0 }); @@ -344,11 +367,15 @@ export async function handleMessage(opts: MessageOptions): Promise { ).map((member) => member.id), ...message.mentions.map((user) => user.id), ]); + if (users.size) { + const repository = ReadState.getRepository(); + const condition = { user_id: Or(...[...users].map((id) => Equal(id))), channel_id: channel.id }; - const repository = ReadState.getRepository(); - const condition = { user_id: Or(...[...users].map((id) => Equal(id))), channel_id: channel.id }; - repository.update({ ...condition, mention_count: IsNull() }, { mention_count: 0 }); - repository.increment(condition, "mention_count", 1); + await fillInMissingIDs([...users]); + + await repository.update({ ...condition, mention_count: IsNull() }, { mention_count: 0 }); + await repository.increment(condition, "mention_count", 1); + } } // TODO: check and put it all in the body From 76263bca68be2b5f08d28bb07b845a2a41870231 Mon Sep 17 00:00:00 2001 From: MathMan05 Date: Wed, 19 Nov 2025 11:08:56 -0600 Subject: [PATCH 2/3] add missing awaits --- src/api/util/handlers/Message.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/util/handlers/Message.ts b/src/api/util/handlers/Message.ts index 433d9468..47623298 100644 --- a/src/api/util/handlers/Message.ts +++ b/src/api/util/handlers/Message.ts @@ -351,8 +351,8 @@ export async function handleMessage(opts: MessageOptions): Promise { } const repository = ReadState.getRepository(); const condition = { channel_id: channel.id }; - repository.update({ ...condition, mention_count: IsNull() }, { mention_count: 0 }); - repository.increment(condition, "mention_count", 1); + await repository.update({ ...condition, mention_count: IsNull() }, { mention_count: 0 }); + await repository.increment(condition, "mention_count", 1); } else { const users = new Set([ ...(message.mention_roles.length From a5b51295425c6da9cd19c5489752dbcb7648bda0 Mon Sep 17 00:00:00 2001 From: MathMan05 Date: Wed, 19 Nov 2025 11:42:08 -0600 Subject: [PATCH 3/3] fixes --- src/api/util/handlers/Message.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/api/util/handlers/Message.ts b/src/api/util/handlers/Message.ts index 47623298..6ba66985 100644 --- a/src/api/util/handlers/Message.ts +++ b/src/api/util/handlers/Message.ts @@ -49,6 +49,7 @@ import fetch from "node-fetch-commonjs"; import { CloudAttachment } from "../../../util/entities/CloudAttachment"; import { ReadState } from "../../../util/entities/ReadState"; import { Member } from "../../../util/entities/Member"; +import { Session } from "../../../util/entities/Session"; import { ChannelType } from "@spacebar/schemas"; import { Embed, MessageCreateAttachment, MessageCreateCloudAttachment, MessageCreateSchema, MessageType, Reaction } from "@spacebar/schemas"; import { EmbedType } from "../../../schemas/api/messages/Embeds"; @@ -340,7 +341,7 @@ export async function handleMessage(opts: MessageOptions): Promise { }), ); } - if (!!message.content?.match(EVERYONE_MENTION) || channel.type === ChannelType.DM || channel.type === ChannelType.GROUP_DM) { + if ((!!message.content?.match(EVERYONE_MENTION) && permission?.has("MENTION_EVERYONE")) || channel.type === ChannelType.DM || channel.type === ChannelType.GROUP_DM) { if (channel.type === ChannelType.DM || channel.type === ChannelType.GROUP_DM) { if (channel.recipients) { await fillInMissingIDs(channel.recipients.map(({ user_id }) => user_id)); @@ -367,6 +368,10 @@ export async function handleMessage(opts: MessageOptions): Promise { ).map((member) => member.id), ...message.mentions.map((user) => user.id), ]); + if (!!message.content?.match(HERE_MENTION) && permission?.has("MENTION_EVERYONE")) { + const ids = (await Member.find({ where: { guild_id: channel.guild_id } })).map(({ id }) => id); + (await Session.find({ where: { user_id: Or(...ids.map((id) => Equal(id))) } })).forEach(({ user_id }) => users.add(user_id)); + } if (users.size) { const repository = ReadState.getRepository(); const condition = { user_id: Or(...[...users].map((id) => Equal(id))), channel_id: channel.id };