diff --git a/packages/rocketchat-lib/server/models/Messages.coffee b/packages/rocketchat-lib/server/models/Messages.coffee index d9ba0fa025e..58da31060e7 100644 --- a/packages/rocketchat-lib/server/models/Messages.coffee +++ b/packages/rocketchat-lib/server/models/Messages.coffee @@ -171,14 +171,14 @@ RocketChat.models.Messages = new class extends RocketChat.models._Base return @update query, update - setPinnedByIdAndUserId: (_id, pinnedBy, pinned=true) -> + setPinnedByIdAndUserId: (_id, pinnedBy, pinned=true, pinnedAt=0) -> query = _id: _id update = $set: pinned: pinned - pinnedAt: new Date + pinnedAt: pinnedAt || new Date pinnedBy: pinnedBy return @update query, update diff --git a/packages/rocketchat-message-pin/server/pinMessage.coffee b/packages/rocketchat-message-pin/server/pinMessage.coffee index 6d0a0c92529..8f3d513f2b5 100644 --- a/packages/rocketchat-message-pin/server/pinMessage.coffee +++ b/packages/rocketchat-message-pin/server/pinMessage.coffee @@ -1,5 +1,5 @@ Meteor.methods - pinMessage: (message, createMessagePinnedMessage = true) -> + pinMessage: (message, pinnedAt) -> if not Meteor.userId() throw new Meteor.Error('error-invalid-user', "Invalid user", { method: 'pinMessage' }) @@ -18,7 +18,7 @@ Meteor.methods me = RocketChat.models.Users.findOneById Meteor.userId() message.pinned = true - message.pinnedAt = Date.now + message.pinnedAt = pinnedAt || Date.now message.pinnedBy = _id: Meteor.userId() username: me.username @@ -27,14 +27,13 @@ Meteor.methods RocketChat.models.Messages.setPinnedByIdAndUserId message._id, message.pinnedBy, message.pinned - if createMessagePinnedMessage - RocketChat.models.Messages.createWithTypeRoomIdMessageAndUser 'message_pinned', message.rid, '', me, - attachments: [ - "text" : message.msg - "author_name" : message.u.username, - "author_icon" : getAvatarUrlFromUsername(message.u.username), - "ts" : message.ts - ] + RocketChat.models.Messages.createWithTypeRoomIdMessageAndUser 'message_pinned', message.rid, '', me, + attachments: [ + "text" : message.msg + "author_name" : message.u.username, + "author_icon" : getAvatarUrlFromUsername(message.u.username), + "ts" : message.ts + ] unpinMessage: (message) -> if not Meteor.userId() diff --git a/packages/rocketchat-slackbridge/slackbridge.js b/packages/rocketchat-slackbridge/slackbridge.js index 44321e3662e..d093c317238 100644 --- a/packages/rocketchat-slackbridge/slackbridge.js +++ b/packages/rocketchat-slackbridge/slackbridge.js @@ -254,13 +254,17 @@ class SlackBridge { if (message.subtype === 'bot_message') { user = RocketChat.models.Users.findOneById('rocket.cat', { fields: { username: 1 } }); } - logger.class.debug('Send RocketChat message', msgObj); + + if (message.pinned_to && message.pinned_to.indexOf(message.channel) !== -1) { + msgObj.pinned = true; + msgObj.pinnedAt = Date.now; + msgObj.pinnedBy = _.pick(user, '_id', 'username'); + } RocketChat.sendMessage(user, msgObj, room, true); } } saveMessage(message) { - logger.class.debug('Save message', message); let channel = message.channel ? this.findChannel(message.channel) || this.addChannel(message.channel) : null; let user = null; if (message.subtype === 'message_deleted' || message.subtype === 'message_changed') { @@ -366,18 +370,24 @@ class SlackBridge { case 'pinned_item': if (message.attachments && message.attachments[0] && message.attachments[0].text) { msgObj = { - _id: `slack-${message.attachments[0].channel_id}-${message.attachments[0].ts.replace(/\./g, '-')}`, - ts: new Date(parseInt(message.attachments[0].ts.split('.')[0]) * 1000), rid: room._id, - msg: this.convertSlackMessageToRocketChat(message.attachments[0].text), + t: 'message_pinned', + msg: '', u: { _id: user._id, username: user.username - } + }, + attachments: [{ + 'text' : this.convertSlackMessageToRocketChat(message.attachments[0].text), + 'author_name' : message.attachments[0].author_subname, + 'author_icon' : getAvatarUrlFromUsername(message.attachments[0].author_subname), + 'ts' : new Date(parseInt(message.attachments[0].ts.split('.')[0]) * 1000) + }] }; - Meteor.runAsUser(user._id, () => { - Meteor.call('pinMessage', msgObj, false); - }); + + RocketChat.models.Messages.setPinnedByIdAndUserId(`slack-${message.attachments[0].channel_id}-${message.attachments[0].ts.replace(/\./g, '-')}`, msgObj.u, true, new Date(parseInt(message.ts.split('.')[0]) * 1000)); + + return msgObj; } else { logger.events.error('Pinned item with no attachment'); } @@ -778,6 +788,7 @@ class SlackBridge { if (response && response.data && _.isArray(response.data.messages) && response.data.messages.length > 0) { let latest = 0; for (let message of response.data.messages.reverse()) { + logger.class.debug('MESSAGE: ', message); if (!latest || message.ts > latest) { latest = message.ts; }