Add upstream RPL_CREATIONTIME support

This commit is contained in:
delthas 2020-03-26 05:51:47 +01:00 committed by Simon Ser
parent 2cb0cf3665
commit 3b6e175365
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
3 changed files with 40 additions and 9 deletions

View File

@ -1031,6 +1031,13 @@ func (dc *downstreamConn) handleMessageRegistered(msg *irc.Message) error {
Command: irc.RPL_CHANNELMODEIS, Command: irc.RPL_CHANNELMODEIS,
Params: params, Params: params,
}) })
if ch.creationTime != "" {
dc.SendMessage(&irc.Message{
Prefix: dc.srv.prefix(),
Command: rpl_creationtime,
Params: []string{dc.nick, name, ch.creationTime},
})
}
} }
case "TOPIC": case "TOPIC":
var channel string var channel string

1
irc.go
View File

@ -11,6 +11,7 @@ const (
rpl_statsping = "246" rpl_statsping = "246"
rpl_localusers = "265" rpl_localusers = "265"
rpl_globalusers = "266" rpl_globalusers = "266"
rpl_creationtime = "329"
rpl_topicwhotime = "333" rpl_topicwhotime = "333"
err_invalidcapcmd = "410" err_invalidcapcmd = "410"
) )

View File

@ -23,6 +23,7 @@ type upstreamChannel struct {
TopicTime time.Time TopicTime time.Time
Status channelStatus Status channelStatus
modes channelModes modes channelModes
creationTime string
Members map[string]*membership Members map[string]*membership
complete bool complete bool
} }
@ -763,6 +764,28 @@ func (uc *upstreamConn) handleMessage(msg *irc.Message) error {
}) })
}) })
} }
case rpl_creationtime:
var channel, creationTime string
if err := parseMessageParams(msg, nil, &channel, &creationTime); err != nil {
return err
}
ch, err := uc.getChannel(channel)
if err != nil {
return err
}
firstCreationTime := ch.creationTime == ""
ch.creationTime = creationTime
if firstCreationTime {
uc.forEachDownstream(func(dc *downstreamConn) {
dc.SendMessage(&irc.Message{
Prefix: dc.srv.prefix(),
Command: rpl_creationtime,
Params: []string{dc.nick, channel, creationTime},
})
})
}
case rpl_topicwhotime: case rpl_topicwhotime:
var name, who, timeStr string var name, who, timeStr string
if err := parseMessageParams(msg, nil, &name, &who, &timeStr); err != nil { if err := parseMessageParams(msg, nil, &name, &who, &timeStr); err != nil {