Browse Source

Fixed bugs regarding the join command

Changes:
- made it possible join with @ and # prepended as well
- Also made it possible if it's written in a singular string ie `@team#channel`
   - also made this work with auto complete
- doesn't bug out if you do `/j @person` (with a space at the end) (which it
previously thought was a team + channel, with empty channel name
pull/6/head
Casper Weiss Bang 5 years ago
parent
commit
d536cbd6cd
  1. 40
      cmdJoin.go
  2. 16
      main.go

40
cmdJoin.go

@ -4,8 +4,8 @@ package main @@ -4,8 +4,8 @@ package main
import (
"fmt"
"samhofi.us/x/keybase"
"strings"
)
func init() {
@ -21,23 +21,31 @@ 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 <team> <channel>", cmdPrefix))
printToView("Feed", fmt.Sprintf("To join a PM use %sjoin <user>", cmdPrefix))
}

16
main.go

@ -4,6 +4,7 @@ import ( @@ -4,6 +4,7 @@ import (
"fmt"
"log"
"os"
"regexp"
"strings"
"time"
@ -290,7 +291,7 @@ func handleTab() error { @@ -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) { @@ -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 { @@ -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

Loading…
Cancel
Save