twitch-bot/action_counter.go

60 lines
1.3 KiB
Go
Raw Normal View History

2020-12-21 00:32:39 +00:00
package main
import (
"strconv"
2020-12-21 00:32:39 +00:00
"github.com/go-irc/irc"
"github.com/pkg/errors"
)
func init() {
registerAction(func() Actor { return &ActorCounter{} })
}
2020-12-21 00:32:39 +00:00
type ActorCounter struct {
CounterSet *string `json:"counter_set" yaml:"counter_set"`
CounterStep *int64 `json:"counter_step" yaml:"counter_step"`
Counter *string `json:"counter" yaml:"counter"`
}
func (a ActorCounter) Execute(c *irc.Client, m *irc.Message, r *Rule) error {
if a.Counter == nil {
return nil
}
counterName, err := formatMessage(*a.Counter, m, r, nil)
if err != nil {
return errors.Wrap(err, "preparing response")
}
if a.CounterSet != nil {
parseValue, err := formatMessage(*a.CounterSet, m, r, nil)
if err != nil {
return errors.Wrap(err, "execute counter value template")
}
counterValue, err := strconv.ParseInt(parseValue, 10, 64) //nolint:gomnd // Those numbers are static enough
if err != nil {
return errors.Wrap(err, "parse counter value")
2020-12-21 00:32:39 +00:00
}
return errors.Wrap(
store.UpdateCounter(counterName, counterValue, true),
"set counter",
2020-12-21 00:32:39 +00:00
)
}
var counterStep int64 = 1
if a.CounterStep != nil {
counterStep = *a.CounterStep
}
return errors.Wrap(
store.UpdateCounter(counterName, counterStep, false),
"update counter",
)
2020-12-21 00:32:39 +00:00
}
func (a ActorCounter) IsAsync() bool { return false }
func (a ActorCounter) Name() string { return "counter" }