diff --git a/packages/rocketchat-lib/server/functions/sendMessage.js b/packages/rocketchat-lib/server/functions/sendMessage.js index b6ef9999618..53d7338ca0e 100644 --- a/packages/rocketchat-lib/server/functions/sendMessage.js +++ b/packages/rocketchat-lib/server/functions/sendMessage.js @@ -118,7 +118,7 @@ RocketChat.sendMessage = function(user, message, room, upsert = false) { if (message && Apps && Apps.isLoaded()) { const prevent = Promise.await(Apps.getBridges().getListenerBridge().messageEvent('IPreMessageSentPrevent', message)); if (prevent) { - throw new Meteor.Error('error-app-prevented-sending', 'A Rocket.Chat App prevented the messaging sending.'); + throw new Meteor.Error('error-app-prevented-sending', 'A Rocket.Chat App prevented the message sending.'); } let result; diff --git a/packages/rocketchat-lib/server/functions/updateMessage.js b/packages/rocketchat-lib/server/functions/updateMessage.js index b5d74c8fa2f..f3243985838 100644 --- a/packages/rocketchat-lib/server/functions/updateMessage.js +++ b/packages/rocketchat-lib/server/functions/updateMessage.js @@ -1,4 +1,20 @@ RocketChat.updateMessage = function(message, user) { + // For the Rocket.Chat Apps :) + if (message && Apps && Apps.isLoaded()) { + const prevent = Promise.await(Apps.getBridges().getListenerBridge().messageEvent('IPreMessageUpdatedPrevent', message)); + if (prevent) { + throw new Meteor.Error('error-app-prevented-updating', 'A Rocket.Chat App prevented the message updating.'); + } + + let result; + result = Promise.await(Apps.getBridges().getListenerBridge().messageEvent('IPreMessageUpdatedExtend', message)); + result = Promise.await(Apps.getBridges().getListenerBridge().messageEvent('IPreMessageUpdatedModify', result)); + + if (typeof result === 'object') { + message = Object.assign(message, result); + } + } + // If we keep history of edits, insert a new message to store history information if (RocketChat.settings.get('Message_KeepHistory')) { RocketChat.models.Messages.cloneAndSaveAsHistoryById(message._id); @@ -22,6 +38,12 @@ RocketChat.updateMessage = function(message, user) { const room = RocketChat.models.Rooms.findOneById(message.rid); + if (Apps && Apps.isLoaded()) { + // This returns a promise, but it won't mutate anything about the message + // so, we don't really care if it is successful or fails + Apps.getBridges().getListenerBridge().messageEvent('IPostMessageUpdated', message); + } + Meteor.defer(function() { RocketChat.callbacks.run('afterSaveMessage', RocketChat.models.Messages.findOneById(tempid), room, user._id); });