package ircd import ( "errors" "strings" ) type Message struct { command string params []string } func ParseIRCMessage(raw string) (*Message, error) { m := Message{} raw = strings.TrimSpace(raw) parts := []string{} for { if len(raw) == 0 { break } else if strings.HasPrefix(raw, ":") { parts = append(parts, raw[1:]) break } else { p := strings.SplitN(raw, " ", 2) parts = append(parts, p[0]) if len(p) == 1 { raw = "" } else { raw = strings.TrimSpace(p[1]) } } } if len(parts) > 0 { m.command = parts[0] m.params = parts[1:] return &m, nil } else { return nil, errors.New("Invalid IRC message") } }