diff --git a/CHANGELOG.md b/CHANGELOG.md index 7eb917f9..00584644 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ Initial release of Oragono! * We now advertise the [`RPL_ISUPPORT`](http://modern.ircdocs.horse/#rplisupport-005) numeric. * Parse new mode change syntax commonly used these days (i.e. `+h-ov dan dan dan`). * User mode for clients connected via TLS (`+Z`). +* Support for [`server-time`](http://ircv3.net/specs/extensions/server-time-3.2.html). ### Changed * Added channel Founder/Admin/Halfops (`qah`) privileges, and removed channel creator (`O`) privilege (from RFC2812, not used in the real world). diff --git a/irc/capability.go b/irc/capability.go index 2079f72d..4156c544 100644 --- a/irc/capability.go +++ b/irc/capability.go @@ -16,11 +16,13 @@ type Capability string const ( MultiPrefix Capability = "multi-prefix" SASL Capability = "sasl" + ServerTime Capability = "server-time" ) var ( SupportedCapabilities = CapabilitySet{ MultiPrefix: true, + ServerTime: true, } ) diff --git a/irc/client.go b/irc/client.go index 10e20f62..2c4a2f4e 100644 --- a/irc/client.go +++ b/irc/client.go @@ -343,6 +343,16 @@ func (client *Client) destroy() { // Send sends an IRC line to the client. func (client *Client) Send(tags *map[string]ircmsg.TagValue, prefix string, command string, params ...string) error { + // attach server-time + if client.capabilities[ServerTime] { + if tags == nil { + tags = ircmsg.MakeTags("time", time.Now().Format(time.RFC3339)) + } else { + (*tags)["time"] = ircmsg.MakeTagValue(time.Now().Format(time.RFC3339)) + } + } + + // send out the message ircmsg := ircmsg.MakeMessage(tags, prefix, command, params...) line, err := ircmsg.Line() if err != nil {