From 6d30b11513e0ee9704b2979541a365821e66e73b Mon Sep 17 00:00:00 2001 From: xpoes123 Date: Mon, 29 Jun 2026 23:33:44 -0400 Subject: [PATCH] fix: prune votekickList on success and via TTL cleanup Co-Authored-By: Claude Opus 4.8 (1M context) --- server/multiplayer/ServerMultiplayerRoomMixin.js | 4 ++++ server/multiplayer/VoteKick.js | 1 + 2 files changed, 5 insertions(+) diff --git a/server/multiplayer/ServerMultiplayerRoomMixin.js b/server/multiplayer/ServerMultiplayerRoomMixin.js index e73596134..e5eea2e43 100644 --- a/server/multiplayer/ServerMultiplayerRoomMixin.js +++ b/server/multiplayer/ServerMultiplayerRoomMixin.js @@ -236,6 +236,8 @@ const ServerMultiplayerRoomMixin = (RoomClass) => class extends RoomClass { this.kickedUserList.delete(userId); } }); + + this.votekickList = this.votekickList.filter(votekick => now - votekick.createdAt <= BAN_DURATION); } closeConnection ({ userId, username }) { @@ -427,6 +429,7 @@ const ServerMultiplayerRoomMixin = (RoomClass) => class extends RoomClass { if (votekick.check()) { this.emitMessage({ type: 'successful-vk', targetUsername, targetId }); this.kickedUserList.set(targetId, Date.now()); + this.votekickList = this.votekickList.filter(vk => !vk.exists(targetId)); } else { this.kickedUserList.set(targetId, Date.now()); this.emitMessage({ type: 'initiated-vk', targetUsername, threshold }); @@ -455,6 +458,7 @@ const ServerMultiplayerRoomMixin = (RoomClass) => class extends RoomClass { if (thisVotekick.check()) { this.emitMessage({ type: 'successful-vk', targetUsername, targetId }); this.kickedUserList.set(targetId, Date.now()); + this.votekickList = this.votekickList.filter(vk => !vk.exists(targetId)); setTimeout(() => this.closeConnection({ userId: targetId, username: targetUsername }), 1000); diff --git a/server/multiplayer/VoteKick.js b/server/multiplayer/VoteKick.js index 5c1f90d77..5376a775e 100644 --- a/server/multiplayer/VoteKick.js +++ b/server/multiplayer/VoteKick.js @@ -3,6 +3,7 @@ export default class Votekick { this.targetId = targetId; this.voted = Array.isArray(voted) ? voted : []; this.threshold = threshold; + this.createdAt = Date.now(); } exists (givenId) {