78 lines
2.0 KiB
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)
|
|
}
|
|
}
|
|
}
|
|
}
|