4 Commits
4 changed files with 105 additions and 15 deletions
Generated
+1 -1
View File
@@ -10,7 +10,7 @@
"isupport", "isupport",
"list" "list"
] ]
revision = "b4c7c5145f2e2c430d6a74035751e6d59df7ec32" revision = "2dd72f9838d99e084c85de0d8fce290bcc547cbe"
[[projects]] [[projects]]
name = "github.com/dgrijalva/jwt-go" name = "github.com/dgrijalva/jwt-go"
+33 -10
View File
@@ -4,6 +4,8 @@ import (
"log" "log"
"strings" "strings"
"git.aiterp.net/rpdata/logbot3/internal/util"
"git.aiterp.net/gisle/irc" "git.aiterp.net/gisle/irc"
"git.aiterp.net/rpdata/logbot3/internal/config" "git.aiterp.net/rpdata/logbot3/internal/config"
) )
@@ -50,48 +52,69 @@ func handler(event *irc.Event, client *irc.Client) {
case "ctcp.action", "packet.privmsg": case "ctcp.action", "packet.privmsg":
{ {
// The echo-message polyfill will return to sender.
if event.Nick == bot.client.Nick() { if event.Nick == bot.client.Nick() {
break break
} }
// Only continue with channel messages, but log the others.
channel := event.ChannelTarget() channel := event.ChannelTarget()
if channel == nil { if channel == nil {
if event.Verb() == "action" {
log.Printf("Message: * %s %s", event.Nick, event.Text)
} else {
log.Printf("Message: <%s> %s", event.Nick, event.Text)
}
break break
} }
// Parse account, just in case it'll be useful one day.
account := "" account := ""
if user, ok := bot.client.FindUser(event.Nick); ok { if user, ok := bot.client.FindUser(event.Nick); ok {
account = user.Account account = user.Account
} }
// Get the kind of psot this is.
kind := "" kind := ""
if event.Verb() == "action" { if strings.HasPrefix(event.Nick, "=") || strings.HasPrefix(event.Nick, "\x1F=") {
kind = "action"
} else {
if strings.HasPrefix(event.Nick, "=") {
kind = "scene" kind = "scene"
} else if strings.ToLower(event.Verb()) == "action" {
kind = "action"
} else { } else {
kind = "text" kind = "text"
} }
// Format NPC posts' nick and text.
nick := event.Nick
text := event.Text
if strings.HasPrefix(event.Nick, "\x1F") || kind == "scene" {
nick = strings.Replace(event.Nick, "\x1F", "", 2)
text = util.RemoveNPCAttribution(event.Text)
} }
post := ChannelPost{ // Dispatch it.
bot.handlePost(channel.Name(), ChannelPost{
Account: account, Account: account,
Kind: kind, Kind: kind,
Nick: event.Nick, Nick: nick,
Time: event.Time, Time: event.Time,
Text: event.Text, Text: text,
})
} }
bot.handlePost(channel.Name(), post) // Log notices
case "packet.notice":
{
log.Printf("Message: -%s- %s", event.Nick, event.Text)
} }
// Log initial numerics for debugging's sake // Log initial numerics for debugging
case "packet.001", "packet.002", "packet.003", "packet.251", "packet.255", "packet.265", "packet.266", "packet.250", "packet.375", "packet.372", "packet.376": case "packet.001", "packet.002", "packet.003", "packet.251", "packet.255", "packet.265", "packet.266", "packet.250", "packet.375", "packet.372", "packet.376":
{ {
log.Printf("(%s) %s\n", event.Verb(), event.Text) log.Printf("(%s) %s\n", event.Verb(), event.Text)
} }
case "packet.005", "packet.254": case "packet.005", "packet.254", "packet.cap", "packet.431", "packet.432", "packet.433", "packet.436":
{ {
log.Printf("(%s) %s %s\n", event.Verb(), strings.Join(event.Args, " "), event.Text) log.Printf("(%s) %s %s\n", event.Verb(), strings.Join(event.Args, " "), event.Text)
} }
+23
View File
@@ -0,0 +1,23 @@
package util
import (
"strings"
)
// RemoveNPCAttribution removes NPC attribution.
func RemoveNPCAttribution(str string) string {
lastOpen := strings.LastIndex(str, "(")
lastClose := strings.LastIndex(str, ")")
ending := len(str) - 1
if lastOpen > 0 && str[lastOpen-1] != '(' && (lastClose == -1 || lastClose == ending) {
cutoff := lastOpen
for cutoff > 1 && str[cutoff-1] == ' ' {
cutoff--
}
return str[:cutoff]
}
return str
}
+44
View File
@@ -0,0 +1,44 @@
package util_test
import (
"fmt"
"testing"
"git.aiterp.net/rpdata/logbot3/internal/util"
)
func TestRemoveNPCAttribution(t *testing.T) {
table := []struct {
Input string
Output string
}{
{
Input: "Character does stuff. (Player_Name)",
Output: "Character does stuff.",
},
{
Input: "Text (with some clarification) about stuff.",
Output: "Text (with some clarification) about stuff.",
},
{
Input: "Text without anything.",
Output: "Text without anything.",
},
{
Input: "((*Correction))",
Output: "((*Correction))",
},
}
for i, row := range table {
t.Run(fmt.Sprintf("Row_%d", i), func(t *testing.T) {
result := util.RemoveNPCAttribution(row.Input)
if result != row.Output {
t.Errorf("Row %d failed", i)
t.Errorf("Expected: %#+v", row.Output)
t.Errorf("Result: %#+v", result)
}
})
}
}