package main import ( "encoding/json" "log" "os" "time" _ "github.com/glebarez/go-sqlite" "github.com/jmoiron/sqlx" ) var db *sqlx.DB func InitDb() error { newdb, err := sqlx.Connect("sqlite", "./bot.db?_time_format=sqlite") if err != nil { return err } db = newdb return nil } func main() { if err := InitDb(); err != nil { log.Fatalln(err) } type User struct { Id int64 `json:"uid" db:"id"` Name string `json:"full_name" db:"name"` Username string `json:"username" db:"username"` MessageCount int `json:"messagesCount" db:"message_count"` Karma int `json:"karma" db:"karma_history"` KarmaSent int `json:"karmaChanged" db:"karma_sent_history"` KarmaReceived int `json:"karmaGot" db:"karma_received_history"` Created time.Time `db:"created"` } var users []User data, _ := os.ReadFile("godot.users.json") err := json.Unmarshal(data, &users) if err != nil { log.Fatal(err) } for _, user := range users { var dbuser User err := db.Get(&dbuser, `SELECT * FROM users WHERE id = $1`, user.Id) if err != nil { db.Exec( `INSERT INTO users (id, name, username, message_count, karma_history, karma_sent_history, karma_received_history) VALUES ($1, $2, $3, $4, $5, $6, $7)`, user.Id, user.Name, user.Username, user.MessageCount, user.Karma, user.KarmaSent, user.KarmaReceived, ) db.Exec( `INSERT INTO karma (from_user, to_user, change, message) VALUES (-1, $1, $2, "historical")`, user.Id, user.Karma, ) } else { if user.MessageCount > dbuser.MessageCount || user.Karma > dbuser.Karma { _, err := db.Exec(`UPDATE users SET karma_history=$2, message_count=$3, karma_sent_history=$4, karma_received_history=$5 WHERE id=$1;`, user.Id, user.Karma, user.MessageCount, user.KarmaSent, user.KarmaReceived) if err != nil { log.Println(user.Id, err) } db.Exec(`UPDATE karma SET change=$2 WHERE from_user=-1 AND to_user=$1;`, user.Id, user.Karma) } } } }