don't add player to database before its confirmed he exists
This commit is contained in:
118
utils/utils.go
118
utils/utils.go
@@ -540,10 +540,10 @@ func getNextShareCode(lastCode string, apiKey string, authCode string, steamId u
|
||||
return rJson.Result.Code, nil
|
||||
}
|
||||
|
||||
func GetPlayer(db *ent.Client, id interface{}, apiKey string, rl ratelimit.Limiter) (*ent.Player, error) {
|
||||
func Player(db *ent.Client, id interface{}, apiKey string, rl ratelimit.Limiter) (*ent.Player, error) {
|
||||
switch e := id.(type) {
|
||||
case uint64:
|
||||
return GetPlayerFromSteamID64(db, e, apiKey, rl)
|
||||
return PlayerFromSteamID64(db, e, apiKey, rl)
|
||||
case string:
|
||||
if SteamId64RegEx.MatchString(e) {
|
||||
steamID64, err := strconv.ParseUint(e, 10, 64)
|
||||
@@ -551,16 +551,16 @@ func GetPlayer(db *ent.Client, id interface{}, apiKey string, rl ratelimit.Limit
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return GetPlayerFromSteamID64(db, steamID64, apiKey, rl)
|
||||
return PlayerFromSteamID64(db, steamID64, apiKey, rl)
|
||||
}
|
||||
|
||||
return GetPlayerFromVanityURL(db, e, apiKey, rl)
|
||||
return PlayerFromVanityURL(db, e, apiKey, rl)
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid arguments")
|
||||
}
|
||||
}
|
||||
|
||||
func GetPlayerFromVanityURL(db *ent.Client, id string, apiKey string, rl ratelimit.Limiter) (*ent.Player, error) {
|
||||
func PlayerFromVanityURL(db *ent.Client, id string, apiKey string, rl ratelimit.Limiter) (*ent.Player, error) {
|
||||
if id == "" {
|
||||
return nil, fmt.Errorf("invalid arguments")
|
||||
}
|
||||
@@ -581,7 +581,7 @@ func GetPlayerFromVanityURL(db *ent.Client, id string, apiKey string, rl ratelim
|
||||
return nil, fmt.Errorf("vanity url not found")
|
||||
}
|
||||
|
||||
nPlayer, err := GetPlayerFromSteamID64(db, resp.SteamID, apiKey, rl)
|
||||
nPlayer, err := PlayerFromSteamID64(db, resp.SteamID, apiKey, rl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -590,30 +590,43 @@ func GetPlayerFromVanityURL(db *ent.Client, id string, apiKey string, rl ratelim
|
||||
}
|
||||
}
|
||||
|
||||
func GetPlayerFromSteamID64(db *ent.Client, steamID uint64, apiKey string, rl ratelimit.Limiter) (*ent.Player, error) {
|
||||
func PlayerFromSteamID64(db *ent.Client, steamID uint64, apiKey string, rl ratelimit.Limiter) (*ent.Player, error) {
|
||||
tPlayer, err := db.Player.Get(context.Background(), steamID)
|
||||
if err == nil {
|
||||
return tPlayer, nil
|
||||
} else {
|
||||
nPlayer, err := db.Player.Create().SetID(steamID).Save(context.Background())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
uPlayer, err := UpdatePlayerFromSteam([]*ent.Player{nPlayer}, db, apiKey, rl)
|
||||
nPlayer := &ent.Player{ID: steamID}
|
||||
uPlayer, err := PlayerFromSteam([]*ent.Player{nPlayer}, nil, apiKey, rl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(uPlayer) > 0 {
|
||||
return uPlayer[0], nil
|
||||
} else {
|
||||
return nil, nil
|
||||
nPlayer, err = db.Player.Create().
|
||||
SetID(steamID).
|
||||
SetName(uPlayer[0].Name).
|
||||
SetAvatar(uPlayer[0].Avatar).
|
||||
SetSteamUpdated(uPlayer[0].SteamUpdated).
|
||||
SetVanityURL(uPlayer[0].VanityURL).
|
||||
SetVanityURLReal(uPlayer[0].VanityURLReal).
|
||||
SetProfileCreated(uPlayer[0].ProfileCreated).
|
||||
SetGameBanCount(uPlayer[0].GameBanCount).
|
||||
SetVacCount(uPlayer[0].VacCount).
|
||||
SetVacDate(uPlayer[0].VacDate).
|
||||
SetGameBanDate(uPlayer[0].GameBanDate).
|
||||
Save(context.Background())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nPlayer, nil
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
|
||||
func UpdatePlayerFromSteam(players []*ent.Player, db *ent.Client, apiKey string, rl ratelimit.Limiter) ([]*ent.Player, error) {
|
||||
func PlayerFromSteam(players []*ent.Player, db *ent.Client, apiKey string, rl ratelimit.Limiter) ([]*ent.Player, error) {
|
||||
var idsToUpdate []uint64
|
||||
|
||||
for _, updatePlayer := range players {
|
||||
@@ -628,10 +641,9 @@ func UpdatePlayerFromSteam(players []*ent.Player, db *ent.Client, apiKey string,
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// TODO: what happens if a player deleted their profile?
|
||||
var nPlayers []*ent.Player
|
||||
for _, pS := range playerSum {
|
||||
// TODO: what happens if a player deleted their profile?
|
||||
|
||||
// check for vanityURL
|
||||
if SteamId64RegEx.MatchString(path.Base(pS.ProfileURL)) {
|
||||
pS.ProfileURL = ""
|
||||
@@ -639,17 +651,29 @@ func UpdatePlayerFromSteam(players []*ent.Player, db *ent.Client, apiKey string,
|
||||
pS.ProfileURL = path.Base(pS.ProfileURL)
|
||||
}
|
||||
|
||||
tPlayer, err := db.Player.UpdateOneID(pS.SteamID).
|
||||
SetName(pS.PersonaName).
|
||||
SetAvatar(pS.AvatarHash).
|
||||
SetSteamUpdated(time.Now().UTC()).
|
||||
SetVanityURL(strings.ToLower(pS.ProfileURL)).
|
||||
SetVanityURLReal(pS.ProfileURL).
|
||||
SetSteamUpdated(time.Now().UTC()).
|
||||
SetProfileCreated(time.Unix(pS.TimeCreated, 0).UTC()).
|
||||
Save(context.Background())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var tPlayer *ent.Player
|
||||
if db != nil {
|
||||
tPlayer, err = db.Player.UpdateOneID(pS.SteamID).
|
||||
SetName(pS.PersonaName).
|
||||
SetAvatar(pS.AvatarHash).
|
||||
SetVanityURL(strings.ToLower(pS.ProfileURL)).
|
||||
SetVanityURLReal(pS.ProfileURL).
|
||||
SetSteamUpdated(time.Now().UTC()).
|
||||
SetProfileCreated(time.Unix(pS.TimeCreated, 0).UTC()).
|
||||
Save(context.Background())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
tPlayer = &ent.Player{
|
||||
ID: pS.SteamID,
|
||||
Name: pS.PersonaName,
|
||||
Avatar: pS.AvatarHash,
|
||||
VanityURL: strings.ToLower(pS.ProfileURL),
|
||||
VanityURLReal: pS.ProfileURL,
|
||||
SteamUpdated: time.Now().UTC(),
|
||||
ProfileCreated: time.Unix(pS.TimeCreated, 0),
|
||||
}
|
||||
}
|
||||
nPlayers = append(nPlayers, tPlayer)
|
||||
}
|
||||
@@ -663,20 +687,34 @@ func UpdatePlayerFromSteam(players []*ent.Player, db *ent.Client, apiKey string,
|
||||
}
|
||||
|
||||
for _, ban := range bans {
|
||||
if ban.NumberOfVACBans > 0 {
|
||||
if ban.VACBanned || ban.NumberOfGameBans > 0 {
|
||||
banDate := time.Now().UTC().AddDate(0, 0, -1*int(ban.DaysSinceLastBan))
|
||||
|
||||
err := db.Player.UpdateOneID(ban.SteamID).SetVacCount(int(ban.NumberOfVACBans)).SetVacDate(banDate).Exec(context.Background())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if db != nil && ban.VACBanned {
|
||||
err := db.Player.UpdateOneID(ban.SteamID).SetVacCount(int(ban.NumberOfVACBans)).SetVacDate(banDate).Exec(context.Background())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
if ban.NumberOfGameBans > 0 {
|
||||
banDate := time.Now().UTC().AddDate(0, 0, -1*int(ban.DaysSinceLastBan))
|
||||
|
||||
err := db.Player.UpdateOneID(ban.SteamID).SetGameBanCount(int(ban.NumberOfGameBans)).SetGameBanDate(banDate).Exec(context.Background())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if db != nil && ban.NumberOfGameBans > 0 {
|
||||
err := db.Player.UpdateOneID(ban.SteamID).SetGameBanCount(int(ban.NumberOfGameBans)).SetGameBanDate(banDate).Exec(context.Background())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
for _, p := range nPlayers {
|
||||
if p.ID == ban.SteamID {
|
||||
if ban.NumberOfGameBans > 0 {
|
||||
p.GameBanCount = int(ban.NumberOfGameBans)
|
||||
p.GameBanDate = banDate
|
||||
}
|
||||
if ban.VACBanned {
|
||||
p.VacCount = int(ban.NumberOfVACBans)
|
||||
p.GameBanDate = banDate
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user