mirror of https://github.com/stijndcl/didier
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
|
import datetime
|
||
|
|
||
|
from overrides import overrides
|
||
|
from pydantic import Field, validator
|
||
|
|
||
|
from database.constants import WORDLE_GUESS_COUNT
|
||
|
from database.schemas.mongo.common import MongoCollection
|
||
|
from database.utils.datetime import today_only_date
|
||
|
|
||
|
__all__ = ["WordleGame"]
|
||
|
|
||
|
|
||
|
class WordleGame(MongoCollection):
|
||
|
"""Collection that holds people's active Wordle games"""
|
||
|
|
||
|
day: datetime.datetime = Field(default_factory=lambda: today_only_date())
|
||
|
guesses: list[str] = Field(default_factory=list)
|
||
|
user_id: int
|
||
|
|
||
|
@staticmethod
|
||
|
@overrides
|
||
|
def collection() -> str:
|
||
|
return "wordle"
|
||
|
|
||
|
@validator("guesses")
|
||
|
def validate_guesses_length(cls, value: list[int]):
|
||
|
"""Check that the amount of guesses is of the correct length"""
|
||
|
if len(value) > 6:
|
||
|
raise ValueError(f"guess_distribution must be no longer than 6 elements, found {len(value)}")
|
||
|
|
||
|
return value
|
||
|
|
||
|
def is_game_over(self, word: str) -> bool:
|
||
|
"""Check if the current game is over"""
|
||
|
# No guesses yet
|
||
|
if not self.guesses:
|
||
|
return False
|
||
|
|
||
|
# Max amount of guesses allowed
|
||
|
if len(self.guesses) == WORDLE_GUESS_COUNT:
|
||
|
return True
|
||
|
|
||
|
# Found the correct word
|
||
|
return self.guesses[-1] == word
|