prevent double messages by keeping ids in map, clearchat has no ID so still might be double

This commit is contained in:
gempir 2023-01-08 19:45:57 +01:00
parent a1e0da464e
commit 3225485633
3 changed files with 19 additions and 0 deletions

View File

@ -8,6 +8,7 @@ import (
"github.com/gempir/justlog/config"
"github.com/gempir/justlog/filelog"
expiremap "github.com/nursik/go-expire-map"
twitch "github.com/gempir/go-twitch-irc/v3"
"github.com/gempir/justlog/helix"
@ -24,6 +25,7 @@ type Bot struct {
channels map[string]helix.UserData
clearchats sync.Map
OptoutCodes sync.Map
msgMap *expiremap.ExpireMap
}
type worker struct {
@ -52,6 +54,7 @@ func NewBot(cfg *config.Config, helixClient helix.TwitchApiClient, fileLogger fi
channels: channels,
worker: []*worker{},
OptoutCodes: sync.Map{},
msgMap: expiremap.New(),
}
}
@ -72,6 +75,7 @@ func (b *Bot) Connect() {
log.Info("[bot] joining as user " + b.cfg.Username)
}
defer b.msgMap.Close()
log.Fatal(client.Connect())
}
@ -146,6 +150,11 @@ func (b *Bot) newClient() *twitch.Client {
}
func (b *Bot) handlePrivateMessage(message twitch.PrivateMessage) {
if _, ok := b.msgMap.Get(message.ID); ok {
return
}
b.msgMap.Set(message.ID, true, time.Second*3)
b.handlePrivateMessageCommands(message)
if b.cfg.IsOptedOut(message.User.ID) || b.cfg.IsOptedOut(message.RoomID) {
@ -168,6 +177,11 @@ func (b *Bot) handlePrivateMessage(message twitch.PrivateMessage) {
}
func (b *Bot) handleUserNotice(message twitch.UserNoticeMessage) {
if _, ok := b.msgMap.Get(message.ID); ok {
return
}
b.msgMap.Set(message.ID, true, time.Second*3)
if b.cfg.IsOptedOut(message.User.ID) || b.cfg.IsOptedOut(message.RoomID) {
return
}

1
go.mod
View File

@ -5,6 +5,7 @@ go 1.16
require (
github.com/gempir/go-twitch-irc/v3 v3.0.0
github.com/nicklaw5/helix v1.25.0
github.com/nursik/go-expire-map v1.1.0 // indirect
github.com/sirupsen/logrus v1.8.1
github.com/stretchr/testify v1.7.0 // indirect
)

4
go.sum
View File

@ -7,6 +7,10 @@ github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfE
github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/nicklaw5/helix v1.25.0 h1:Mrz537izZVsGdM3I46uGAAlslj61frgkhS/9xQqyT/M=
github.com/nicklaw5/helix v1.25.0/go.mod h1:yvXZFapT6afIoxnAvlWiJiUMsYnoHl7tNs+t0bloAMw=
github.com/nursik/go-expire-map v1.1.0 h1:C+OJ81JtHDSPJXfuu0g3e8RRjHLd5of8dVzyfDOB9KY=
github.com/nursik/go-expire-map v1.1.0/go.mod h1:wdQsai5n32Uw1IuVXXZoopePGCFh5vb0Dka/TRcboHs=
github.com/nursik/go-ordered-set v0.0.0-20190626022851-0e8872c36517 h1:jau4pavdQo5lHeVTjZEGrm4+zvVGZj8SFQt4awsLLXE=
github.com/nursik/go-ordered-set v0.0.0-20190626022851-0e8872c36517/go.mod h1:qFI7Mmmx8i+Qz8a52FarvpgPQzylvD3w77JAwvnFtKg=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=