Add invite targets for voice channel invites

This commit is contained in:
Zomatree
2021-05-29 05:15:46 +01:00
committed by GitHub
parent f321efd4de
commit b48f510e15
10 changed files with 263 additions and 27 deletions

View File

@ -22,13 +22,22 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
"""
from __future__ import annotations
from typing import TYPE_CHECKING, Optional
from . import utils
from .user import User
from .asset import Asset
from .team import Team
if TYPE_CHECKING:
from .guild import Guild
from .types.appinfo import AppInfo as AppInfoPayload, PartialAppInfo as PartialAppInfoPayload
from .state import ConnectionState
__all__ = (
'AppInfo',
'PartialAppInfo',
)
@ -49,7 +58,7 @@ class AppInfo:
.. versionadded:: 1.3
description: Optional[:class:`str`]
description: :class:`str`
The application description.
bot_public: :class:`bool`
Whether the bot can be invited by anyone or if it is locked
@ -122,9 +131,10 @@ class AppInfo:
'privacy_policy_url',
)
def __init__(self, state, data):
self._state = state
def __init__(self, state, data: AppInfoPayload):
from .team import Team
self._state = state
self.id = int(data['id'])
self.name = data['name']
self.description = data['description']
@ -132,7 +142,7 @@ class AppInfo:
self.rpc_origins = data['rpc_origins']
self.bot_public = data['bot_public']
self.bot_require_code_grant = data['bot_require_code_grant']
self.owner = User(state=self._state, data=data['owner'])
self.owner = state.store_user(data['owner'])
team = data.get('team')
self.team = Team(state, team) if team else None
@ -148,7 +158,7 @@ class AppInfo:
self.terms_of_service_url = data.get('terms_of_service_url')
self.privacy_policy_url = data.get('privacy_policy_url')
def __repr__(self):
def __repr__(self) -> str:
return (
f'<{self.__class__.__name__} id={self.id} name={self.name!r} '
f'description={self.description!r} public={self.bot_public} '
@ -156,14 +166,14 @@ class AppInfo:
)
@property
def icon(self):
def icon(self) -> Optional[Asset]:
"""Optional[:class:`.Asset`]: Retrieves the application's icon asset, if any."""
if self._icon is None:
return None
return Asset._from_icon(self._state, self.id, self._icon, path='app')
@property
def cover_image(self):
def cover_image(self) -> Optional[Asset]:
"""Optional[:class:`.Asset`]: Retrieves the cover image on a store embed, if any.
This is only available if the application is a game sold on Discord.
@ -173,10 +183,61 @@ class AppInfo:
return Asset._from_cover_image(self._state, self.id, self._cover_image)
@property
def guild(self):
def guild(self) -> Optional[Guild]:
"""Optional[:class:`Guild`]: If this application is a game sold on Discord,
this field will be the guild to which it has been linked
.. versionadded:: 1.3
"""
return self._state._get_guild(int(self.guild_id))
return self._state._get_guild(self.guild_id)
class PartialAppInfo:
"""Represents a partial AppInfo given by :func:`~GuildChannel.create_invite`
.. versionadded:: 2.0
Attributes
-------------
id: :class:`int`
The application ID.
name: :class:`str`
The application name.
description: :class:`str`
The application description.
rpc_origins: Optional[List[:class:`str`]]
A list of RPC origin URLs, if RPC is enabled.
summary: :class:`str`
If this application is a game sold on Discord,
this field will be the summary field for the store page of its primary SKU.
verify_key: :class:`str`
The hex encoded key for verification in interactions and the
GameSDK's `GetTicket <https://discord.com/developers/docs/game-sdk/applications#getticket>`_.
terms_of_service_url: Optional[:class:`str`]
The application's terms of service URL, if set.
privacy_policy_url: Optional[:class:`str`]
The application's privacy policy URL, if set.
"""
__slots__ = ('_state', 'id', 'name', 'description', 'rpc_origins', 'summary', 'verify_key', 'terms_of_service_url', 'privacy_policy_url', '_icon')
def __init__(self, *, state: ConnectionState, data: PartialAppInfoPayload):
self._state = state
self.id = int(data['id'])
self.name = data['name']
self._icon = data.get('icon')
self.description = data['description']
self.rpc_origins = data.get('rpc_origins')
self.summary = data['summary']
self.verify_key = data['verify_key']
self.terms_of_service_url = data.get('terms_of_service_url')
self.privacy_policy_url = data.get('privacy_policy_url')
def __repr__(self) -> str:
return f'<{self.__class__.__name__} id={self.id} name={self.name!r} description={self.description!r}>'
@property
def icon(self) -> Optional[Asset]:
"""Optional[:class:`.Asset`]: Retrieves the application's icon asset, if any."""
if self._icon is None:
return None
return Asset._from_icon(self._state, self.id, self._icon, path='app')