75 lines
2.1 KiB
Go
75 lines
2.1 KiB
Go
package crons
|
|
|
|
import (
|
|
"context"
|
|
"gralias/llmapi"
|
|
)
|
|
|
|
func (cm *CronManager) CleanupPlayersRoom() {
|
|
ctx, tx, err := cm.repo.InitTx(context.Background())
|
|
if err != nil {
|
|
cm.log.Error("failed to init transaction for actions cleanup", "err", err)
|
|
return
|
|
}
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
if err := tx.Rollback(); err != nil {
|
|
cm.log.Error("failed to rollback transaction for actions cleanup", "err", err)
|
|
}
|
|
panic(r)
|
|
}
|
|
}()
|
|
players, err := cm.repo.PlayerListAll(ctx)
|
|
if err != nil {
|
|
cm.log.Error("failed to list players", "err", err)
|
|
if err := tx.Rollback(); err != nil {
|
|
cm.log.Error("failed to rollback transaction for actions cleanup", "err", err)
|
|
}
|
|
return
|
|
}
|
|
// get all rooms to have only one req
|
|
rooms, err := cm.repo.RoomList(ctx)
|
|
if err != nil {
|
|
cm.log.Error("failed to list rooms", "err", err)
|
|
if err := tx.Rollback(); err != nil {
|
|
cm.log.Error("failed to rollback transaction for actions cleanup", "err", err)
|
|
}
|
|
return
|
|
}
|
|
for _, player := range players {
|
|
found := false
|
|
for _, room := range rooms {
|
|
// check if room exists
|
|
if player.RoomID != nil && room.ID == *player.RoomID {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
cm.log.Debug("player routine; not found room", "username", player.Username)
|
|
if !player.IsBot && player.RoomID != nil {
|
|
// delete roomid from player
|
|
if err := cm.repo.PlayerExitRoom(ctx, player.Username); err != nil {
|
|
cm.log.Error("failed to unset room", "err", err)
|
|
if err := tx.Rollback(); err != nil {
|
|
cm.log.Error("failed to rollback transaction for actions cleanup", "err", err)
|
|
}
|
|
}
|
|
}
|
|
if player.IsBot {
|
|
cm.log.Debug("trying to remove bot", "name", player.Username)
|
|
// delete player and stop the bot
|
|
if err := llmapi.RemoveBotNoRoom(player.Username); err != nil {
|
|
cm.log.Error("failed to remove bot", "err", err)
|
|
if err := tx.Rollback(); err != nil {
|
|
cm.log.Error("failed to rollback transaction for actions cleanup", "err", err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if err := tx.Commit(); err != nil {
|
|
cm.log.Error("failed to commit transaction for actions cleanup", "err", err)
|
|
}
|
|
}
|