diff --git a/pyproject.toml b/pyproject.toml index 45cd18f..768a78e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "osuclient" -version = "0.5.5" +version = "0.6.0" description = "Client for osu! API" readme = "README.md" authors = [ diff --git a/src/osuclient/api.py b/src/osuclient/api.py index d794184..77256d8 100644 --- a/src/osuclient/api.py +++ b/src/osuclient/api.py @@ -117,6 +117,40 @@ class osuAPIClient(AioHTTPXClient): self.logger.error(req.text) raise s.Error(500, 'Internal Server Error') + async def get_user_beatmap_scores( + self, + access_token: str, + beatmap_id: int, + user_id: int, + legacy_only: Literal[0, 1] = 0, + ruleset: Literal['osu', 'taiko', 'fruits', 'mania'] | None = None, + ): + req = await self.get( + f'/beatmaps/{beatmap_id}/scores/users/{user_id}/all', + params=self.clean_dict( + {'legacy_only': legacy_only, 'ruleset': ruleset} + ), + headers=self.clean_dict( + { + 'Authorization': f'Bearer {access_token}', + } + ), + ) + + match req.status_code: + case st.OK: + return [s.Score.model_validate(score) for score in req.json()] + + case st.NOT_FOUND: + raise s.Error(req.status_code, 'Not Found') + + case st.UNAUTHORIZED: + raise s.Error(req.status_code, 'Unauthorized') + + case _: + self.logger.error(req.text) + raise s.Error(500, 'Internal Server Error') + async def get_user( self, access_token: str,