From 92d6449e46a4ac2cc4c4406b5ebb8a8c5ed7338f Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Mon, 24 Jan 2022 08:18:30 +0200 Subject: [PATCH] fix: properly implement /join --- irc/handler/handler.go | 25 ++++++++++++++++++++----- irc/handler/slash.go | 18 ++---------------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/irc/handler/handler.go b/irc/handler/handler.go index 8c779df..386b000 100644 --- a/irc/handler/handler.go +++ b/irc/handler/handler.go @@ -73,11 +73,26 @@ func handleJoin(msg parser.IRCMessage, client *irc.Client) { channel := msg.Parameters[0] joinMsg := fmt.Sprintf("== %s has joined", nick) - for i, c := range client.Channels { - if c.Name == channel { - client.Channels[i].History += joinMsg + irc.CRLF - if _, exists := client.Channels[i].Users[nick]; !exists { - client.Channels[i].Users[nick] = irc.User{} + + if nick == client.Nickname { + client.Channels = append(client.Channels, irc.Channel{ + Name: channel, + Users: make(map[string]irc.User), + }) + client.ActiveChannelIndex = len(client.Channels) - 1 + client.ActiveChannel = channel + client.Channels[client.ActiveChannelIndex].History += joinMsg + irc.CRLF + if _, exists := client.Channels[client.ActiveChannelIndex].Users[nick]; !exists { + client.Channels[client.ActiveChannelIndex].Users[nick] = irc.User{} + } + client.Tea.Send(cmds.UpdateTabBar()) + } else { + for i, c := range client.Channels { + if c.Name == channel { + client.Channels[i].History += joinMsg + irc.CRLF + if _, exists := client.Channels[i].Users[nick]; !exists { + client.Channels[i].Users[nick] = irc.User{} + } } } } diff --git a/irc/handler/slash.go b/irc/handler/slash.go index 0d4080e..4286e57 100644 --- a/irc/handler/slash.go +++ b/irc/handler/slash.go @@ -26,35 +26,21 @@ import ( ) func handleSlashJoin(params []string, client *irc.Client) tea.Cmd { - // TODO: only add channel to client slice when - // we get a JOIN command from the server with our nickname - // TODO: handle comma separated channels - var cmdsToProcess []tea.Cmd - channel := "" if len(params) > 0 { channel = params[0] } - client.ActiveChannel = channel for i, c := range client.Channels { if c.Name == channel { client.ActiveChannelIndex = i + client.ActiveChannel = channel break - } else if i == len(client.Channels)-1 { - client.Channels = append(client.Channels, irc.Channel{ - Name: channel, - Users: make(map[string]irc.User), - }) - client.ActiveChannelIndex = len(client.Channels) - 1 - cmdsToProcess = append(cmdsToProcess, cmds.UpdateTabBar) } } client.SendCommand(commands.JOIN, params...) - cmdsToProcess = append(cmdsToProcess, cmds.SwitchChannels) - - return tea.Batch(cmdsToProcess...) + return cmds.SwitchChannels } func HandleSlashCommand(msg string, client *irc.Client) tea.Cmd {