twitch-bot/chatcommands.go
Knut Ahlers bcc5b4eba7
[core] Update go-irc to v4.0.0
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2023-09-11 19:51:38 +02:00

48 lines
1019 B
Go

package main
import (
"strings"
"sync"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
"gopkg.in/irc.v4"
"github.com/Luzifer/twitch-bot/v3/plugins"
)
var (
availableChatcommands = map[string]plugins.MsgModificationFunc{}
availableChatcommandsLock = new(sync.RWMutex)
)
func registerChatcommand(linePrefix string, modFn plugins.MsgModificationFunc) {
availableChatcommandsLock.Lock()
defer availableChatcommandsLock.Unlock()
if _, ok := availableChatcommands[linePrefix]; ok {
log.WithField("linePrefix", linePrefix).Fatal("Duplicate registration of chatcommand")
}
availableChatcommands[linePrefix] = modFn
}
func handleChatcommandModifications(m *irc.Message) error {
availableChatcommandsLock.RLock()
defer availableChatcommandsLock.RUnlock()
msg := m.Trailing()
for prefix, modFn := range availableChatcommands {
if !strings.HasPrefix(msg, prefix) {
continue
}
if err := modFn(m); err != nil {
return errors.Wrap(err, "modifying message")
}
}
return nil
}