Pass-through QUIT messages
This commit is contained in:
parent
7883e8fa23
commit
2a1db4cb8d
26
upstream.go
26
upstream.go
@ -190,6 +190,10 @@ func (uc *upstreamConn) handleMessage(msg *irc.Message) error {
|
|||||||
uc.channelModesWithParam = msg.Params[5]
|
uc.channelModesWithParam = msg.Params[5]
|
||||||
}
|
}
|
||||||
case "NICK":
|
case "NICK":
|
||||||
|
if msg.Prefix == nil {
|
||||||
|
return fmt.Errorf("expected a prefix")
|
||||||
|
}
|
||||||
|
|
||||||
var newNick string
|
var newNick string
|
||||||
if err := parseMessageParams(msg, &newNick); err != nil {
|
if err := parseMessageParams(msg, &newNick); err != nil {
|
||||||
return err
|
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:
|
case irc.RPL_TOPIC, irc.RPL_NOTOPIC:
|
||||||
var name, topic string
|
var name, topic string
|
||||||
if err := parseMessageParams(msg, nil, &name, &topic); err != nil {
|
if err := parseMessageParams(msg, nil, &name, &topic); err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user