Add two new twitch chat handlers in v5.1.0
This commit is contained in:
parent
d59b1c2d3b
commit
4d7d14e0b5
7 changed files with 400 additions and 3 deletions
88
modules/patpet/patpet.go
Normal file
88
modules/patpet/patpet.go
Normal file
|
@ -0,0 +1,88 @@
|
|||
package patpet
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"galched-bot/modules/settings"
|
||||
)
|
||||
|
||||
type (
|
||||
Pet struct {
|
||||
sync.RWMutex
|
||||
path string
|
||||
counter int
|
||||
}
|
||||
)
|
||||
|
||||
func New(s *settings.Settings) (*Pet, error) {
|
||||
var (
|
||||
err error
|
||||
counter int
|
||||
)
|
||||
|
||||
petData, err := ioutil.ReadFile(s.PetDataPath)
|
||||
if err != nil {
|
||||
log.Print("pet: cannot read data file", err)
|
||||
log.Print("pet: creating new counter")
|
||||
} else {
|
||||
err = json.Unmarshal(petData, &counter)
|
||||
if err != nil {
|
||||
counter = 0
|
||||
log.Print("pet: cannot unmarshal data file", err)
|
||||
log.Print("pet: creating new counter")
|
||||
} else {
|
||||
log.Print("pet: using previously saved counter")
|
||||
}
|
||||
}
|
||||
|
||||
return &Pet{
|
||||
RWMutex: sync.RWMutex{},
|
||||
path: s.PetDataPath,
|
||||
counter: counter,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *Pet) Pet() int {
|
||||
p.Lock()
|
||||
defer p.Unlock()
|
||||
|
||||
p.counter++
|
||||
return p.counter
|
||||
}
|
||||
|
||||
func (p *Pet) Counter() int {
|
||||
p.RUnlock()
|
||||
defer p.RUnlock()
|
||||
|
||||
return p.counter
|
||||
}
|
||||
|
||||
func (p *Pet) Dump() {
|
||||
p.RLock()
|
||||
defer p.RUnlock()
|
||||
|
||||
data, err := json.Marshal(p.counter)
|
||||
if err != nil {
|
||||
log.Print("pet: cannot marshal counter", err)
|
||||
return
|
||||
}
|
||||
file, err := os.Create(p.path)
|
||||
if err != nil {
|
||||
log.Print("pet: cannot open counter file", err)
|
||||
return
|
||||
}
|
||||
_, err = fmt.Fprintf(file, string(data))
|
||||
if err != nil {
|
||||
log.Print("pet: cannot write to counter file")
|
||||
}
|
||||
err = file.Close()
|
||||
if err != nil {
|
||||
log.Print("pet: cannot close counter file")
|
||||
}
|
||||
log.Print("pet: counter dumped to file:", p.counter)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue