don't add player to database before its confirmed he exists
This commit is contained in:
@@ -220,7 +220,7 @@ func (d DemoMatchLoader) connectLoop() {
|
||||
d.connecting = true
|
||||
for d.connectToSteam() != nil {
|
||||
log.Infof("[DL] Retrying connecting to steam...")
|
||||
time.Sleep(time.Minute)
|
||||
time.Sleep(time.Minute * 10)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -245,11 +245,12 @@ func (d *DemoMatchLoader) steamEventHandler() {
|
||||
log.Warningf("[DL] Steam login denied: %+v", e)
|
||||
switch e.Result {
|
||||
case steamlang.EResult_AccountLogonDenied:
|
||||
log.Fatalf("[DL] Please provide AuthCode with --authcode")
|
||||
log.Fatalf("[DL] Please provide AuthCode in config")
|
||||
case steamlang.EResult_InvalidPassword:
|
||||
_ = os.Remove(d.sentryFile)
|
||||
_ = os.Remove(d.loginKey)
|
||||
log.Fatalf("[DL] Steam login wrong")
|
||||
log.Warningf("[DL] Steam login wrong")
|
||||
go d.connectLoop()
|
||||
case steamlang.EResult_InvalidLoginAuthCode:
|
||||
log.Fatalf("[DL] Steam auth code wrong")
|
||||
}
|
||||
@@ -385,7 +386,7 @@ func (d *DemoMatchLoader) gcWorker(apiKey string, rl ratelimit.Limiter) {
|
||||
var players []*ent.Player
|
||||
|
||||
for _, accountId := range lastRound.GetReservation().GetAccountIds() {
|
||||
tPlayer, err := utils.GetPlayer(d.db, AccountId2SteamId(accountId), apiKey, rl)
|
||||
tPlayer, err := utils.Player(d.db, AccountId2SteamId(accountId), apiKey, rl)
|
||||
if err != nil {
|
||||
log.Warningf("[DL] Unable to get player for steamid %d: %v", AccountId2SteamId(accountId), err)
|
||||
continue
|
||||
|
12
main.go
12
main.go
@@ -69,7 +69,7 @@ func housekeeping() {
|
||||
|
||||
if len(tPlayerNeedSteamUpdate) > 0 {
|
||||
log.Infof("[HK] Refreshing %d profiles from steam", len(tPlayerNeedSteamUpdate))
|
||||
_, err = utils.UpdatePlayerFromSteam(tPlayerNeedSteamUpdate, db, conf.Steam.APIKey, rL)
|
||||
_, err = utils.PlayerFromSteam(tPlayerNeedSteamUpdate, db, conf.Steam.APIKey, rL)
|
||||
if err != nil {
|
||||
log.Warningf("[HK] Unable to update profiles from steam: %v", err)
|
||||
}
|
||||
@@ -191,7 +191,7 @@ func getPlayerMeta(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
tPlayer, err := utils.GetPlayer(db, id, conf.Steam.APIKey, nil)
|
||||
tPlayer, err := utils.Player(db, id, conf.Steam.APIKey, nil)
|
||||
if err != nil {
|
||||
log.Infof("[GPM] Player not found: %+v", err)
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
@@ -242,7 +242,7 @@ func getPlayerMeta(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
for _, p := range append(metaStats.BestMates, metaStats.MostMates...) {
|
||||
if p.Player.Name == "" {
|
||||
tP, err := utils.GetPlayer(db, p.Player.SteamID64, conf.Steam.APIKey, nil)
|
||||
tP, err := utils.Player(db, p.Player.SteamID64, conf.Steam.APIKey, nil)
|
||||
if err != nil {
|
||||
log.Warningf("[GPM] Failure getting player: %v", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
@@ -288,7 +288,7 @@ func getPlayer(w http.ResponseWriter, r *http.Request) {
|
||||
offsetTime = time.Unix(unixOffset, 0).UTC()
|
||||
}
|
||||
|
||||
tPlayer, err := utils.GetPlayer(db, id, conf.Steam.APIKey, nil)
|
||||
tPlayer, err := utils.Player(db, id, conf.Steam.APIKey, nil)
|
||||
if err != nil {
|
||||
log.Infof("[GP] Player not found: %+v", err)
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
@@ -410,7 +410,7 @@ func deletePlayerTrack(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
tPlayer, err := utils.GetPlayer(db, id, conf.Steam.APIKey, nil)
|
||||
tPlayer, err := utils.Player(db, id, conf.Steam.APIKey, nil)
|
||||
if err != nil {
|
||||
log.Infof("[PPT] player not found: %+v", err)
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
@@ -459,7 +459,7 @@ func postPlayerTrack(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
tPlayer, err := utils.GetPlayer(db, id, conf.Steam.APIKey, rL)
|
||||
tPlayer, err := utils.Player(db, id, conf.Steam.APIKey, rL)
|
||||
if err != nil {
|
||||
log.Infof("[PPT] player not found: %+v", err)
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
|
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