mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-14 07:59:31 +01:00
Merge pull request #1056 from jesopo/services-ctcp
handle CTCP VERSION, PING and TIME for services pseudo-users
This commit is contained in:
commit
8430fec333
@ -9,6 +9,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/goshuirc/irc-go/ircfmt"
|
"github.com/goshuirc/irc-go/ircfmt"
|
||||||
"github.com/goshuirc/irc-go/ircmsg"
|
"github.com/goshuirc/irc-go/ircmsg"
|
||||||
@ -130,6 +131,11 @@ func serviceCmdHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb
|
|||||||
|
|
||||||
// generic handler for service PRIVMSG, like `/msg NickServ INFO`
|
// generic handler for service PRIVMSG, like `/msg NickServ INFO`
|
||||||
func servicePrivmsgHandler(service *ircService, server *Server, client *Client, message string, rb *ResponseBuffer) {
|
func servicePrivmsgHandler(service *ircService, server *Server, client *Client, message string, rb *ResponseBuffer) {
|
||||||
|
if strings.HasPrefix(message, "\x01") {
|
||||||
|
serviceCTCPHandler(service, client, message)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
params := strings.Fields(message)
|
params := strings.Fields(message)
|
||||||
if len(params) == 0 {
|
if len(params) == 0 {
|
||||||
return
|
return
|
||||||
@ -147,6 +153,29 @@ func servicePrivmsgHandler(service *ircService, server *Server, client *Client,
|
|||||||
serviceRunCommand(service, server, client, cmd, commandName, params, rb)
|
serviceRunCommand(service, server, client, cmd, commandName, params, rb)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func serviceCTCPHandler(service *ircService, client *Client, message string) {
|
||||||
|
ctcp := strings.TrimSuffix(message[1:], "\x01")
|
||||||
|
|
||||||
|
ctcpSplit := utils.FieldsN(ctcp, 2)
|
||||||
|
ctcpCmd := strings.ToUpper(ctcpSplit[0])
|
||||||
|
ctcpOut := ""
|
||||||
|
|
||||||
|
switch ctcpCmd {
|
||||||
|
case "VERSION":
|
||||||
|
ctcpOut = fmt.Sprintf("%s (%s)", service.Name, Ver)
|
||||||
|
case "PING":
|
||||||
|
if len(ctcpSplit) > 1 {
|
||||||
|
ctcpOut = ctcpSplit[1]
|
||||||
|
}
|
||||||
|
case "TIME":
|
||||||
|
ctcpOut = time.Now().UTC().Format(time.RFC1123)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ctcpOut != "" {
|
||||||
|
client.Send(nil, service.prefix, "NOTICE", client.Nick(), fmt.Sprintf("\x01%s %s\x01", ctcpCmd, ctcpOut))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// actually execute a service command
|
// actually execute a service command
|
||||||
func serviceRunCommand(service *ircService, server *Server, client *Client, cmd *serviceCommand, commandName string, params []string, rb *ResponseBuffer) {
|
func serviceRunCommand(service *ircService, server *Server, client *Client, cmd *serviceCommand, commandName string, params []string, rb *ResponseBuffer) {
|
||||||
nick := rb.target.Nick()
|
nick := rb.target.Nick()
|
||||||
|
Loading…
Reference in New Issue
Block a user