summary refs log tree commit diff
path: root/api/src/util/Message.ts
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/util/Message.ts')
-rw-r--r--api/src/util/Message.ts27
1 files changed, 12 insertions, 15 deletions
diff --git a/api/src/util/Message.ts b/api/src/util/Message.ts

index 8a1e959e..5561904b 100644 --- a/api/src/util/Message.ts +++ b/api/src/util/Message.ts
@@ -1,5 +1,5 @@ import { - ChannelModel, + Channel, Embed, emitEvent, Message, @@ -7,13 +7,11 @@ import { MessageUpdateEvent, getPermission, CHANNEL_MENTION, - toObject, - MessageModel, Snowflake, PublicMemberProjection, USER_MENTION, ROLE_MENTION, - RoleModel, + Role, EVERYONE_MENTION, HERE_MENTION } from "@fosscord/util"; @@ -37,13 +35,11 @@ const DEFAULT_FETCH_OPTIONS: any = { method: "GET" }; -export async function handleMessage(opts: Partial<Message>) { - const channel = await ChannelModel.findOne( +export async function handleMessage(opts: Partial<Message>): Promise<Message> { + const channel = await Channel.findOneOrFail( { id: opts.channel_id }, - { guild_id: true, type: true, permission_overwrites: true, recipient_ids: true, owner_id: true } - ) - .lean() // lean is needed, because we don't want to populate .recipients that also auto deletes .recipient_ids - .exec(); + { select: ["guild_id", "type", "permission_overwrites", "recipient_ids", "owner_id"] } + ); // lean is needed, because we don't want to populate .recipients that also auto deletes .recipient_ids if (!channel || !opts.channel_id) throw new HTTPError("Channel not found", 404); // TODO: are tts messages allowed in dm channels? should permission be checked? @@ -83,7 +79,7 @@ export async function handleMessage(opts: Partial<Message>) { await Promise.all( Array.from(content.matchAll(ROLE_MENTION)).map(async ([_, mention]) => { - const role = await RoleModel.findOne({ id: mention, guild_id: channel.guild_id }).exec(); + const role = await Role.findOneOrFail({ id: mention, guild_id: channel.guild_id }); if (role.mentionable || permission.has("MANAGE_ROLES")) { mention_role_ids.push(mention); } @@ -160,16 +156,17 @@ export async function postHandleMessage(message: Message) { channel_id: message.channel_id, data } as MessageUpdateEvent), - MessageModel.updateOne({ id: message.id, channel_id: message.channel_id }, data).exec() + Message.update({ id: message.id, channel_id: message.channel_id }, data) ]); } export async function sendMessage(opts: Partial<Message>) { const message = await handleMessage({ ...opts, id: Snowflake.generate(), timestamp: new Date() }); - const data = toObject( - await new MessageModel(message).populate({ path: "member", select: PublicMemberProjection }).populate("referenced_message").save() - ); + const data = await new Message(message) + .populate({ path: "member", select: PublicMemberProjection }) + .populate("referenced_message") + .save(); await emitEvent({ event: "MESSAGE_CREATE", channel_id: opts.channel_id, data } as MessageCreateEvent);