summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--irc/session.go19
1 files changed, 10 insertions, 9 deletions
diff --git a/irc/session.go b/irc/session.go
index 4568172..7e1fd7c 100644
--- a/irc/session.go
+++ b/irc/session.go
@@ -493,13 +493,15 @@ func (s *Session) handleUnregistered(msg Message) (Event, error) {
s.out <- NewMessage("AUTHENTICATE", res)
}
case rplLoggedin:
- var userhost string
- if err := msg.ParseParams(nil, &userhost, &s.acct); err != nil {
+ var nuh string
+ if err := msg.ParseParams(nil, &nuh, &s.acct); err != nil {
return nil, err
}
s.endRegistration()
- s.host = ParsePrefix(userhost).Host
+ prefix := ParsePrefix(nuh)
+ s.user = prefix.User
+ s.host = prefix.Host
case errNicklocked, errSaslfail, errSasltoolong, errSaslaborted, errSaslalready, rplSaslmechs:
s.endRegistration()
case errNicknameinuse:
@@ -553,15 +555,16 @@ func (s *Session) handleRegistered(msg Message) (Event, error) {
}
s.updateFeatures(msg.Params[1 : len(msg.Params)-1])
case rplWhoreply:
- var nick, host, stats string
- if err := msg.ParseParams(nil, nil, nil, &host, nil, &nick, &stats, nil); err != nil {
+ var nick, host, flags, username string
+ if err := msg.ParseParams(nil, nil, &username, &host, nil, &nick, &flags, nil); err != nil {
return nil, err
}
nickCf := s.Casemap(nick)
- away := stats[0] == 'G' // stats is not empty because it's not the trailing parameter
+ away := flags[0] == 'G' // flags is not empty because it's not the trailing parameter
if s.nickCf == nickCf {
+ s.user = username
s.host = host
}
@@ -1203,9 +1206,7 @@ func (s *Session) updateFeatures(features []string) {
func (s *Session) endRegistration() {
if _, ok := s.enabledCaps["soju.im/bouncer-networks"]; !ok {
s.out <- NewMessage("CAP", "END")
- return
- }
- if s.netID == "" {
+ } else if s.netID == "" {
s.out <- NewMessage("CAP", "END")
s.out <- NewMessage("BOUNCER", "LISTNETWORKS")
} else {