godette/cmd/getdb/getdb.go

78 lines
2.0 KiB
Go

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)
}
}
}
}