Skip to content

Commit d9d79e4

Browse files
committed
Don't open lobby door if queued players have skip-door enabled
1 parent fa3b66e commit d9d79e4

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

src/worker.ts

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -829,17 +829,46 @@ async function closeDoor() {
829829
}
830830

831831
async function updateDoorState() {
832-
const players = await Player.find({
833-
state: [QueueStates.IN_TRANSIT_TO_DUNGEON],
834-
lastSeen: {
835-
// Seen in the last minute
836-
$gte: new Date(Date.now() - 1000 * 60),
832+
const players = await Player.aggregate([
833+
{
834+
$match: {
835+
state: QueueStates.IN_TRANSIT_TO_DUNGEON,
836+
lastSeen: {
837+
$gte: new Date(Date.now() - 1000 * 60), // Seen in the last minute
838+
},
839+
},
837840
},
838-
});
841+
{
842+
$lookup: {
843+
from: 'configs',
844+
localField: 'playerName',
845+
foreignField: 'entity',
846+
as: 'config',
847+
},
848+
},
849+
{
850+
$addFields: {
851+
skipDoor: {
852+
$anyElementTrue: {
853+
$map: {
854+
input: '$config',
855+
as: 'conf',
856+
in: {
857+
$and: [{ $eq: ['$$conf.key', 'skip-door'] }, { $eq: ['$$conf.value', 'true'] }],
858+
},
859+
},
860+
},
861+
},
862+
},
863+
},
864+
{
865+
$match: { skipDoor: { $ne: true } }, // Include players where skip-door is unset or false
866+
},
867+
]);
839868

840869
if (players.length > 0) {
841870
// There's at least one player in the queue. Open the door.
842-
logger.info(`Found ${players.length} players in queue. Opening dungeon door`);
871+
logger.info(`Found ${players.length} players in transit to their dungeon. Opening dungeon door`);
843872
await openDoor();
844873
} else {
845874
// Nobody is in the queue. Close the door.

0 commit comments

Comments
 (0)