Skip to content

Commit

Permalink
Update the user object properly in voice state updates
Browse files Browse the repository at this point in the history
  • Loading branch information
4Kaylum committed Oct 4, 2023
1 parent 84c43da commit a2959ae
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 28 deletions.
2 changes: 1 addition & 1 deletion novus/api/gateway/gateway.py
Original file line number Diff line number Diff line change
Expand Up @@ -704,7 +704,7 @@ async def handle_dispatch(self, event_name: str, message: dict) -> None:
await self.dispatch.handle_dispatch(event_name, message)
except Exception as e:
log.error(
"Error in dispatch (%s) (%s)" % (event_name, dump(message)),
"Error in dispatch (%s) (%s)", event_name, dump(message),
exc_info=e,
)

Expand Down
41 changes: 14 additions & 27 deletions novus/models/voice_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@

from typing_extensions import Self

from ..utils import parse_timestamp, DiscordDatetime
from ..utils import DiscordDatetime, parse_timestamp
from .abc import Hashable
from .channel import Channel
from .guild_member import GuildMember

if TYPE_CHECKING:
from .. import payloads
from ..api import HTTPConnection
from .guild import BaseGuild
from .guild import Guild
from .user import User

__all__ = (
Expand Down Expand Up @@ -65,8 +65,6 @@ class VoiceState(Hashable):
Whether the user is deafened.
"""

guild: BaseGuild | None
user: GuildMember | User
suppress: bool
session_id: str
self_video: bool
Expand All @@ -82,36 +80,25 @@ def __init__(
state: HTTPConnection,
data: payloads.VoiceState) -> None:
self.state = state
if "member" in data:
guild_id = data["guild_id"] # pyright: ignore
self.user = GuildMember(
state=self.state,
data=data["member"],
guild_id=guild_id,
)
else:
self.user = self.state.cache.get_user(data["user_id"]) # pyright: ignore
self.guild = self.state.cache.get_guild(data.get("guild_id"))
from .guild import Guild
if isinstance(self.guild, Guild):
self.guild._add_voice_state(self)
self._channel_id = data.get("channel_id")
self.suppress = data.get("suppress", False)
self.session_id = data["session_id"]
self.self_video = data.get("self_video", False)
self.self_mute = data.get("self_mute", False)
self.self_deaf = data.get("self_deaf", False)
self.request_to_speak_timestamp = parse_timestamp(data.get("request_to_speak_timestamp"))
self.mute = data.get("mute", False)
self.deaf = data.get("deaf", False)
self._user_id = data["user_id"]
self._guild_id = data["guild_id"]
self._update(data)

@property
def channel(self) -> Channel:
return self.state.cache.get_channel(self._channel_id)

@property
def guild(self) -> Guild:
return self.state.cache.get_guild(self._guild_id)

@property
def user(self) -> GuildMember:
return self.guild.get_member(self._user_id)

def _update(self, data: payloads.VoiceState) -> Self:
if "member" in data:
self.user = self.user._update(data["member"])
self.user._update(data["member"])
self._channel_id = data["channel_id"]
self.suppress = data.get("suppress", False)
self.self_video = data.get("self_video", False)
Expand Down

0 comments on commit a2959ae

Please sign in to comment.