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