package botlib import ( "errors" "os/exec" ) type MessageType int const ( MessageRequest = 1 MessageResponse = 2 ) type InputPair struct { Param string `json:"param"` Argument string `json:"argument"` } type Message struct { Type MessageType `json:"type"` Inputs []InputPair `json:"inputs"` Sender string `json:"sender"` Receiver string `json:"receiver"` Body string `json:"body"` } func Knock(name string) error { path, exists := Registry[name] if !exists { return errors.New("Unknown knock target") } /*knock_msg := Message{ Type: MessageRequest, Sender: "One-Who-Knocks", Receiver: name, }*/ if path.Hostname() == "localhost" || path.Hostname() == "127.0.0.1" { //Local delivery if path.EscapedPath() == "" { if path.Port() == "" { //no path means it's not a binary but no port means it's not listening //invalid, can't knock return errors.New("Can't knock, invalid URL") } else { //no path but port, local network connection return errors.New("Unsupposed: Local network") //TODO } } else { //path on localhost means local bin file binpath := path.EscapedPath() cmd := exec.Command(binpath) err := cmd.Run() if err != nil { return err } } } else { return errors.New("Network messaging not supported yet") } return nil }