feat: add resume payload
This commit is contained in:
parent
011315dc77
commit
2e82f1f040
|
|
@ -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)
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue