diff --git a/app/lib/server/functions/sendMessage.js b/app/lib/server/functions/sendMessage.js index 9c2deb8ae9f3..593034e74de4 100644 --- a/app/lib/server/functions/sendMessage.js +++ b/app/lib/server/functions/sendMessage.js @@ -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; + } } }; diff --git a/app/livechat/server/hooks/leadCapture.js b/app/livechat/server/hooks/leadCapture.js index 6713fa0dd48d..c2aa193be0ab 100644 --- a/app/livechat/server/hooks/leadCapture.js +++ b/app/livechat/server/hooks/leadCapture.js @@ -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 @@ -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'); diff --git a/package-lock.json b/package-lock.json index 7a2c3b9f194f..5dd25f81aba8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5916,6 +5916,13 @@ "semver": "^5.5.0", "stack-trace": "0.0.10", "uuid": "^3.2.1" + }, + "dependencies": { + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" + } } }, "@rocket.chat/css-in-js": {