Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #8
0
 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)
Beispiel #10
0
 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)