diff options
| author | ilotterytea <iltsu@alright.party> | 2025-08-03 16:43:54 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-08-03 16:43:54 +0500 |
| commit | 40eb34ed8c932ae00f3a6cc97ff34ba59ab8066e (patch) | |
| tree | 3778c132cfdd41caca073883102e38abe11a1e8d /internal/message.go | |
| parent | 29804aca7c87efd1d67c7fb278ac64f9a879107f (diff) | |
feat: parse irc messages
Diffstat (limited to 'internal/message.go')
| -rw-r--r-- | internal/message.go | 44 |
1 files changed, 44 insertions, 0 deletions
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") + } +} |
