|
|
|
|
@ -68,26 +68,28 @@ export async function deleteMessage(message: IMessage, user: IUser): Promise<voi |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (showDeletedStatus) { |
|
|
|
|
// TODO is there a better way to tell TS "IUser[username]" is not undefined?
|
|
|
|
|
await Messages.setAsDeletedByIdAndUser(message._id, user as Required<Pick<IUser, '_id' | 'username' | 'name'>>); |
|
|
|
|
} else { |
|
|
|
|
void api.broadcast('notify.deleteMessage', message.rid, { _id: message._id }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const room = await Rooms.findOneById(message.rid, { projection: { lastMessage: 1, prid: 1, mid: 1, federated: 1 } }); |
|
|
|
|
await callbacks.run('afterDeleteMessage', deletedMsg, room); |
|
|
|
|
|
|
|
|
|
// update last message
|
|
|
|
|
if (settings.get('Store_Last_Message')) { |
|
|
|
|
if (!room?.lastMessage || room.lastMessage._id === message._id) { |
|
|
|
|
await Rooms.resetLastMessageById(message.rid, deletedMsg); |
|
|
|
|
const lastMessageNotDeleted = await Messages.getLastVisibleMessageSentWithNoTypeByRoomId(message.rid); |
|
|
|
|
await Rooms.resetLastMessageById(message.rid, lastMessageNotDeleted); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
await callbacks.run('afterDeleteMessage', deletedMsg, room); |
|
|
|
|
|
|
|
|
|
// decrease message count
|
|
|
|
|
await Rooms.decreaseMessageCountById(message.rid, 1); |
|
|
|
|
|
|
|
|
|
if (showDeletedStatus) { |
|
|
|
|
// TODO is there a better way to tell TS "IUser[username]" is not undefined?
|
|
|
|
|
await Messages.setAsDeletedByIdAndUser(message._id, user as Required<Pick<IUser, '_id' | 'username' | 'name'>>); |
|
|
|
|
} else { |
|
|
|
|
void api.broadcast('notify.deleteMessage', message.rid, { _id: message._id }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (bridges) { |
|
|
|
|
void bridges.getListenerBridge().messageEvent('IPostMessageDeleted', deletedMsg, user); |
|
|
|
|
} |
|
|
|
|
|