Browse Source

Fix voice state typing

pull/10109/head
dolfies 1 year ago
parent
commit
f6d8c66129
  1. 4
      discord/guild.py
  2. 9
      discord/member.py
  3. 9
      discord/state.py
  4. 6
      discord/types/gateway.py
  5. 6
      discord/types/guild.py
  6. 13
      discord/types/voice.py
  7. 6
      discord/voice_client.py

4
discord/guild.py

@ -112,7 +112,7 @@ if TYPE_CHECKING:
from .types.threads import ( from .types.threads import (
Thread as ThreadPayload, Thread as ThreadPayload,
) )
from .types.voice import GuildVoiceState from .types.voice import BaseVoiceState as VoiceStatePayload
from .permissions import Permissions from .permissions import Permissions
from .channel import VoiceChannel, StageChannel, TextChannel, ForumChannel, CategoryChannel from .channel import VoiceChannel, StageChannel, TextChannel, ForumChannel, CategoryChannel
from .template import Template from .template import Template
@ -572,7 +572,7 @@ class Guild(Hashable):
return f'<Guild {inner}>' return f'<Guild {inner}>'
def _update_voice_state( def _update_voice_state(
self, data: GuildVoiceState, channel_id: Optional[int] self, data: VoiceStatePayload, channel_id: Optional[int]
) -> Tuple[Optional[Member], VoiceState, VoiceState]: ) -> Tuple[Optional[Member], VoiceState, VoiceState]:
cache_flags = self._state.member_cache_flags cache_flags = self._state.member_cache_flags
user_id = int(data['user_id']) user_id = int(data['user_id'])

9
discord/member.py

@ -73,10 +73,7 @@ if TYPE_CHECKING:
from .state import ConnectionState, Presence from .state import ConnectionState, Presence
from .message import Message from .message import Message
from .role import Role from .role import Role
from .types.voice import ( from .types.voice import BaseVoiceState as VoiceStatePayload
GuildVoiceState as GuildVoiceStatePayload,
VoiceState as VoiceStatePayload,
)
from .user import Note from .user import Note
from .relationship import Relationship from .relationship import Relationship
from .calls import PrivateCall from .calls import PrivateCall
@ -147,12 +144,12 @@ class VoiceState:
) )
def __init__( def __init__(
self, *, data: Union[VoiceStatePayload, GuildVoiceStatePayload], channel: Optional[ConnectableChannel] = None self, *, data: VoiceStatePayload, channel: Optional[ConnectableChannel] = None
): ):
self.session_id: Optional[str] = data.get('session_id') self.session_id: Optional[str] = data.get('session_id')
self._update(data, channel) self._update(data, channel)
def _update(self, data: Union[VoiceStatePayload, GuildVoiceStatePayload], channel: Optional[ConnectableChannel]): def _update(self, data: VoiceStatePayload, channel: Optional[ConnectableChannel]):
self.self_mute: bool = data.get('self_mute', False) self.self_mute: bool = data.get('self_mute', False)
self.self_deaf: bool = data.get('self_deaf', False) self.self_deaf: bool = data.get('self_deaf', False)
self.self_stream: bool = data.get('self_stream', False) self.self_stream: bool = data.get('self_stream', False)

9
discord/state.py

@ -128,7 +128,7 @@ if TYPE_CHECKING:
PartialMessage as PartialMessagePayload, PartialMessage as PartialMessagePayload,
) )
from .types import gateway as gw from .types import gateway as gw
from .types.voice import VoiceState as VoiceStatePayload from .types.voice import BaseVoiceState as VoiceStatePayload
from .types.activity import ClientStatus as ClientStatusPayload from .types.activity import ClientStatus as ClientStatusPayload
T = TypeVar('T') T = TypeVar('T')
@ -2797,11 +2797,16 @@ class ConnectionState:
self.dispatch('call_delete', call) self.dispatch('call_delete', call)
def parse_voice_state_update(self, data: gw.VoiceStateUpdateEvent) -> None: def parse_voice_state_update(self, data: gw.VoiceStateUpdateEvent) -> None:
guild = self._get_guild(utils._get_as_snowflake(data, 'guild_id')) guild_id = utils._get_as_snowflake(data, 'guild_id')
guild = self._get_guild(guild_id)
channel_id = utils._get_as_snowflake(data, 'channel_id') channel_id = utils._get_as_snowflake(data, 'channel_id')
flags = self.member_cache_flags flags = self.member_cache_flags
self_id = self.self_id self_id = self.self_id
if guild_id is not None and guild is None:
_log.debug('VOICE_STATE_UPDATE referencing unknown guild ID: %s. Discarding.', guild_id)
return
if int(data['user_id']) == self_id: if int(data['user_id']) == self_id:
voice = self._get_voice_client(guild.id if guild else self_id) voice = self._get_voice_client(guild.id if guild else self_id)
if voice is not None: if voice is not None:

6
discord/types/gateway.py

