From ea70580adc4b4e66f7cba9c3deb4c72d34a7f735 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Tue, 14 May 2019 21:00:00 -0400 Subject: [PATCH] fix #488 --- irc/handlers.go | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/irc/handlers.go b/irc/handlers.go index 9508304a..0745074d 100644 --- a/irc/handlers.go +++ b/irc/handlers.go @@ -1191,8 +1191,9 @@ func isonHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp ison := make([]string, 0, len(msg.Params)) for _, nick := range nicks { - if iclient := server.clients.Get(nick); iclient != nil { - ison = append(ison, iclient.Nick()) + currentNick := server.getCurrentNick(nick) + if currentNick != "" { + ison = append(ison, currentNick) } } @@ -1749,6 +1750,16 @@ func umodeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res return false } +// get the correct capitalization of a nick (if it's online), otherwise return "" +func (server *Server) getCurrentNick(nick string) (result string) { + if service, isService := OragonoServices[strings.ToLower(nick)]; isService { + return service.Name + } else if iclient := server.clients.Get(nick); iclient != nil { + return iclient.Nick() + } + return "" +} + // MONITOR [params...] func monitorHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool { handler, exists := monitorSubcommands[strings.ToLower(msg.Params[0])] @@ -1813,11 +1824,12 @@ func monitorAddHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb continue } + currentNick := server.getCurrentNick(target) // add to online / offline lists - if targetClient := server.clients.Get(casefoldedTarget); targetClient == nil { - offline = append(offline, target) + if currentNick != "" { + online = append(online, currentNick) } else { - online = append(online, targetClient.Nick()) + offline = append(offline, target) } } @@ -1845,9 +1857,10 @@ func monitorListHandler(server *Server, client *Client, msg ircmsg.IrcMessage, r var nickList []string for _, cfnick := range monitorList { replynick := cfnick + currentNick := server.getCurrentNick(cfnick) // report the uncasefolded nick if it's available, i.e., the client is online - if mclient := server.clients.Get(cfnick); mclient != nil { - replynick = mclient.Nick() + if currentNick != "" { + replynick = currentNick } nickList = append(nickList, replynick) } @@ -1869,11 +1882,11 @@ func monitorStatusHandler(server *Server, client *Client, msg ircmsg.IrcMessage, monitorList := server.monitorManager.List(client) for _, name := range monitorList { - target := server.clients.Get(name) - if target == nil { - offline = append(offline, name) + currentNick := server.getCurrentNick(name) + if currentNick != "" { + online = append(online, currentNick) } else { - online = append(online, target.Nick()) + offline = append(offline, name) } }