summaryrefslogtreecommitdiffstats
path: root/wat/db.go
diff options
context:
space:
mode:
authoralex2018-10-21 12:57:23 +0100
committeralex2018-10-21 13:04:35 +0100
commit61b84d9fd997d61f4e5bb6adc63a2310036a242e (patch)
treee15d066c7ac3ea61785018b37da8dcaae26c03e5 /wat/db.go
parent55bc749f896c25adb57125fd168a1e3ccfc0cd48 (diff)
downloadwatbot-61b84d9fd997d61f4e5bb6adc63a2310036a242e.tar.gz
watbot-61b84d9fd997d61f4e5bb6adc63a2310036a242e.tar.bz2
watbot-61b84d9fd997d61f4e5bb6adc63a2310036a242e.zip
Reimplemented python bot in golang, skipped a few features
Diffstat (limited to 'wat/db.go')
-rw-r--r--wat/db.go94
1 files changed, 94 insertions, 0 deletions
diff --git a/wat/db.go b/wat/db.go
new file mode 100644
index 0000000..81f111b
--- /dev/null
+++ b/wat/db.go
@@ -0,0 +1,94 @@
+package wat
+
+import (
+ "time"
+ "github.com/jinzhu/gorm"
+ _"github.com/jinzhu/gorm/dialects/sqlite"
+)
+import "fmt"
+
+type Player struct {
+ gorm.Model
+ Nick string
+ Host string
+ Watting int64
+ Anarchy int64
+ Trickery int64
+ Coins int64
+ Health int64
+ LastMined int64
+ LastRested int64
+}
+
+func (p *Player) Conscious() bool {
+ return true
+}
+
+func (p *Player) Level(xp int64) int64 {
+ if xp < 100 {
+ return xp/10
+ } else if xp < 900 {
+ return 10 + (xp/100)
+ } else {
+ return 99
+ }
+}
+
+type Ledger struct {
+ PlayerId uint `gorm:"primary_key"`
+ Time int64
+ Balance int64
+ Log string
+}
+
+type Item struct {
+ PlayerId uint
+ Name string `gorm:"primary_key"`
+ Price int64
+}
+
+type PlayerItem struct {
+ PlayerId uint
+ ItemId int
+ Count int
+}
+
+type WatDb struct {
+ db *gorm.DB
+}
+
+func NewWatDb() *WatDb {
+ w := WatDb{}
+ var err error
+ w.db, err = gorm.Open("sqlite3", "wat.db")
+ if err != nil {
+ panic(err)
+ }
+ w.db.AutoMigrate(&Player{}, &Ledger{}, &Item{}, &PlayerItem{})
+ return &w
+}
+
+func (w *WatDb) User(nick, host string, create bool) Player {
+ var player Player
+ // Try and get a user
+ if err := w.db.First(&player, "nick = ? or host = ?", nick, host).Error; err != nil && create {
+ fmt.Printf("Creating user: %s\n", err.Error())
+ // No user, make another
+ player.Nick = nick
+ player.Host = host
+ w.db.Create(&player)
+ w.db.First(&player, "nick = ? or host = ?", nick, host)
+ w.db.Create(&Ledger{player.Model.ID, time.Now().Unix(), 0, "creation"})
+ }
+ return player
+}
+
+func (w *WatDb) Update(upd interface{}) {
+ w.db.Save(upd)
+}
+
+func (w *WatDb) TopTen() []Player {
+ var user = make([]Player, 10)
+ w.db.Limit(10).Find(&user)
+ return user
+}