feat(achievement): support obtain achievements
This commit is contained in:
37
app/models/achievement.py
Normal file
37
app/models/achievement.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Awaitable, Callable
|
||||
from typing import TYPE_CHECKING, NamedTuple
|
||||
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from app.database import Beatmap, Score
|
||||
|
||||
|
||||
class Achievement(NamedTuple):
|
||||
id: int
|
||||
name: str
|
||||
desc: str
|
||||
assets_id: str
|
||||
medal_url: str | None = None
|
||||
medal_url2x: str | None = None
|
||||
|
||||
@property
|
||||
def url(self) -> str:
|
||||
return (
|
||||
self.medal_url
|
||||
or f"https://assets.ppy.sh/medals/client/{self.assets_id}.png"
|
||||
)
|
||||
|
||||
@property
|
||||
def url2x(self) -> str:
|
||||
return (
|
||||
self.medal_url2x
|
||||
or f"https://assets.ppy.sh/medals/client/{self.assets_id}@2x.png"
|
||||
)
|
||||
|
||||
|
||||
MedalProcessor = Callable[[AsyncSession, "Score", "Beatmap"], Awaitable[bool]]
|
||||
Medals = dict[Achievement, MedalProcessor]
|
||||
MEDALS: Medals = {}
|
||||
Reference in New Issue
Block a user