diff --git a/downstream.go b/downstream.go index c7da91e..3bf3da6 100644 --- a/downstream.go +++ b/downstream.go @@ -960,6 +960,21 @@ func (dc *downstreamConn) handleMessageRegistered(msg *irc.Message) error { // TODO: support WHO masks entity := msg.Params[0] + if entity == dc.nick { + // TODO: support AWAY (H/G) in self WHO reply + dc.SendMessage(&irc.Message{ + Prefix: dc.srv.prefix(), + Command: irc.RPL_WHOREPLY, + Params: []string{dc.nick, "*", dc.username, dc.hostname, dc.srv.Hostname, dc.nick, "H", "0 " + dc.realname}, + }) + dc.SendMessage(&irc.Message{ + Prefix: dc.srv.prefix(), + Command: irc.RPL_ENDOFWHO, + Params: []string{dc.nick, dc.nick, "End of /WHO list"}, + }) + return nil + } + uc, upstreamName, err := dc.unmarshalEntity(entity) if err != nil { return err @@ -997,6 +1012,25 @@ func (dc *downstreamConn) handleMessageRegistered(msg *irc.Message) error { mask = mask[:i] } + if mask == dc.nick { + dc.SendMessage(&irc.Message{ + Prefix: dc.srv.prefix(), + Command: irc.RPL_WHOISUSER, + Params: []string{dc.nick, dc.nick, dc.username, dc.hostname, "*", dc.realname}, + }) + dc.SendMessage(&irc.Message{ + Prefix: dc.srv.prefix(), + Command: irc.RPL_WHOISSERVER, + Params: []string{dc.nick, dc.nick, dc.srv.Hostname, "soju"}, + }) + dc.SendMessage(&irc.Message{ + Prefix: dc.srv.prefix(), + Command: irc.RPL_ENDOFWHOIS, + Params: []string{dc.nick, dc.nick, "End of /WHOIS list"}, + }) + return nil + } + // TODO: support WHOIS masks uc, upstreamNick, err := dc.unmarshalEntity(mask) if err != nil { diff --git a/upstream.go b/upstream.go index 5136ff4..7ef5f7e 100644 --- a/upstream.go +++ b/upstream.go @@ -758,7 +758,7 @@ func (uc *upstreamConn) handleMessage(msg *irc.Message) error { dc.SendMessage(&irc.Message{ Prefix: dc.srv.prefix(), Command: irc.RPL_ENDOFWHO, - Params: []string{dc.nick, name, "End of WHO list"}, + Params: []string{dc.nick, name, "End of /WHO list"}, }) }) case irc.RPL_WHOISUSER: @@ -852,7 +852,7 @@ func (uc *upstreamConn) handleMessage(msg *irc.Message) error { dc.SendMessage(&irc.Message{ Prefix: dc.srv.prefix(), Command: irc.RPL_ENDOFWHOIS, - Params: []string{dc.nick, nick, "End of WHOIS list"}, + Params: []string{dc.nick, nick, "End of /WHOIS list"}, }) }) case "PRIVMSG":