[NEW] Apps: Add handlers for message updates (#11993)

* Add IPreMessageUpdatedPrevent, Extend & Modify

* Add IPostMessageUpdated
pull/11936/head^2
Matheus Cardoso 7 years ago committed by Diego Sampaio
parent 377402ee24
commit e09d0c01fa
  1. 2
      packages/rocketchat-lib/server/functions/sendMessage.js
  2. 22
      packages/rocketchat-lib/server/functions/updateMessage.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;

@ -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);
});

Loading…
Cancel
Save