99% of our commands for doing look ups seem to be made for after a player is connected and has a valid player object.
As you've guessed, you'll never be able to use <steam id>:query.
It's less cool and more pain to code, but I'd create a local to your script table of steamIDs that already has that access flag, then check at join.
Create the table at script startup, and update it when
UCLChanged too.
To create it, cycle through the UCL table. (I forget exacts, something like ULib.ucl.users, then sub-tables within that would store the steam id, group they are in, and any individual access flags given for each user/steamID.
Do a print table or something to get more ideas of what to cycle/what to check.
While cycling through the table of course, if the reservedslots exists in the group they're a member of, or the players individual access flag, grab it and put it in a table.
I hope I've explained the thoughts in my head well enough. It seems like it should be
reasonably simple to do, but difficult to explain.
Also, what are your needs? Block before even spawning if they aren't reserved _and_ know the password?