mirror of
https://github.com/Luzifer/twitch-bot.git
synced 2024-12-20 11:51:17 +00:00
[core] Fix: Message matcher matched also event content
which lead to weird behavior and generic message matchers responding to CLEARMSG or JOIN events Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
e80ed0dbf3
commit
3dc60b62b8
2 changed files with 41 additions and 9 deletions
|
@ -99,7 +99,7 @@ func (r *Rule) Matches(m *irc.Message, event *string, timerStore TimerStore, msg
|
|||
r.allowExecuteDisable,
|
||||
r.allowExecuteChannelWhitelist,
|
||||
r.allowExecuteUserWhitelist,
|
||||
r.allowExecuteEventWhitelist,
|
||||
r.allowExecuteEventMatch,
|
||||
r.allowExecuteMessageMatcherWhitelist,
|
||||
r.allowExecuteMessageMatcherBlacklist,
|
||||
r.allowExecuteBadgeBlacklist,
|
||||
|
@ -358,18 +358,50 @@ func (r *Rule) allowExecuteDisableOnTemplate(logger *log.Entry, m *irc.Message,
|
|||
return true
|
||||
}
|
||||
|
||||
func (r *Rule) allowExecuteEventWhitelist(logger *log.Entry, _ *irc.Message, event *string, _ twitch.BadgeCollection, _ *FieldCollection) bool {
|
||||
if r.MatchEvent == nil || *r.MatchEvent == "" {
|
||||
// No match criteria set, does not speak against matching
|
||||
func (r *Rule) allowExecuteEventMatch(logger *log.Entry, _ *irc.Message, event *string, _ twitch.BadgeCollection, _ *FieldCollection) bool {
|
||||
// The user defines either no event to match or they define an
|
||||
// event to match. We now need to ensure this match is valid for
|
||||
// the current execution:
|
||||
//
|
||||
// - If the user gave no event we MUST NOT have an event defined
|
||||
// - If the user gave an event we MUST have the same event defined
|
||||
//
|
||||
// To aid fighting spam we do define some excemption from these
|
||||
// rules:
|
||||
//
|
||||
// - Bits are sent using IRC messages and might contains spam
|
||||
// therefore we additionally match them through a message
|
||||
// matcher
|
||||
// - Resubs are also IRC messages and might be abused to spam
|
||||
// though this is quite unlikely. Even though it's unlikely
|
||||
// we also allow a match for message matchers to aid mods
|
||||
//
|
||||
// As all set events are always pointer to non-empty strings we
|
||||
// assume an empty string in case either is not set and then
|
||||
// compare the string contents.
|
||||
|
||||
var mE, gE string
|
||||
|
||||
if r.MatchEvent != nil {
|
||||
mE = *r.MatchEvent
|
||||
}
|
||||
|
||||
if event != nil {
|
||||
gE = *event
|
||||
}
|
||||
|
||||
if mE == gE {
|
||||
// Event does exactly match
|
||||
return true
|
||||
}
|
||||
|
||||
if event == nil || *r.MatchEvent != *event {
|
||||
logger.Trace("Non-Match: Event")
|
||||
return false
|
||||
if mE == "" && str.StringInSlice(gE, []string{"bits", "resub"}) {
|
||||
// Additional message matchers - see explanation above
|
||||
return true
|
||||
}
|
||||
|
||||
return true
|
||||
logger.Trace("Non-Match: Event")
|
||||
return false
|
||||
}
|
||||
|
||||
func (r *Rule) allowExecuteMessageMatcherBlacklist(logger *log.Entry, m *irc.Message, _ *string, _ twitch.BadgeCollection, _ *FieldCollection) bool {
|
||||
|
|
|
@ -157,7 +157,7 @@ func TestAllowExecuteEventWhitelist(t *testing.T) {
|
|||
"foobar": false,
|
||||
"test": true,
|
||||
} {
|
||||
if res := r.allowExecuteEventWhitelist(testLogger, nil, &evt, twitch.BadgeCollection{}, nil); exp != res {
|
||||
if res := r.allowExecuteEventMatch(testLogger, nil, &evt, twitch.BadgeCollection{}, nil); exp != res {
|
||||
t.Errorf("Event %q yield unexpected result: exp=%v res=%v", evt, exp, res)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue