irc-go/ircevent/irc_ctcp.go

69 lines
1.7 KiB
Go

package ircevent
import (
"fmt"
"strings"
"time"
"git.tcp.direct/ircd/irc-go/ircmsg"
)
func eventRewriteCTCP(event *ircmsg.Message) {
// XXX rewrite event.Command for CTCP
if !(event.Command == "PRIVMSG" && len(event.Params) == 2 && strings.HasPrefix(event.Params[1], "\x01")) {
return
}
msg := event.Params[1]
event.Command = "CTCP" //Unknown CTCP
if i := strings.LastIndex(msg, "\x01"); i > 0 {
msg = msg[1:i]
} else {
return
}
if msg == "VERSION" {
event.Command = "CTCP_VERSION"
} else if msg == "TIME" {
event.Command = "CTCP_TIME"
} else if strings.HasPrefix(msg, "PING") {
event.Command = "CTCP_PING"
} else if msg == "USERINFO" {
event.Command = "CTCP_USERINFO"
} else if msg == "CLIENTINFO" {
event.Command = "CTCP_CLIENTINFO"
} else if strings.HasPrefix(msg, "ACTION") {
event.Command = "CTCP_ACTION"
if len(msg) > 6 {
msg = msg[7:]
} else {
msg = ""
}
}
event.Params[len(event.Params)-1] = msg
}
func (irc *Connection) setupCTCPCallbacks() {
irc.AddCallback("CTCP_VERSION", func(e ircmsg.Message) {
irc.SendRaw(fmt.Sprintf("NOTICE %s :\x01VERSION %s\x01", e.Nick(), irc.Version))
})
irc.AddCallback("CTCP_USERINFO", func(e ircmsg.Message) {
irc.SendRaw(fmt.Sprintf("NOTICE %s :\x01USERINFO %s\x01", e.Nick(), irc.User))
})
irc.AddCallback("CTCP_CLIENTINFO", func(e ircmsg.Message) {
irc.SendRaw(fmt.Sprintf("NOTICE %s :\x01CLIENTINFO PING VERSION TIME USERINFO CLIENTINFO\x01", e.Nick()))
})
irc.AddCallback("CTCP_TIME", func(e ircmsg.Message) {
irc.SendRaw(fmt.Sprintf("NOTICE %s :\x01TIME %s\x01", e.Nick(), time.Now().UTC().Format(time.RFC1123)))
})
irc.AddCallback("CTCP_PING", func(e ircmsg.Message) {
irc.SendRaw(fmt.Sprintf("NOTICE %s :\x01%s\x01", e.Nick(), e.Params[1]))
})
}