watbot/wat/db.go
alex db4c1257b9 fixed rand to use crypto rand
fixed imp with imps but should go back to privmsg detection
give the bot money when people lose lel
2018-10-26 12:40:27 +01:00

101 lines
1.8 KiB
Go

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 `gorm:"default:'100'"`
Health int64
LastMined int64
LastRested int64
CoinsLost int64
}
func (p *Player) LoseCoins(coins int64) {
p.Coins -= coins
p.CoinsLost += coins
}
func (p *Player) Conscious() bool {
return (p.Health > 0)
}
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).Order("coins desc").Find(&user)
return user
}