diff --git a/revolt/asset.py b/revolt/asset.py index 9339c53..3efa3d7 100644 --- a/revolt/asset.py +++ b/revolt/asset.py @@ -36,6 +36,8 @@ class Asset: type: :class:`AssetType` The type of asset it is """ + __slots__ = ("state", "id", "tag", "size", "filename", "content_type", "width", "height", "type") + def __init__(self, data: FilePayload, state: State): self.state = state @@ -54,7 +56,6 @@ class Asset: self.width = None self.content_type = data["content_type"] - self.type = AssetType(metadata["type"]) async def read(self) -> bytes: diff --git a/revolt/channel.py b/revolt/channel.py index f59a5af..3839e6f 100644 --- a/revolt/channel.py +++ b/revolt/channel.py @@ -29,6 +29,8 @@ class Channel: server: Optional[:class:`Server`] The server the channel is part of """ + __slots__ = ("state", "id", "channel_type", "server") + def __init__(self, data: ChannelPayload, state: State): self.state = state self.id = data["_id"] @@ -46,6 +48,8 @@ class DMChannel(Channel, Messageable): super().__init__(data, state) class GroupDMChannel(Channel, Messageable): + __slots__ = ("recipients", "name", "owner") + """A group DM channel""" def __init__(self, data: GroupDMChannelPayload, state: State): super().__init__(data, state) @@ -54,6 +58,8 @@ class GroupDMChannel(Channel, Messageable): self.owner = state.get_user(data["owner"]) class TextChannel(Channel, Messageable): + __slots__ = ("name", "description", "last_message", "last_message_id") + """A text channel""" def __init__(self, data: TextChannelPayload, state: State): super().__init__(data, state) @@ -84,4 +90,4 @@ def channel_factory(data: ChannelPayload, state: State) -> Channel: elif data["channel_type"] == "VoiceChannel": return VoiceChannel(data, state) else: - raise Exception + raise Exception \ No newline at end of file diff --git a/revolt/client.py b/revolt/client.py index d5ccf6d..5fd4739 100644 --- a/revolt/client.py +++ b/revolt/client.py @@ -40,6 +40,8 @@ class Client: max_messages: :class:`int` The max amount of messages stored in the cache, by default this is 5k """ + __slots__ = ("session", "token", "api_url", "max_messages", "api_info", "http", "state", "websocket", "listeners") + def __init__(self, session: aiohttp.ClientSession, token: str, api_url: str = "https://api.revolt.chat", max_messages: int = 5000): self.session = session self.token = token diff --git a/revolt/file.py b/revolt/file.py index c37cabe..12642e8 100644 --- a/revolt/file.py +++ b/revolt/file.py @@ -16,6 +16,8 @@ class File: spoiler: bool Determines if the file will be a spoiler, this prefexes the filename with `SPOILER_` """ + __slots__ = ("f", "spoiler", "filename") + def __init__(self, file: Union[str, bytes], *, filename: Optional[str] = None, spoiler: bool = False): if isinstance(file, str): self.f = open(file, "rb") @@ -25,12 +27,9 @@ class File: if filename is None and isinstance(file, str): filename = self.f.name - if spoiler or (filename and filename.startswith("SPOILER_")): - self.spoiler = True - else: - self.spoiler = False + self.spoiler = spoiler or (filename and filename.startswith("SPOILER_")) if self.spoiler and (filename and not filename.startswith("SPOILER_")): filename = f"SPOILER_{filename}" - self.filename = filename + self.filename = filename \ No newline at end of file diff --git a/revolt/http.py b/revolt/http.py index c2338f7..b3329ef 100644 --- a/revolt/http.py +++ b/revolt/http.py @@ -36,6 +36,8 @@ T = TypeVar("T") Request = Coroutine[Any, Any, T] class HttpClient: + __slots__ = ("session", "token", "api_url", "api_info") + def __init__(self, session: aiohttp.ClientSession, token: str, api_url: str, api_info: ApiInfo): self.session = session self.token = token diff --git a/revolt/member.py b/revolt/member.py index 97b985b..016e7c9 100644 --- a/revolt/member.py +++ b/revolt/member.py @@ -28,6 +28,8 @@ class Member(User): server: :class:`Server` The server the member belongs to """ + __slots__ = ("_state", "nickname", "roles", "server") + def __init__(self, data: MemberPayload, server: Server, state: State): user = state.get_user(data["_id"]["user"]) assert user diff --git a/revolt/message.py b/revolt/message.py index a8ad6f7..163e80d 100644 --- a/revolt/message.py +++ b/revolt/message.py @@ -33,6 +33,8 @@ class Message: author: Union[:class:`Member`, :class:`User`] The author of the message, will be :class:`User` in DMs """ + __slots__ = ("state", "id", "content", "attachments", "embeds", "channel", "server", "author") + def __init__(self, data: MessagePayload, state: State): self.state = state diff --git a/revolt/messageable.py b/revolt/messageable.py index 769aeb7..043ad0a 100644 --- a/revolt/messageable.py +++ b/revolt/messageable.py @@ -20,6 +20,8 @@ class Messageable: The id of the channel """ id: str + + __slots__ = ("state", "id") def __init__(self, state: State): self.state = state @@ -47,4 +49,4 @@ class Messageable: embed_payload = [embed.to_dict() for embed in embeds] if embeds else None message = await self.state.http.send_message(self.id, content, embed_payload, attachments) - return self.state.add_message(message) + return self.state.add_message(message) \ No newline at end of file diff --git a/revolt/role.py b/revolt/role.py index 23cd5ac..099e35a 100644 --- a/revolt/role.py +++ b/revolt/role.py @@ -25,9 +25,15 @@ class Role: rank: :class:`int` The position of the role in the role heirarchy """ + __slots__ = ("id", "name", "colour", "hoist", "rank") + def __init__(self, data: RolePayload, role_id: str, state: State): self.id = role_id self.name = data["name"] self.colour = data.get("colour") self.hoist = data.get("hoist", False) self.rank = data.get("rank", 0) + + @property + def color(self): + return self.colour \ No newline at end of file diff --git a/revolt/server.py b/revolt/server.py index 3750961..de56e65 100644 --- a/revolt/server.py +++ b/revolt/server.py @@ -26,6 +26,8 @@ class Server: owner: Optional[:class:`Member`] The owner of the server """ + __slots__ = ("state", "id", "name", "owner", "default_permissions", "_members", "_roles", "_channels") + def __init__(self, data: ServerPayload, state: State): self.state = state self.id = data["_id"] diff --git a/revolt/state.py b/revolt/state.py index 9b11334..27047de 100644 --- a/revolt/state.py +++ b/revolt/state.py @@ -22,6 +22,8 @@ if TYPE_CHECKING: __all__ = ("State",) class State: + __slots__ = ("http", "api_info", "max_messages", "users", "channels", "servers", "messages") + def __init__(self, http: HttpClient, api_info: ApiInfo, max_messages: int): self.http = http self.api_info = api_info @@ -38,10 +40,8 @@ class State: def get_member(self, server_id: str, member_id: str) -> Optional[Member]: server = self.servers.get(server_id) - if not server: - return - - return server.get_member(member_id) + if server: + return server.get_member(member_id) def get_channel(self, id: str) -> Optional[Channel]: return self.channels.get(id) diff --git a/revolt/user.py b/revolt/user.py index 8af2089..c2a2df4 100644 --- a/revolt/user.py +++ b/revolt/user.py @@ -52,6 +52,7 @@ class User: The users status """ __flattern_attributes__ = ("id", "name", "bot", "owner", "badges", "online", "flags", "avatar", "relations", "relationship", "status") + __slots__ = (*__flattern_attributes__, "state") def __init__(self, data: UserPayload, state: State): self.state = state diff --git a/revolt/websocket.py b/revolt/websocket.py index e481114..d91251b 100644 --- a/revolt/websocket.py +++ b/revolt/websocket.py @@ -31,6 +31,8 @@ __all__ = ("WebsocketHandler",) logger = logging.getLogger("revolt") class WebsocketHandler: + __slots__ = ("session", "token", "ws_url", "dispatch", "state", "websocket", "loop") + def __init__(self, session: aiohttp.ClientSession, token: str, ws_url: str, dispatch: Callable[..., None], state: State): self.session = session self.token = token