feat: parse tags and negotiate message-tags capability

This commit is contained in:
2021-12-09 05:14:20 +02:00
parent f40ddfd67c
commit c3f75c2a43
3 changed files with 23 additions and 10 deletions
+1
View File
@@ -77,6 +77,7 @@ func (c Client) Register(nick string, password string, channel string) {
c.SendCommand("NICK", nick)
c.SendCommand("USER", nick, "0", "*", nick)
// TODO: CAP REQ :whatever capability the client recognizes and supports
c.SendCommand("CAP", "REQ", ":message-tags")
c.SendCommand("CAP", "END")
c.SendCommand("JOIN", channel)
}
+20 -8
View File
@@ -21,21 +21,33 @@ import (
)
type IRCMessage struct {
Tags []Tag // starts with @ | Optional
Tags Tags // starts with @ | Optional
Source string // starts with : | Optional
Command string // can either be a string or a numeric value | Required
Parameters []string // Optional (Dependant on command)
}
type Tag struct {
key string
value string
type Tags map[string]string
func parseTags(rawTags string) Tags {
tags := make(Tags, 0)
rawTagsSlice := strings.Split(rawTags, ";")
for _, tag := range rawTagsSlice {
str := strings.Split(tag, "=")
key := str[0]
value := ""
// we need to make sure a "value" exists before accessing str[1]
if len(str) > 1 {
value = str[1]
}
func parseTags(rawTags string) []Tag {
// TODO:
// TOOD: some tags don't have an "=" and they're basically considered "true"
return nil
tags[key] = value
}
return tags
}
func ParseIRCMessage(line string) IRCMessage {
+1 -1
View File
@@ -38,7 +38,7 @@ func (s State) Update(msg tea.Msg) (State, tea.Cmd) {
return s, s.readFromServer
case ReceivedIRCCommandMsg:
message := parser.ParseIRCMessage(msg.Msg)
fullMsg := fmt.Sprintf("%s %s %s", message.Source, message.Command, strings.Join(message.Parameters, " "))
fullMsg := fmt.Sprintf("%s %s %s %s", message.Tags, message.Source, message.Command, strings.Join(message.Parameters, " "))
s.content += fullMsg
// TODO: handle different commands