@ -61,7 +61,7 @@ from .user import (
User, User,
UserGuildSettings, UserGuildSettings,
) )
from .voice import GuildVoiceState, VoiceState from .voice import GuildVoiceState, PrivateVoiceState, VoiceState
T = TypeVar('T') T = TypeVar('T')
@ -428,7 +428,7 @@ class _GuildScheduledEventUsersEvent(TypedDict):
GuildScheduledEventUserAdd = GuildScheduledEventUserRemove = _GuildScheduledEventUsersEvent GuildScheduledEventUserAdd = GuildScheduledEventUserRemove = _GuildScheduledEventUsersEvent
VoiceStateUpdateEvent = GuildVoiceState VoiceStateUpdateEvent = Union[GuildVoiceState, PrivateVoiceState]
class VoiceServerUpdateEvent(TypedDict): class VoiceServerUpdateEvent(TypedDict):
@ -559,7 +559,7 @@ class PartialUpdateChannel(TypedDict):
class PassiveUpdateEvent(TypedDict): class PassiveUpdateEvent(TypedDict):
guild_id: Snowflake guild_id: Snowflake
channels: List[PartialUpdateChannel] channels: List[PartialUpdateChannel]
voice_states: NotRequired[List[GuildVoiceState]] voice_states: NotRequired[List[VoiceState]]
members: NotRequired[List[MemberWithUser]] members: NotRequired[List[MemberWithUser]]

6
discord/types/guild.py

@ -29,7 +29,7 @@ from .scheduled_event import GuildScheduledEvent
from .sticker import GuildSticker from .sticker import GuildSticker
from .snowflake import Snowflake from .snowflake import Snowflake
from .channel import GuildChannel, StageInstance from .channel import GuildChannel, StageInstance
from .voice import GuildVoiceState from .voice import VoiceState
from .welcome_screen import WelcomeScreen from .welcome_screen import WelcomeScreen
from .activity import PartialPresenceUpdate from .activity import PartialPresenceUpdate
from .role import Role from .role import Role
@ -116,7 +116,7 @@ class Guild(UnavailableGuild, _GuildMedia):
joined_at: NotRequired[Optional[str]] joined_at: NotRequired[Optional[str]]
large: NotRequired[bool] large: NotRequired[bool]
member_count: NotRequired[int] member_count: NotRequired[int]
voice_states: NotRequired[List[GuildVoiceState]] voice_states: NotRequired[List[VoiceState]]
members: NotRequired[List[MemberWithUser]] members: NotRequired[List[MemberWithUser]]
channels: NotRequired[List[GuildChannel]] channels: NotRequired[List[GuildChannel]]
presences: NotRequired[List[PartialPresenceUpdate]] presences: NotRequired[List[PartialPresenceUpdate]]
@ -189,4 +189,4 @@ class CommandScopeMigration(TypedDict):
class SupplementalGuild(UnavailableGuild): class SupplementalGuild(UnavailableGuild):
embedded_activities: list embedded_activities: list
voice_states: List[GuildVoiceState] voice_states: List[VoiceState]

13
discord/types/voice.py

@ -32,7 +32,7 @@ from .member import MemberWithUser
SupportedModes = Literal['xsalsa20_poly1305_lite', 'xsalsa20_poly1305_suffix', 'xsalsa20_poly1305'] SupportedModes = Literal['xsalsa20_poly1305_lite', 'xsalsa20_poly1305_suffix', 'xsalsa20_poly1305']
class _VoiceState(TypedDict): class BaseVoiceState(TypedDict):
user_id: Snowflake user_id: Snowflake
session_id: str session_id: str
deaf: bool deaf: bool
@ -45,13 +45,16 @@ class _VoiceState(TypedDict):
self_stream: NotRequired[bool] self_stream: NotRequired[bool]
class GuildVoiceState(_VoiceState): class VoiceState(BaseVoiceState):
channel_id: Snowflake channel_id: Snowflake
class VoiceState(_VoiceState, total=False): class PrivateVoiceState(BaseVoiceState):
channel_id: NotRequired[Optional[Snowflake]] channel_id: Optional[Snowflake]
guild_id: NotRequired[Optional[Snowflake]]
class GuildVoiceState(PrivateVoiceState):
guild_id: Snowflake
class VoiceRegion(TypedDict): class VoiceRegion(TypedDict):

6
discord/voice_client.py

@ -61,8 +61,8 @@ if TYPE_CHECKING:
from .opus import Encoder from .opus import Encoder
from . import abc from . import abc
from .types.gateway import VoiceStateUpdateEvent as VoiceStateUpdatePayload
from .types.voice import ( from .types.voice import (
GuildVoiceState as GuildVoiceStatePayload,
VoiceServerUpdate as VoiceServerUpdatePayload, VoiceServerUpdate as VoiceServerUpdatePayload,
SupportedModes, SupportedModes,
) )
@ -114,7 +114,7 @@ class VoiceProtocol:
self.client: Client = client self.client: Client = client
self.channel: VocalChannel = channel self.channel: VocalChannel = channel
async def on_voice_state_update(self, data: GuildVoiceStatePayload, /) -> None: async def on_voice_state_update(self, data: VoiceStateUpdatePayload, /) -> None:
"""|coro| """|coro|
An abstract method that is called when the client's voice state An abstract method that is called when the client's voice state
@ -288,7 +288,7 @@ class VoiceClient(VoiceProtocol):
# connection related # connection related
async def on_voice_state_update(self, data: GuildVoiceStatePayload) -> None: async def on_voice_state_update(self, data: VoiceStateUpdatePayload) -> None:
self.session_id: str = data['session_id'] self.session_id: str = data['session_id']
channel_id = data['channel_id'] channel_id = data['channel_id']

Loading…
Cancel
Save