mirror of
https://github.com/gissleh/irc.git
synced 2026-10-15 17:42:53 +00:00
add ctcp handlers, and improve destroyed handling.
continuous-integration/drone/push Build is failing
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"github.com/gissleh/irc"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// CTCP implements the widely used CTCP commands (CLIENTINFO, VERSION, TIME, and PING), as well as the /ping command.
|
||||
// It does not implement DCC.
|
||||
//
|
||||
// For every other CTCP command supported, you should expand the `ctcp.clientinfo.reply` client value like above.
|
||||
func CTCP(event *irc.Event, client *irc.Client) {
|
||||
switch event.Name() {
|
||||
case "client.create":
|
||||
if r, ok := client.Value("ctcp.clientinfo.reply").(string); ok {
|
||||
if !strings.Contains(r, "ACTION PING TIME VERSION") {
|
||||
client.SetValue("ctcp.clientinfo.reply", r+" ACTION PING TIME VERSION")
|
||||
}
|
||||
} else {
|
||||
client.SetValue("ctcp.clientinfo.reply", "ACTION PING TIME VERSION")
|
||||
}
|
||||
case "ctcp.clientinfo":
|
||||
{
|
||||
response, ok := client.Value("ctcp.clientinfo.reply").(string)
|
||||
if !ok {
|
||||
response = "ACTION PING TIME VERSION"
|
||||
}
|
||||
|
||||
client.SendCTCP("CLIENTINFO", event.Nick, true, response)
|
||||
}
|
||||
case "ctcp.version":
|
||||
{
|
||||
version := "github.com/gissleh/irc v1.0"
|
||||
if v, ok := client.Value("ctcp.version.reply").(string); ok {
|
||||
version = v
|
||||
}
|
||||
|
||||
client.SendCTCP("VERSION", event.Nick, true, version)
|
||||
}
|
||||
case "ctcp.time":
|
||||
{
|
||||
client.SendCTCP("TIME", event.Nick, true, time.Now().Local().Format(time.RFC1123))
|
||||
}
|
||||
case "ctcp.ping":
|
||||
{
|
||||
client.SendCTCP("PING", event.Nick, true, event.Text)
|
||||
}
|
||||
case "input.ping":
|
||||
{
|
||||
args := strings.SplitN(event.Text, " ", 2)
|
||||
targetName := args[0]
|
||||
if targetName == "" {
|
||||
client.EmitNonBlocking(irc.NewErrorEvent("ctcp.pingarg", "/ping needs an argument"))
|
||||
break
|
||||
}
|
||||
|
||||
client.SendCTCP("PING", targetName, false, strconv.FormatInt(time.Now().UnixNano()/1000000, 10))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -99,7 +99,7 @@ func MRoleplay(event *irc.Event, client *irc.Client) {
|
||||
case "input.scenec", "input.narratorc":
|
||||
{
|
||||
if event.Text == "" {
|
||||
client.EmitNonBlocking(irc.NewErrorEvent("input", "Usage: /scenec <text...>"))
|
||||
client.EmitNonBlocking(irc.NewErrorEvent("input", "Usage: /"+event.Verb()+" <text...>"))
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user