From 2a1db4cb8d4fd569c323c1a477b477e6ca8b987c Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Fri, 6 Mar 2020 18:51:11 +0100 Subject: [PATCH] Pass-through QUIT messages --- upstream.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/upstream.go b/upstream.go index f30f706..7c95aad 100644 --- a/upstream.go +++ b/upstream.go @@ -190,6 +190,10 @@ func (uc *upstreamConn) handleMessage(msg *irc.Message) error { uc.channelModesWithParam = msg.Params[5] } case "NICK": + if msg.Prefix == nil { + return fmt.Errorf("expected a prefix") + } + var newNick string if err := parseMessageParams(msg, &newNick); err != nil { return err @@ -280,6 +284,28 @@ func (uc *upstreamConn) handleMessage(msg *irc.Message) error { }) }) } + case "QUIT": + if msg.Prefix == nil { + return fmt.Errorf("expected a prefix") + } + + if msg.Prefix.Name == uc.nick { + uc.logger.Printf("quit") + } + + for _, ch := range uc.channels { + delete(ch.Members, msg.Prefix.Name) + } + + if msg.Prefix.Name != uc.nick { + uc.forEachDownstream(func(dc *downstreamConn) { + dc.SendMessage(&irc.Message{ + Prefix: dc.marshalUserPrefix(uc, msg.Prefix), + Command: "QUIT", + Params: msg.Params, + }) + }) + } case irc.RPL_TOPIC, irc.RPL_NOTOPIC: var name, topic string if err := parseMessageParams(msg, nil, &name, &topic); err != nil {