Enha: remove bot without room
This commit is contained in:
@ -96,7 +96,6 @@ func (cm *CronManager) CleanupRooms() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If the creator is not in the room or the room is inactive, it's time to delete
|
||||
if !creatorInRoom || isInactive {
|
||||
reason := "creator left"
|
||||
@ -107,7 +106,7 @@ func (cm *CronManager) CleanupRooms() {
|
||||
|
||||
for _, player := range players {
|
||||
if player.IsBot {
|
||||
if err := cm.repo.PlayerDelete(ctx, room.ID, player.Username); err != nil {
|
||||
if err := cm.repo.PlayerDelete(ctx, room.ID); err != nil {
|
||||
cm.log.Error("failed to delete bot player", "room_id", room.ID, "username", player.Username, "err", err)
|
||||
}
|
||||
} else {
|
||||
|
@ -1,6 +1,9 @@
|
||||
package crons
|
||||
|
||||
import "context"
|
||||
import (
|
||||
"context"
|
||||
"gralias/llmapi"
|
||||
)
|
||||
|
||||
func (cm *CronManager) CleanupPlayersRoom() {
|
||||
ctx, tx, err := cm.repo.InitTx(context.Background())
|
||||
@ -43,11 +46,24 @@ func (cm *CronManager) CleanupPlayersRoom() {
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
// 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)
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -345,13 +345,31 @@ func RemoveBot(botName string, room *models.Room) error {
|
||||
// remove role from room
|
||||
room.RemovePlayer(botName)
|
||||
slog.Debug("removing bot player", "name", botName, "room_id", room.ID, "room", room)
|
||||
if err := repo.PlayerDelete(context.Background(), room.ID, botName); err != nil {
|
||||
if err := repo.PlayerDelete(context.Background(), botName); err != nil {
|
||||
slog.Error("failed to remove bot player", "name", botName, "room_id", room.ID)
|
||||
return err
|
||||
}
|
||||
return saveRoom(room)
|
||||
}
|
||||
|
||||
func RemoveBotNoRoom(botName string) error {
|
||||
// channels
|
||||
dc, ok := DoneChanMap[botName]
|
||||
if ok {
|
||||
dc <- true
|
||||
close(DoneChanMap[botName])
|
||||
}
|
||||
sc, ok := SignalChanMap[botName]
|
||||
if ok {
|
||||
close(sc)
|
||||
}
|
||||
// maps
|
||||
delete(DoneChanMap, botName)
|
||||
delete(SignalChanMap, botName)
|
||||
// remove role from room
|
||||
return repo.PlayerDelete(context.Background(), botName)
|
||||
}
|
||||
|
||||
// EndBot
|
||||
|
||||
func NewBot(role, team, name, roomID string, cfg *config.Config, recovery bool) (*Bot, error) {
|
||||
|
@ -40,6 +40,7 @@ func NewRepoProvider(pathToDB string) *RepoProvider {
|
||||
os.Exit(1)
|
||||
}
|
||||
slog.Info("Successfully connected to database")
|
||||
// db.SetMaxOpenConns(2)
|
||||
rp := &RepoProvider{
|
||||
DB: db,
|
||||
pathToDB: pathToDB,
|
||||
|
@ -12,7 +12,7 @@ type PlayersRepo interface {
|
||||
PlayerGetByName(ctx context.Context, username string) (*models.Player, error)
|
||||
PlayerAdd(ctx context.Context, player *models.Player) error
|
||||
PlayerUpdate(ctx context.Context, player *models.Player) error
|
||||
PlayerDelete(ctx context.Context, roomID, username string) error
|
||||
PlayerDelete(ctx context.Context, username string) error
|
||||
PlayerSetRoomID(ctx context.Context, roomID, username string) error
|
||||
PlayerExitRoom(ctx context.Context, username string) error
|
||||
PlayerListNames(ctx context.Context) ([]string, error)
|
||||
@ -56,9 +56,9 @@ func (p *RepoProvider) PlayerUpdate(ctx context.Context, player *models.Player)
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *RepoProvider) PlayerDelete(ctx context.Context, roomID, username string) error {
|
||||
func (p *RepoProvider) PlayerDelete(ctx context.Context, username string) error {
|
||||
db := getDB(ctx, p.DB)
|
||||
_, err := db.ExecContext(ctx, "DELETE FROM players WHERE room_id = ? AND username = ?", roomID, username)
|
||||
_, err := db.ExecContext(ctx, "DELETE FROM players WHERE username = ?", username)
|
||||
return err
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user