Parsing "sys.now" into time-parts like your example:
p:"%p" parse "%e" format sys.now
Gives us a dictionary like so:
{"year":2025,"month":12,"day":18,"hour":23,"minute":30,"second":45}
Note that this time is in GMT. The hour (and possibly minute) values might need to be adjusted to reflect a time zone offset to get local time. Otherwise, people in certain countries might find the game much harder than others!
At any rate, we'll want to structure our checks from most to least specific. First, the easter-egg time. We want both p.hour to be equal to 12 AND p.minute to be equal to 13:
(p.hour=12)&(p.minute=13)
Parentheses are important here: remember that arithmetic precedence in Lil is right-to-left unless otherwise grouped by parentheses or brackets.
Since seconds range between 0 and 59, 7 appears in the seconds place iff p.second modulo 10 is equal to 7:
(7=10%p.second)
For your hour ranges, you'll probably need ">" and "<"; there are many ways to express the same thing:
(p.hour<10) | (p.hour>19) ! (p.hour >9) & (p.hour<20) ! p.hour in (10,11,12,13,14,15,16,17,18,19)
Bringing it all together, here's one possible approach for what you described:
if (p.hour=12)&(p.minute=13) # easter egg... elseif (p.hour<10) | (p.hour>19) | (7=10%p.second) # allowed... else # denied... end
Does that make sense?