Skip to content

Commit

Permalink
Merge pull request RocketChat#623 from WideChat/throw_livechat_messag…
Browse files Browse the repository at this point in the history
…e_on_kill_switch_on

Throw livechat message on kill switch on
  • Loading branch information
chadgoss authored Apr 28, 2021
2 parents 9ee882f + 67f8bad commit 91998ce
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 31 deletions.
54 changes: 28 additions & 26 deletions app/lib/server/functions/sendMessage.js
Original file line number Diff line number Diff line change
Expand Up @@ -219,34 +219,36 @@ export const sendMessage = function(user, message, room, upsert = false) {
}

message = callbacks.run('beforeSaveMessage', message, room);
if (message) {
if (message._id && upsert) {
const { _id } = message;
delete message._id;
Messages.upsert({
_id,
'u._id': message.u._id,
}, message);
message._id = _id;
} else {
const messageAlreadyExists = message._id && Messages.findOneById(message._id, { fields: { _id: 1 } });
if (messageAlreadyExists) {
return;
if (!settings.get('Livechat_kill_switch') || room.lastMessage.msg !== settings.get('Livechat_kill_switch_message')) {
if (message) {
if (message._id && upsert) {
const { _id } = message;
delete message._id;
Messages.upsert({
_id,
'u._id': message.u._id,
}, message);
message._id = _id;
} else {
const messageAlreadyExists = message._id && Messages.findOneById(message._id, { fields: { _id: 1 } });
if (messageAlreadyExists) {
return;
}
message._id = Messages.insert(message);
}
message._id = Messages.insert(message);
}

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('IPostMessageSent', message);
}
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('IPostMessageSent', message);
}

/*
Defer other updates as their return is not interesting to the user
*/
// Execute all callbacks
callbacks.runAsync('afterSaveMessage', message, room, user._id);
return message;
/*
Defer other updates as their return is not interesting to the user
*/
// Execute all callbacks
callbacks.runAsync('afterSaveMessage', message, room, user._id);
return message;
}
}
};
13 changes: 8 additions & 5 deletions app/livechat/server/hooks/leadCapture.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import { Meteor } from 'meteor/meteor';

import { callbacks } from '../../../callbacks';
import { settings } from '../../../settings';
import { LivechatVisitors } from '../../../models';
import { settings } from '../../../settings';

function validateMessage(message, room) {
// skips this callback if the message was edited
Expand Down Expand Up @@ -48,8 +46,13 @@ callbacks.add('afterSaveMessage', function(message, room) {
return message;
}, callbacks.priority.LOW, 'leadCapture');

callbacks.add('beforeSaveMessage', function() {
callbacks.add('beforeSaveMessage', function(message, room) {
if (settings.get('Livechat_kill_switch')) {
throw new Meteor.Error(settings.get('Livechat_kill_switch_message'));
if (room && room.lastMessage.msg !== settings.get('Livechat_kill_switch_message')) {
message.msg = settings.get('Livechat_kill_switch_message');
message.avatar = '';
message.u._id = room.servedBy._id;
message.u.username = room.servedBy.username;
}
}
}, callbacks.priority.LOW, 'leadCapture');
7 changes: 7 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 91998ce

Please sign in to comment.