From 40eb34ed8c932ae00f3a6cc97ff34ba59ab8066e Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 3 Aug 2025 16:43:54 +0500 Subject: feat: parse irc messages --- internal/message.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 internal/message.go (limited to 'internal/message.go') diff --git a/internal/message.go b/internal/message.go new file mode 100644 index 0000000..7a70d79 --- /dev/null +++ b/internal/message.go @@ -0,0 +1,44 @@ +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") + } +} -- cgit v1.2.3