From 327f59a14c56e10baea6a880ac99ad8d3d5d551e Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Mon, 3 Jan 2022 23:59:52 +0200 Subject: [PATCH] fix: fixed some stuff * include token when replying to a PING with a PONG * fixed parsing of a single param with a colon * fixed client's SendCommand() to properly send single and multi param messages --- client/client.go | 30 +++++++++++++++++++++--------- parser/parser.go | 5 +++++ ui/mainscreen/mainscreen.go | 2 +- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/client/client.go b/client/client.go index 3e2dfea..cf3853b 100644 --- a/client/client.go +++ b/client/client.go @@ -89,17 +89,29 @@ func (c Client) SendCommand(cmd string, params ...string) { } paramsString := "" - if len(params) > 0 { - paramsString = " " + strings.Join(params, " ") - } - // if we have more than 1 param then replace the last param's space with a " :" + // if we have more than 1 param if len(params) > 1 { - i := strings.LastIndex(paramsString, " ") - paramsString = paramsString[:i] + strings.Replace(paramsString[i:], " ", " :", 1) - // if we have more exactly 1 param and it contains spaces, we prepend colon to the param - } else if len(params) == 1 && strings.Contains(params[0], " ") { - paramsString = ":" + paramsString + lastParam := params[len(params)-1] + // if the last param is a trailing param + // we prepend a colon to it + if strings.Contains(lastParam, " ") { + lastParam = " :" + lastParam + } else { + lastParam = " " + lastParam + } + + paramsString = " " + strings.Join(params[:len(params)-1], " ") + paramsString += lastParam + + // if we have exactly 1 param + } else if len(params) == 1 { + // if this 1 param contains spaces, we prepend a colon + if strings.Contains(params[0], " ") { + paramsString = " :" + params[0] + } else { + paramsString = " " + params[0] + } } if c.TlsConn != nil { diff --git a/parser/parser.go b/parser/parser.go index 7468fb3..5f81b25 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -93,6 +93,11 @@ func ParseIRCMessage(line string) IRCMessage { parameters = append(parameters, params[1]) } + // if we have 1 param and it starts with a colon + if len(parameters) == 1 && parameters[0][0] == ':' { + parameters[0] = parameters[0][1:] + } + ircMessage.Parameters = parameters } diff --git a/ui/mainscreen/mainscreen.go b/ui/mainscreen/mainscreen.go index 792b025..59cb47e 100644 --- a/ui/mainscreen/mainscreen.go +++ b/ui/mainscreen/mainscreen.go @@ -83,7 +83,7 @@ func (s State) Update(msg tea.Msg) (State, tea.Cmd) { // TODO: handle different commands switch message.Command { case "PING": - s.Client.SendCommand("PONG") + s.Client.SendCommand("PONG", message.Parameters[0]) break }