summaryrefslogtreecommitdiffstats
path: root/api/command.go
diff options
context:
space:
mode:
authorYusuke Nemoto <kaakaa@users.noreply.github.com>2016-12-10 13:35:16 +0900
committerJoram Wilander <jwawilander@gmail.com>2016-12-09 23:35:16 -0500
commitddacfa58ba25002a7c3c35a1fe89898bb6e78c0a (patch)
treeab2855d58eba639a6cefef6ff6299eee3d0f802d /api/command.go
parentcb870c83d1f3135b2b339f3444cfa7c632c4d5bd (diff)
downloadchat-ddacfa58ba25002a7c3c35a1fe89898bb6e78c0a.tar.gz
chat-ddacfa58ba25002a7c3c35a1fe89898bb6e78c0a.tar.bz2
chat-ddacfa58ba25002a7c3c35a1fe89898bb6e78c0a.zip
PLT-1598 Slash command works in RHS (#4367)
* PLT-1598 Slash command works in RHS * fix UserProfile in the reply for Slash Command * fix some problem about the system messages in RHS * system message in RHS isn't displayed as comment for root message * remove status indicator for system message in RHS * system message in RHS is colored to grey * system messages don't count as commented post * fix bug about cleaning draft in RHS * remove unnecessary function * implement new model for executing command
Diffstat (limited to 'api/command.go')
-rw-r--r--api/command.go32
1 files changed, 16 insertions, 16 deletions
diff --git a/api/command.go b/api/command.go
index 3ae379819..a6c3ea201 100644
--- a/api/command.go
+++ b/api/command.go
@@ -20,7 +20,7 @@ import (
type CommandProvider interface {
GetTrigger() string
GetCommand(c *Context) *model.Command
- DoCommand(c *Context, channelId string, message string) *model.CommandResponse
+ DoCommand(c *Context, args *model.CommandArgs, message string) *model.CommandResponse
}
var commandProviders = make(map[string]CommandProvider)
@@ -88,30 +88,28 @@ func listCommands(c *Context, w http.ResponseWriter, r *http.Request) {
}
func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
- props := model.MapFromJson(r.Body)
- command := strings.TrimSpace(props["command"])
- channelId := strings.TrimSpace(props["channelId"])
+ commandArgs := model.CommandArgsFromJson(r.Body)
- if len(command) <= 1 || strings.Index(command, "/") != 0 {
+ if len(commandArgs.Command) <= 1 || strings.Index(commandArgs.Command, "/") != 0 {
c.Err = model.NewLocAppError("executeCommand", "api.command.execute_command.start.app_error", nil, "")
return
}
- if len(channelId) > 0 {
- if !HasPermissionToChannelContext(c, channelId, model.PERMISSION_USE_SLASH_COMMANDS) {
+ if len(commandArgs.ChannelId) > 0 {
+ if !HasPermissionToChannelContext(c, commandArgs.ChannelId, model.PERMISSION_USE_SLASH_COMMANDS) {
return
}
}
- parts := strings.Split(command, " ")
+ parts := strings.Split(commandArgs.Command, " ")
trigger := parts[0][1:]
trigger = strings.ToLower(trigger)
message := strings.Join(parts[1:], " ")
provider := GetCommandProvider(trigger)
if provider != nil {
- response := provider.DoCommand(c, channelId, message)
- handleResponse(c, w, response, channelId, provider.GetCommand(c), true)
+ response := provider.DoCommand(c, commandArgs, message)
+ handleResponse(c, w, response, commandArgs, provider.GetCommand(c), true)
return
} else {
@@ -121,7 +119,7 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- chanChan := Srv.Store.Channel().Get(channelId)
+ chanChan := Srv.Store.Channel().Get(commandArgs.ChannelId)
teamChan := Srv.Store.Team().Get(c.TeamId)
userChan := Srv.Store.User().Get(c.Session.UserId)
@@ -166,7 +164,7 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
p.Set("team_id", cmd.TeamId)
p.Set("team_domain", team.Name)
- p.Set("channel_id", channelId)
+ p.Set("channel_id", commandArgs.ChannelId)
p.Set("channel_name", channel.Name)
p.Set("user_id", c.Session.UserId)
@@ -200,7 +198,7 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
if response == nil {
c.Err = model.NewLocAppError("command", "api.command.execute_command.failed_empty.app_error", map[string]interface{}{"Trigger": trigger}, "")
} else {
- handleResponse(c, w, response, channelId, cmd, false)
+ handleResponse(c, w, response, commandArgs, cmd, false)
}
} else {
defer resp.Body.Close()
@@ -219,10 +217,11 @@ func executeCommand(c *Context, w http.ResponseWriter, r *http.Request) {
c.Err = model.NewLocAppError("command", "api.command.execute_command.not_found.app_error", map[string]interface{}{"Trigger": trigger}, "")
}
-func handleResponse(c *Context, w http.ResponseWriter, response *model.CommandResponse, channelId string, cmd *model.Command, builtIn bool) {
-
+func handleResponse(c *Context, w http.ResponseWriter, response *model.CommandResponse, commandArgs *model.CommandArgs, cmd *model.Command, builtIn bool) {
post := &model.Post{}
- post.ChannelId = channelId
+ post.ChannelId = commandArgs.ChannelId
+ post.RootId = commandArgs.RootId
+ post.ParentId = commandArgs.ParentId
if !builtIn {
post.AddProp("from_webhook", "true")
@@ -258,6 +257,7 @@ func handleResponse(c *Context, w http.ResponseWriter, response *model.CommandRe
post.Message = response.Text
post.CreateAt = model.GetMillis()
post.UserId = c.Session.UserId
+ post.ParentId = ""
SendEphemeralPost(
c.TeamId,
c.Session.UserId,