Fix: Allow templating to read user input

Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
Knut Ahlers 2021-03-06 01:42:40 +01:00
parent 6a218030a0
commit cc8160ec67
Signed by: luzifer
GPG key ID: 0066F03ED215AD7D
3 changed files with 16 additions and 3 deletions

View file

@ -1,6 +1,8 @@
package main package main
import ( import (
"strconv"
"github.com/go-irc/irc" "github.com/go-irc/irc"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -17,8 +19,18 @@ func init() {
} }
if r.CounterSet != nil { if r.CounterSet != nil {
parseValue, err := formatMessage(*r.CounterSet, m, ruleDef, nil)
if err != nil {
return errors.Wrap(err, "execute counter value template")
}
counterValue, err := strconv.ParseInt(parseValue, 10, 64)
if err != nil {
return errors.Wrap(err, "parse counter value")
}
return errors.Wrap( return errors.Wrap(
store.UpdateCounter(counterName, *r.CounterSet, true), store.UpdateCounter(counterName, counterValue, true),
"set counter", "set counter",
) )
} }

View file

@ -179,7 +179,7 @@ func (r *rule) Matches(m *irc.Message, event *string) bool {
type ruleAction struct { type ruleAction struct {
Ban *string `json:"ban" yaml:"ban"` Ban *string `json:"ban" yaml:"ban"`
Command []string `json:"command" yaml:"command"` Command []string `json:"command" yaml:"command"`
CounterSet *int64 `json:"counter_set" yaml:"counter_set"` CounterSet *string `json:"counter_set" yaml:"counter_set"`
CounterStep *int64 `json:"counter_step" yaml:"counter_step"` CounterStep *int64 `json:"counter_step" yaml:"counter_step"`
Counter *string `json:"counter" yaml:"counter"` Counter *string `json:"counter" yaml:"counter"`
DeleteMessage *bool `json:"delete_message" yaml:"delete_message"` DeleteMessage *bool `json:"delete_message" yaml:"delete_message"`

View file

@ -24,7 +24,8 @@ rules: # See below for examples
# Modify an internal counter value (does NOT send a chat line) # Modify an internal counter value (does NOT send a chat line)
- counter: "counterid" # String to identify the counter, applies templating - counter: "counterid" # String to identify the counter, applies templating
counter_set: 25 # Integer, set counter to value (counter_step is ignored if set) counter_set: 25 # String, set counter to value (counter_step is ignored if set),
# applies templating but MUST result in a parseable integer
counter_step: 1 # Integer, can be negative or positive, default: +1 counter_step: 1 # Integer, can be negative or positive, default: +1
# Issue a delete on the message caught # Issue a delete on the message caught