Source code for voltage.invites

from __future__ import annotations

from typing import TYPE_CHECKING, Union

# internal imports
from .asset import Asset
from .utils import get

if TYPE_CHECKING:
    from .internals import CacheHandler
    from .types import InvitePayload, PartialInvitePayload


[docs]class Invite: """ A class which represents a Voltage invite. Attributes ---------- code: :class:`str` The invite code. type: :class:`str` The invite type. server_id: :class:`str` The server ID. server: :class:`Server` The server the invite is for. channel_id: :class:`str` The channel ID. channel: :class:`Channel` The channel the invite is for. member_count: :class:`int` The member count. author_name: :class:`str` The author name. user: :class:`User` The user who created the invite. avatar: :class:`Asset` The avatar of the user who created the invite. """ __slots__ = ( "code", "type", "payload", "server_id", "server", "channel_id", "channel", "member_count", "user", "cache", ) def __init__(self, data: InvitePayload, code: str, cache: CacheHandler): self.code = code self.type = data["type"] self.payload: Union[InvitePayload, PartialInvitePayload] = data self.server_id = data["server_id"] self.server = cache.get_server(self.server_id) self.channel_id = data["channel_id"] self.channel = cache.get_channel(self.channel_id) self.member_count = data["member_count"] self.user = get(cache.users.values(), lambda x: x.name == data["user_name"]) self.cache = cache
[docs] @staticmethod def from_partial(code: str, data: PartialInvitePayload, cache: CacheHandler) -> Invite: """ A utility function that creates an Invite object from a partial payload. Parameters ---------- code: :class:`str` The invite code. data: :class:`PartialInvitePayload` The partial payload. cache: :class:`CacheHandler` The cache handler. """ self = Invite.__new__(Invite) self.code = code self.payload = data self.cache = cache self.type = "Server" self.server_id = data["server"] self.server = cache.get_server(self.server_id) self.member_count = len(self.server.members) self.channel_id = data["channel"] self.channel = cache.get_channel(self.channel_id) self.user = cache.get_user(data["creator"]) return self
@property def url(self) -> str: """Returns the invite URL.""" return f"https://rvlt.gg/{self.code}" async def delete(self): return await self.cache.http.delete_invite(self.code)