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,
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":
var channel string

1
irc.go
View file

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

View file

@ -16,15 +16,16 @@ import (
)
type upstreamChannel struct {
Name string
conn *upstreamConn
Topic string
TopicWho string
TopicTime time.Time
Status channelStatus
modes channelModes
Members map[string]*membership
complete bool
Name string
conn *upstreamConn
Topic string
TopicWho string
TopicTime time.Time
Status channelStatus
modes channelModes
creationTime string
Members map[string]*membership
complete bool
}
type upstreamConn struct {
@ -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:
var name, who, timeStr string
if err := parseMessageParams(msg, nil, &name, &who, &timeStr); err != nil {