40 lines
953 B
Go
40 lines
953 B
Go
|
// Package xirc contains an extended IRC library.
|
||
|
package xirc
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
"time"
|
||
|
|
||
|
"gopkg.in/irc.v3"
|
||
|
)
|
||
|
|
||
|
// The server-time layout, as defined in the IRCv3 spec.
|
||
|
const ServerTimeLayout = "2006-01-02T15:04:05.000Z"
|
||
|
|
||
|
// FormatServerTime formats a time with the server-time layout.
|
||
|
func FormatServerTime(t time.Time) string {
|
||
|
return t.UTC().Format(ServerTimeLayout)
|
||
|
}
|
||
|
|
||
|
// ParseCTCPMessage parses a CTCP message. CTCP is defined in
|
||
|
// https://tools.ietf.org/html/draft-oakley-irc-ctcp-02
|
||
|
func ParseCTCPMessage(msg *irc.Message) (cmd string, params string, ok bool) {
|
||
|
if (msg.Command != "PRIVMSG" && msg.Command != "NOTICE") || len(msg.Params) < 2 {
|
||
|
return "", "", false
|
||
|
}
|
||
|
text := msg.Params[1]
|
||
|
|
||
|
if !strings.HasPrefix(text, "\x01") {
|
||
|
return "", "", false
|
||
|
}
|
||
|
text = strings.Trim(text, "\x01")
|
||
|
|
||
|
words := strings.SplitN(text, " ", 2)
|
||
|
cmd = strings.ToUpper(words[0])
|
||
|
if len(words) > 1 {
|
||
|
params = words[1]
|
||
|
}
|
||
|
|
||
|
return cmd, params, true
|
||
|
}
|