diff options
Diffstat (limited to 'api/command_msg.go')
-rw-r--r-- | api/command_msg.go | 93 |
1 files changed, 43 insertions, 50 deletions
diff --git a/api/command_msg.go b/api/command_msg.go index 8a9949544..f2d06824d 100644 --- a/api/command_msg.go +++ b/api/command_msg.go @@ -39,63 +39,56 @@ func (me *msgProvider) DoCommand(c *Context, args *model.CommandArgs, message st splitMessage := strings.SplitN(message, " ", 2) parsedMessage := "" - targetUser := "" + targetUsername := "" if len(splitMessage) > 1 { parsedMessage = strings.SplitN(message, " ", 2)[1] } - targetUser = strings.SplitN(message, " ", 2)[0] - targetUser = strings.TrimPrefix(targetUser, "@") - - // FIX ME - // Why isn't this selecting by username since we have that? - if profileList := <-Srv.Store.User().GetAll(); profileList.Err != nil { - c.Err = profileList.Err - return &model.CommandResponse{Text: c.T("api.command_msg.list.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + targetUsername = strings.SplitN(message, " ", 2)[0] + targetUsername = strings.TrimPrefix(targetUsername, "@") + + var userProfile *model.User + if result := <-Srv.Store.User().GetByUsername(targetUsername); result.Err != nil { + c.Err = result.Err + return &model.CommandResponse{Text: c.T("api.command_msg.missing.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} } else { - profileUsers := profileList.Data.([]*model.User) - for _, userProfile := range profileUsers { - // Don't let users open DMs with themselves. It probably won't work out well. - if userProfile.Id == c.Session.UserId { - continue - } - if userProfile.Username == targetUser { - targetChannelId := "" - - // Find the channel based on this user - channelName := model.GetDMNameFromIds(c.Session.UserId, userProfile.Id) - - if channel := <-Srv.Store.Channel().GetByName(c.TeamId, channelName); channel.Err != nil { - if channel.Err.Id == "store.sql_channel.get_by_name.missing.app_error" { - if directChannel, err := CreateDirectChannel(c.Session.UserId, userProfile.Id); err != nil { - c.Err = err - return &model.CommandResponse{Text: c.T("api.command_msg.dm_fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} - } else { - targetChannelId = directChannel.Id - } - } else { - c.Err = channel.Err - return &model.CommandResponse{Text: c.T("api.command_msg.dm_fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} - } - } else { - targetChannelId = channel.Data.(*model.Channel).Id - } - - makeDirectChannelVisible(targetChannelId) - if len(parsedMessage) > 0 { - post := &model.Post{} - post.Message = parsedMessage - post.ChannelId = targetChannelId - post.UserId = c.Session.UserId - if _, err := CreatePost(c, post, true); err != nil { - return &model.CommandResponse{Text: c.T("api.command_msg.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} - } - } - - return &model.CommandResponse{GotoLocation: c.GetTeamURL() + "/channels/" + channelName, Text: "", ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + userProfile = result.Data.(*model.User) + } + + if userProfile.Id == c.Session.UserId { + return &model.CommandResponse{Text: c.T("api.command_msg.missing.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + } + + // Find the channel based on this user + channelName := model.GetDMNameFromIds(c.Session.UserId, userProfile.Id) + + targetChannelId := "" + if channel := <-Srv.Store.Channel().GetByName(c.TeamId, channelName); channel.Err != nil { + if channel.Err.Id == "store.sql_channel.get_by_name.missing.app_error" { + if directChannel, err := CreateDirectChannel(c.Session.UserId, userProfile.Id); err != nil { + c.Err = err + return &model.CommandResponse{Text: c.T("api.command_msg.dm_fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + } else { + targetChannelId = directChannel.Id } + } else { + c.Err = channel.Err + return &model.CommandResponse{Text: c.T("api.command_msg.dm_fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + } + } else { + targetChannelId = channel.Data.(*model.Channel).Id + } + + makeDirectChannelVisible(targetChannelId) + if len(parsedMessage) > 0 { + post := &model.Post{} + post.Message = parsedMessage + post.ChannelId = targetChannelId + post.UserId = c.Session.UserId + if _, err := CreatePost(c, post, true); err != nil { + return &model.CommandResponse{Text: c.T("api.command_msg.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} } } - return &model.CommandResponse{Text: c.T("api.command_msg.missing.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} + return &model.CommandResponse{GotoLocation: c.GetTeamURL() + "/channels/" + channelName, Text: "", ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL} } |