diff --git a/api/src/routes/channels/#channel_id/messages/index.ts b/api/src/routes/channels/#channel_id/messages/index.ts
index 4ec31417..296bec9a 100644
--- a/api/src/routes/channels/#channel_id/messages/index.ts
+++ b/api/src/routes/channels/#channel_id/messages/index.ts
@@ -10,7 +10,8 @@ import {
getPermission,
Message,
MessageCreateEvent,
- uploadFile
+ uploadFile,
+ Member
} from "@fosscord/util";
import { HTTPError } from "lambert-server";
import { handleMessage, postHandleMessage, route } from "@fosscord/api";
@@ -22,7 +23,7 @@ const router: Router = Router();
export default router;
-function isTextChannel(type: ChannelType): boolean {
+export function isTextChannel(type: ChannelType): boolean {
switch (type) {
case ChannelType.GUILD_STORE:
case ChannelType.GUILD_VOICE:
@@ -39,7 +40,6 @@ function isTextChannel(type: ChannelType): boolean {
return true;
}
}
-module.exports.isTextChannel = isTextChannel;
export interface MessageCreateSchema {
content?: string;
@@ -64,6 +64,7 @@ export interface MessageCreateSchema {
payload_json?: string;
file?: any;
attachments?: any[]; //TODO we should create an interface for attachments
+ sticker_ids?: string[];
}
// https://discord.com/developers/docs/resources/channel#create-message
@@ -187,33 +188,34 @@ router.post(
message = await message.save();
- await channel.assign({ last_message_id: message.id }).save();
-
if (channel.isDm()) {
const channel_dto = await DmChannelDTO.from(channel);
- for (let recipient of channel.recipients!) {
- if (recipient.closed) {
- await emitEvent({
- event: "CHANNEL_CREATE",
- data: channel_dto.excludedRecipients([recipient.user_id]),
- user_id: recipient.user_id
- });
- }
- }
-
//Only one recipients should be closed here, since in group DMs the recipient is deleted not closed
+
await Promise.all(
- channel
- .recipients!.filter((r) => r.closed)
- .map(async (r) => {
- r.closed = false;
- return await r.save();
- })
+ channel.recipients!.map((recipient) => {
+ if (recipient.closed) {
+ recipient.closed = false;
+ return Promise.all([
+ recipient.save(),
+ emitEvent({
+ event: "CHANNEL_CREATE",
+ data: channel_dto.excludedRecipients([recipient.user_id]),
+ user_id: recipient.user_id
+ })
+ ]);
+ }
+ })
);
}
- await emitEvent({ event: "MESSAGE_CREATE", channel_id: channel_id, data: message } as MessageCreateEvent);
+ await Promise.all([
+ channel.assign({ last_message_id: message.id }).save(),
+ message.guild_id ? Member.update({ id: req.user_id, guild_id: message.guild_id }, { last_message_id: message.id }) : null,
+ emitEvent({ event: "MESSAGE_CREATE", channel_id: channel_id, data: message } as MessageCreateEvent)
+ ]);
+
postHandleMessage(message).catch((e) => {}); // no await as it shouldnt block the message send function and silently catch error
return res.json(message);
|