def test_resolve_id_from_role_arg(): assert resolve_id_from_arg( "<@&265858419049758722>", ROLE_MENTION_REGEX) == Snowflake(265858419049758722) assert resolve_id_from_arg( "265858419049758722", ROLE_MENTION_REGEX) == Snowflake(265858419049758722)
def test_resolve_id_from_channel_arg(): assert resolve_id_from_arg( "<#397823614092574721>", CHANNEL_MENTION_REGEX) == Snowflake(397823614092574721) assert resolve_id_from_arg( "397823614092574721", CHANNEL_MENTION_REGEX) == Snowflake(397823614092574721)
def test_resolve_id_from_user_arg(): assert resolve_id_from_arg( "<@!292577213226811392>", USER_MENTION_REGEX) == Snowflake(292577213226811392) assert resolve_id_from_arg( "<@292577213226811392>", USER_MENTION_REGEX) == Snowflake(292577213226811392) assert resolve_id_from_arg( "292577213226811392", USER_MENTION_REGEX) == Snowflake(292577213226811392)
async def on_voice_state_update(self, shard: gateway_shard.GatewayShard, payload: data_binding.JSONObject) -> None: """See https://discord.com/developers/docs/topics/gateway#voice-state-update for more info.""" old = self._cache.get_voice_state(Snowflake(payload["guild_id"]), Snowflake(payload["user_id"])) event = self._app.event_factory.deserialize_voice_state_update_event(shard, payload, old) if event.state.channel_id is None: self._cache.delete_voice_state(event.state.guild_id, event.state.user_id) else: self._cache.update_voice_state(event.state) await self.dispatch(event)
async def on_presence_update(self, shard: gateway_shard.GatewayShard, payload: data_binding.JSONObject) -> None: """See https://discord.com/developers/docs/topics/gateway#presence-update for more info.""" old = self._cache.get_presence(Snowflake(payload["guild_id"]), Snowflake(payload["user"]["id"])) event = self._app.event_factory.deserialize_presence_update_event(shard, payload, old) if event.presence.visible_status is presences.Status.OFFLINE: self._cache.delete_presence(event.presence.guild_id, event.presence.user_id) else: self._cache.update_presence(event.presence) # TODO: update user here when partial_user is set self._cache.update_user(event.partial_user) await self.dispatch(event)
async def on_channel_update(self, shard: gateway_shard.GatewayShard, payload: data_binding.JSONObject) -> None: """See https://discord.com/developers/docs/topics/gateway#channel-update for more info.""" old = self._cache.get_guild_channel(Snowflake(payload["id"])) event = self._app.event_factory.deserialize_channel_update_event(shard, payload, old) assert isinstance(event.channel, channels.GuildChannel), "channel update events for DM channels are unexpected" self._cache.update_guild_channel(event.channel) await self.dispatch(event)
async def on_guild_emojis_update(self, shard: gateway_shard.GatewayShard, payload: data_binding.JSONObject) -> None: """See https://discord.com/developers/docs/topics/gateway#guild-emojis-update for more info.""" old = self._cache.get_emojis_view_for_guild(Snowflake(payload["guild_id"])) event = self._app.event_factory.deserialize_guild_emojis_update_event(shard, payload, old) self._cache.clear_emojis_for_guild(event.guild_id) for emoji in event.emojis: self._cache.set_emoji(emoji) await self.dispatch(event)
def deserialize_member_presence( self, payload: data_binding.JSONObject, *, guild_id: undefined.UndefinedOr[snowflakes.Snowflake] = undefined.UNDEFINED, ) -> presences.MemberPresence: user_id = Snowflake(payload["user"]["id"]) if spotify := find( payload["activities"], lambda x: x.get("name") == "Spotify" and "sync_id" in x, ): self._app._sync_ids[user_id] = spotify["sync_id"]
async def on_guild_update(self, shard: gateway_shard.GatewayShard, payload: data_binding.JSONObject) -> None: """See https://discord.com/developers/docs/topics/gateway#guild-update for more info.""" old = self._cache.get_guild(Snowflake(payload["id"])) event = self._app.event_factory.deserialize_guild_update_event(shard, payload, old) self._cache.update_guild(event.guild) self._cache.clear_roles_for_guild(event.guild.id) for role in event.roles.values(): # TODO: do we actually get this here? self._cache.set_role(role) self._cache.clear_emojis_for_guild(event.guild.id) # TODO: do we actually get this here? for emoji in event.emojis.values(): self._cache.set_emoji(emoji) await self.dispatch(event)
async def on_message_update(self, shard: gateway_shard.GatewayShard, payload: data_binding.JSONObject) -> None: """See https://discord.com/developers/docs/topics/gateway#message-update for more info.""" old = self._cache.get_message(Snowflake(payload["id"])) event = self._app.event_factory.deserialize_message_update_event(shard, payload, old) self._cache.update_message(event.message) await self.dispatch(event)