System messages trigger notifications when user is mentioned (#3235)
Этот коммит содержится в:
47
api/post.go
47
api/post.go
@@ -470,28 +470,6 @@ func handleWebhookEvents(c *Context, post *model.Post, team *model.Team, channel
|
|||||||
}
|
}
|
||||||
|
|
||||||
func sendNotifications(c *Context, post *model.Post, team *model.Team, channel *model.Channel, profileMap map[string]*model.User, members []model.ChannelMember) {
|
func sendNotifications(c *Context, post *model.Post, team *model.Team, channel *model.Channel, profileMap map[string]*model.User, members []model.ChannelMember) {
|
||||||
message := model.NewMessage(c.TeamId, post.ChannelId, post.UserId, model.ACTION_POSTED)
|
|
||||||
message.Add("post", post.ToJson())
|
|
||||||
message.Add("channel_type", channel.Type)
|
|
||||||
message.Add("team_id", team.Id)
|
|
||||||
|
|
||||||
if len(post.Filenames) != 0 {
|
|
||||||
message.Add("otherFile", "true")
|
|
||||||
|
|
||||||
for _, filename := range post.Filenames {
|
|
||||||
ext := filepath.Ext(filename)
|
|
||||||
if model.IsFileExtImage(ext) {
|
|
||||||
message.Add("image", "true")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if post.IsSystemMessage() {
|
|
||||||
go Publish(message)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := profileMap[post.UserId]; !ok {
|
if _, ok := profileMap[post.UserId]; !ok {
|
||||||
l4g.Error(utils.T("api.post.send_notifications_and_forget.user_id.error"), post.UserId)
|
l4g.Error(utils.T("api.post.send_notifications_and_forget.user_id.error"), post.UserId)
|
||||||
return
|
return
|
||||||
@@ -547,7 +525,9 @@ func sendNotifications(c *Context, post *model.Post, team *model.Team, channel *
|
|||||||
keywordMap["@channel"] = append(keywordMap["@channel"], profile.Id)
|
keywordMap["@channel"] = append(keywordMap["@channel"], profile.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
if profile.NotifyProps["push"] == model.USER_NOTIFY_ALL && (post.UserId != profile.Id || post.Props["from_webhook"] == "true") {
|
if profile.NotifyProps["push"] == model.USER_NOTIFY_ALL &&
|
||||||
|
(post.UserId != profile.Id || post.Props["from_webhook"] == "true") &&
|
||||||
|
!post.IsSystemMessage() {
|
||||||
alwaysNotifyUserIds = append(alwaysNotifyUserIds, profile.Id)
|
alwaysNotifyUserIds = append(alwaysNotifyUserIds, profile.Id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -605,7 +585,9 @@ func sendNotifications(c *Context, post *model.Post, team *model.Team, channel *
|
|||||||
mentionedUsersList := make([]string, 0, len(mentionedUserIds))
|
mentionedUsersList := make([]string, 0, len(mentionedUserIds))
|
||||||
|
|
||||||
senderName := ""
|
senderName := ""
|
||||||
if profile, ok := profileMap[post.UserId]; ok {
|
if post.IsSystemMessage() {
|
||||||
|
senderName = c.T("system.message.name")
|
||||||
|
} else if profile, ok := profileMap[post.UserId]; ok {
|
||||||
senderName = profile.Username
|
senderName = profile.Username
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -647,7 +629,24 @@ func sendNotifications(c *Context, post *model.Post, team *model.Team, channel *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message := model.NewMessage(c.TeamId, post.ChannelId, post.UserId, model.ACTION_POSTED)
|
||||||
|
message.Add("post", post.ToJson())
|
||||||
|
message.Add("channel_type", channel.Type)
|
||||||
|
message.Add("channel_display_name", channel.DisplayName)
|
||||||
message.Add("sender_name", senderName)
|
message.Add("sender_name", senderName)
|
||||||
|
message.Add("team_id", team.Id)
|
||||||
|
|
||||||
|
if len(post.Filenames) != 0 {
|
||||||
|
message.Add("otherFile", "true")
|
||||||
|
|
||||||
|
for _, filename := range post.Filenames {
|
||||||
|
ext := filepath.Ext(filename)
|
||||||
|
if model.IsFileExtImage(ext) {
|
||||||
|
message.Add("image", "true")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(mentionedUsersList) != 0 {
|
if len(mentionedUsersList) != 0 {
|
||||||
message.Add("mentions", model.ArrayToJson(mentionedUsersList))
|
message.Add("mentions", model.ArrayToJson(mentionedUsersList))
|
||||||
|
|||||||
@@ -47,6 +47,10 @@
|
|||||||
"id": "September",
|
"id": "September",
|
||||||
"translation": "September"
|
"translation": "September"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "system.message.name",
|
||||||
|
"translation": "System"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "api.general.init.debug",
|
"id": "api.general.init.debug",
|
||||||
"translation": "Initializing general api routes"
|
"translation": "Initializing general api routes"
|
||||||
|
|||||||
@@ -27,7 +27,11 @@ class NotificationStoreClass extends EventEmitter {
|
|||||||
|
|
||||||
handleRecievedPost(post, msgProps) {
|
handleRecievedPost(post, msgProps) {
|
||||||
// Send desktop notification
|
// Send desktop notification
|
||||||
if ((UserStore.getCurrentId() !== post.user_id || post.props.from_webhook === 'true') && !PostUtils.isSystemMessage(post)) {
|
if ((UserStore.getCurrentId() !== post.user_id || post.props.from_webhook === 'true')) {
|
||||||
|
if (PostUtils.isSystemMessage(post) && post.type !== 'system_join_leave') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let mentions = [];
|
let mentions = [];
|
||||||
if (msgProps.mentions) {
|
if (msgProps.mentions) {
|
||||||
mentions = JSON.parse(msgProps.mentions);
|
mentions = JSON.parse(msgProps.mentions);
|
||||||
@@ -52,6 +56,8 @@ class NotificationStoreClass extends EventEmitter {
|
|||||||
let username = Utils.localizeMessage('channel_loader.someone', 'Someone');
|
let username = Utils.localizeMessage('channel_loader.someone', 'Someone');
|
||||||
if (post.props.override_username && global.window.mm_config.EnablePostUsernameOverride === 'true') {
|
if (post.props.override_username && global.window.mm_config.EnablePostUsernameOverride === 'true') {
|
||||||
username = post.props.override_username;
|
username = post.props.override_username;
|
||||||
|
} else if (msgProps.sender_name) {
|
||||||
|
username = msgProps.sender_name;
|
||||||
} else if (UserStore.hasProfile(post.user_id)) {
|
} else if (UserStore.hasProfile(post.user_id)) {
|
||||||
username = UserStore.getProfile(post.user_id).username;
|
username = UserStore.getProfile(post.user_id).username;
|
||||||
}
|
}
|
||||||
@@ -59,6 +65,8 @@ class NotificationStoreClass extends EventEmitter {
|
|||||||
let title = Utils.localizeMessage('channel_loader.posted', 'Posted');
|
let title = Utils.localizeMessage('channel_loader.posted', 'Posted');
|
||||||
if (channel) {
|
if (channel) {
|
||||||
title = channel.display_name;
|
title = channel.display_name;
|
||||||
|
} else if (msgProps.channel_display_name) {
|
||||||
|
title = msgProps.channel_display_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
let notifyText = post.message.replace(/\n+/g, ' ');
|
let notifyText = post.message.replace(/\n+/g, ' ');
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user