feat: add resume payload

This commit is contained in:
NiceAesth 2024-02-23 15:20:40 +02:00
parent 011315dc77
commit 2e82f1f040
3 changed files with 46 additions and 6 deletions

34
pomice/models/payloads.py Normal file
View File

@ -0,0 +1,34 @@
from pydantic import Field
from typing import Literal, Union
from pydantic import TypeAdapter
from pomice.models import BaseModel
from pomice.models import LavalinkVersion
from pomice.models import LavalinkVersion3Type
from pomice.models import LavalinkVersion4Type
__all__ = ("ResumePayload", "ResumePayloadV3", "ResumePayloadV4")
class ResumePayload(BaseModel):
version: LavalinkVersion
timeout: int
def model_dump(self) -> dict:
return super().model_dump(by_alias=True, exclude={"version"})
class ResumePayloadV3(BaseModel):
version: LavalinkVersion3Type
timeout: int
resuming_key: str = Field(serialization_alias="resumingKey")
class ResumePayloadV4(BaseModel):
version: LavalinkVersion4Type
timeout: int
resuming: Literal[True] = True
_ResumePayloadType = Union[ResumePayloadV3, ResumePayloadV4]
ResumePayloadType = lambda **kwargs: TypeAdapter(_ResumePayloadType).validate_python(kwargs)

View File

@ -2,7 +2,12 @@ from typing import Literal
from typing import NamedTuple from typing import NamedTuple
from typing import Union from typing import Union
__all__ = ("LavalinkVersion",) __all__ = (
"LavalinkVersion",
"LavalinkVersion3Type",
"LavalinkVersion4Type",
"LavalinkVersionType",
)
class LavalinkVersion(NamedTuple): class LavalinkVersion(NamedTuple):

View File

@ -23,6 +23,8 @@ from discord.ext import commands
from websockets import client from websockets import client
from websockets import exceptions from websockets import exceptions
from pomice.models.payloads import ResumePayloadType, ResumePayloadV4
from . import __version__ from . import __version__
from . import applemusic from . import applemusic
from . import spotify from . import spotify
@ -300,14 +302,13 @@ class Node:
if not self._resume_key: if not self._resume_key:
return return
data = {"timeout": self._resume_timeout} data = ResumePayloadType(
version=self._version, timeout=self._resume_timeout, resuming_key=self._resume_key
).model_dump()
if self._version.major == 3: if isinstance(data, ResumePayloadV4):
data["resumingKey"] = self._resume_key
elif self._version.major == 4:
if self._log: if self._log:
self._log.warning("Using a resume key with Lavalink v4 is deprecated.") self._log.warning("Using a resume key with Lavalink v4 is deprecated.")
data["resuming"] = True
await self.send( await self.send(
method="PATCH", method="PATCH",