diff --git a/go.mod b/go.mod index 24ad59f..b440fb0 100644 --- a/go.mod +++ b/go.mod @@ -8,8 +8,8 @@ require ( github.com/spf13/viper v1.21.0 go.etcd.io/bbolt v1.5.0 go.uber.org/zap v1.28.0 - golang.org/x/net v0.60.0 - golang.org/x/text v0.42.0 + golang.org/x/net v0.61.0 + golang.org/x/text v0.43.0 gopkg.in/irc.v3 v3.1.4 ) @@ -27,6 +27,6 @@ require ( github.com/subosito/gotenv v1.6.0 // indirect go.uber.org/multierr v1.10.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/sys v0.48.0 // indirect + golang.org/x/sys v0.49.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 6376681..db4b956 100644 --- a/go.sum +++ b/go.sum @@ -59,14 +59,14 @@ go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo= go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/net v0.60.0 h1:79p50tfZlm0J9YfoDsSi639qSXNGVwEzOPLCxM2FsYU= -golang.org/x/net v0.60.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg= -golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk= -golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= -golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= -golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= -golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI= -golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E= +golang.org/x/net v0.61.0 h1:RR+6j/BTBCrggOLugxa+66R8FvoN6MHlzDlZIbN9YFw= +golang.org/x/net v0.61.0/go.mod h1:WgDCOTH8iwtB66T4/GfI94AHo/hhdb7Hah9NDseQfiI= +golang.org/x/sync v0.24.0 h1:iqiDrGoDgyuvAKrhLQthUEzU/R378N78gXbBjxed7oA= +golang.org/x/sync v0.24.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= +golang.org/x/sys v0.49.0 h1:XbzkgYJHdqh/8m2Uu0W/dQv8nktxx4BFHp1M0gROTXA= +golang.org/x/sys v0.49.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= +golang.org/x/text v0.43.0 h1:1QivrlhwAsnMOcqgOdl9my7s9OyZl8O5/UGUTJVXoWc= +golang.org/x/text v0.43.0/go.mod h1:hbSIYA/amXcRXTFSZqh8tWHEoqRvvbKPJ2uz/KU+a+s= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/plugins/doobie.go b/plugins/doobie.go index b6ca3ec..02266ad 100644 --- a/plugins/doobie.go +++ b/plugins/doobie.go @@ -200,10 +200,11 @@ func (p *Doobie) advance(b *bot.Bot, channelKey string, sequence *doobieSequence return } line := doobieCountdownSteps[sequence.step] - sequence.timer = time.AfterFunc(p.delay, func() { p.advance(b, channelKey, sequence) }) p.mu.Unlock() b.Send(sequence.target, line) + // Enqueue this step before the next timer can run, including zero delay. + p.schedule(b, channelKey, sequence) } func (p *Doobie) randomClosingLine() string { diff --git a/plugins/doobie_test.go b/plugins/doobie_test.go index cff6ae7..e6a99db 100644 --- a/plugins/doobie_test.go +++ b/plugins/doobie_test.go @@ -103,6 +103,7 @@ func TestDoobieSequenceSendsFourSingleLineMessages(t *testing.T) { b := bot.New(cfg, nil, nil, zap.NewNop()) // Replace the queue with a fast capture queue so the test does not depend on // an IRC connection or the production pacing rate. + b.Queue.Drain(context.Background()) b.Queue = bot.NewQueue(1000, 20, func(message bot.Outgoing) { sent <- message.Text }) p := &Doobie{} if err := p.Init(bot.PluginConfig{"countdown_delay_seconds": 0, "cooldown_seconds": 1}, nil); err != nil {