diff --git a/client/handlers.go b/client/handlers.go index 028267b..4b3f936 100644 --- a/client/handlers.go +++ b/client/handlers.go @@ -6,6 +6,7 @@ package client import ( "github.com/fluffle/goevent/event" "strings" + "time" ) // Consts for unnamed events. @@ -99,6 +100,13 @@ func (conn *Conn) h_433(line *Line) { // Args[1] is the new nick we were attempting to acquire neu := conn.NewNick(line.Args[1]) conn.Nick(neu) + // arm a timer to try get back our nick. + go func(old string) { + retry := 1 * time.Minute + for time.Sleep(retry); conn.Me.Nick != old; time.Sleep(retry) { + conn.Nick(old) + } + }(line.Args[1]) // if this is happening before we're properly connected (i.e. the nick // we sent in the initial NICK command is in use) we will not receive // a NICK message to confirm our change of nick, so ReNick here... diff --git a/client/mocknetconn_test.go b/client/mocknetconn_test.go index 76835f9..992a41c 100644 --- a/client/mocknetconn_test.go +++ b/client/mocknetconn_test.go @@ -136,11 +136,11 @@ func (m *mockNetConn) Close() error { } func (m *mockNetConn) LocalAddr() net.Addr { - return &net.IPAddr{net.IPv4(127, 0, 0, 1)} + return &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)} } func (m *mockNetConn) RemoteAddr() net.Addr { - return &net.IPAddr{net.IPv4(127, 0, 0, 1)} + return &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)} } func (m *mockNetConn) SetDeadline(t time.Time) error {