diff --git a/cmdJoin.go b/cmdJoin.go index 8d040d4..1e66613 100644 --- a/cmdJoin.go +++ b/cmdJoin.go @@ -4,8 +4,8 @@ package main import ( "fmt" - "samhofi.us/x/keybase" + "strings" ) func init() { @@ -21,23 +21,31 @@ func init() { func cmdJoin(cmd []string) { stream = false - if len(cmd) == 3 { - channel.MembersType = keybase.TEAM - channel.Name = cmd[1] - channel.TopicName = cmd[2] - printToView("Feed", fmt.Sprintf("You are joining: @%s#%s", channel.Name, channel.TopicName)) - clearView("Chat") - viewTitle("Input", fmt.Sprintf(" @%s#%s ", channel.Name, channel.TopicName)) - go populateChat() - } else if len(cmd) == 2 { - channel.MembersType = keybase.USER - channel.Name = cmd[1] - channel.TopicName = "" - printToView("Feed", fmt.Sprintf("You are joining: @%s", channel.Name)) + switch l := len(cmd); l { + case 3: + fallthrough + case 2: + // if people write it in one singular line, with a `#` + firstArgSplit := strings.Split(cmd[1], "#") + channel.Name = strings.Replace(firstArgSplit[0], "@", "", 1) + joinedName := fmt.Sprintf("@%s", channel.Name) + if l == 3 || len(firstArgSplit) == 2 { + channel.MembersType = keybase.TEAM + if l == 3 { + channel.TopicName = strings.Replace(cmd[2], "#", "", 1) + } else { + channel.TopicName = firstArgSplit[1] + } + joinedName = fmt.Sprintf("%s#%s", joinedName, channel.TopicName) + } else { + channel.TopicName = "" + channel.MembersType = keybase.USER + } + printToView("Feed", fmt.Sprintf("You are joining: %s", joinedName)) clearView("Chat") - viewTitle("Input", fmt.Sprintf(" @%s ", channel.Name)) + viewTitle("Input", fmt.Sprintf(" %s ", joinedName)) go populateChat() - } else { + default: printToView("Feed", fmt.Sprintf("To join a team use %sjoin ", cmdPrefix)) printToView("Feed", fmt.Sprintf("To join a PM use %sjoin ", cmdPrefix)) } diff --git a/main.go b/main.go index f1247fd..fa628b2 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "os" + "regexp" "strings" "time" @@ -290,7 +291,7 @@ func handleTab() error { return err } else { // if you successfully get an input string, grab the last word from the string - ss := strings.Split(inputString, " ") + ss := regexp.MustCompile(`[ #]`).Split(inputString, -1) s := ss[len(ss)-1] // now in case the word (s) is a mention @something, lets remove it to normalize if strings.HasPrefix(s, "@") { @@ -530,6 +531,17 @@ func handleMessage(api keybase.ChatAPI) { } } +// It seems that golang doesn't have filter and other high order functions :'( +func delete_empty(s []string) []string { + var r []string + for _, str := range s { + if str != "" { + r = append(r, str) + } + } + return r +} + func handleInput(viewName string) error { clearView(viewName) inputString, _ := getInputString(viewName) @@ -537,7 +549,7 @@ func handleInput(viewName string) error { return nil } if strings.HasPrefix(inputString, cmdPrefix) { - cmd := strings.Split(inputString[len(cmdPrefix):], " ") + cmd := delete_empty(strings.Split(inputString[len(cmdPrefix):], " ")) if c, ok := commands[cmd[0]]; ok { c.Exec(cmd) return nil