92 lines
1.9 KiB
Python
92 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime, timedelta
|
|
from enum import Enum
|
|
|
|
from app.database.user import User
|
|
from app.models.mods import APIMod
|
|
from app.models.multiplayer import MatchType, QueueMode
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class RoomCategory(int, Enum):
|
|
Normal = 0
|
|
Spotlight = 1
|
|
FeaturedArtist = 2
|
|
DailyChallenge = 3
|
|
|
|
|
|
class RespPlaylistItem(BaseModel):
|
|
id: int
|
|
OwnerID: int
|
|
RulesetID: int
|
|
Expired: bool
|
|
PlaylistOrder: int | None
|
|
PlayedAt: datetime | None
|
|
AllowedMods: list[APIMod] = []
|
|
RequiredMods: list[APIMod] = []
|
|
Freestyle: bool
|
|
|
|
|
|
class RoomPlaylistItemStats(BaseModel):
|
|
CountActive: int
|
|
CountTotal: int
|
|
RulesetIDs: list[int]
|
|
|
|
|
|
class RoomDifficulityRange(BaseModel):
|
|
Min: float
|
|
Max: float
|
|
|
|
|
|
class ItemAttempsCount(BaseModel):
|
|
PlaylistItemID: int
|
|
Attemps: int
|
|
Passed: bool
|
|
|
|
|
|
class PlaylistAggregateScore(BaseModel):
|
|
PlaylistItemAttempts: list[ItemAttempsCount]
|
|
|
|
|
|
class RoomStatus(int, Enum):
|
|
Idle = 0
|
|
Playing = 1
|
|
|
|
|
|
class RoomAvilability(int, Enum):
|
|
Public = 0
|
|
FriendsOnly = 1
|
|
InviteOnly = 2
|
|
|
|
|
|
class RoomResp(BaseModel):
|
|
RoomID: int
|
|
Name: str = ""
|
|
Password: str | None
|
|
Has_Password: bool
|
|
Host: User | None
|
|
Category: RoomCategory
|
|
Duration: timedelta | None
|
|
StartDate: datetime | None
|
|
EndDate: datetime | None
|
|
MaxParticipants: int | None
|
|
ParticipantCount: int
|
|
RecentParticipants: list[User] = []
|
|
Type: MatchType
|
|
MaxAttemps: int | None
|
|
Playlist: list[RespPlaylistItem]
|
|
PlaylistItemStatus: RoomPlaylistItemStats
|
|
DifficulityRange: RoomDifficulityRange
|
|
QueueMode: QueueMode
|
|
AutoSkip: bool
|
|
AutoStartDuration: timedelta
|
|
UserScore: (
|
|
PlaylistAggregateScore | None
|
|
) # osu.Game/Online/Rooms/Room.cs:221 原文如此,不知道为什么
|
|
CurrentPlaylistItem: RespPlaylistItem
|
|
ChannelID: int
|
|
Status: RoomStatus
|
|
Availabiliity: RoomAvilability
|