mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-07-13 05:15:22 +00:00
Implement editing application info
This commit is contained in:
parent
9810cb9936
commit
56c67d3967
@ -30,8 +30,11 @@ from . import utils
|
|||||||
from .asset import Asset
|
from .asset import Asset
|
||||||
from .flags import ApplicationFlags
|
from .flags import ApplicationFlags
|
||||||
from .permissions import Permissions
|
from .permissions import Permissions
|
||||||
|
from .utils import MISSING
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
from typing import Dict, Any
|
||||||
|
|
||||||
from .guild import Guild
|
from .guild import Guild
|
||||||
from .types.appinfo import (
|
from .types.appinfo import (
|
||||||
AppInfo as AppInfoPayload,
|
AppInfo as AppInfoPayload,
|
||||||
@ -131,6 +134,15 @@ class AppInfo:
|
|||||||
a verification method in the guild's role verification configuration.
|
a verification method in the guild's role verification configuration.
|
||||||
|
|
||||||
.. versionadded:: 2.2
|
.. versionadded:: 2.2
|
||||||
|
interactions_endpoint_url: Optional[:class:`str`]
|
||||||
|
The interactions endpoint url of the application to receive interactions over this endpoint rather than
|
||||||
|
over the gateway, if configured.
|
||||||
|
|
||||||
|
.. versionadded:: 2.4
|
||||||
|
redirect_uris: List[:class:`str`]
|
||||||
|
A list of authentication redirect URIs.
|
||||||
|
|
||||||
|
.. versionadded:: 2.4
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = (
|
__slots__ = (
|
||||||
@ -156,6 +168,8 @@ class AppInfo:
|
|||||||
'custom_install_url',
|
'custom_install_url',
|
||||||
'install_params',
|
'install_params',
|
||||||
'role_connections_verification_url',
|
'role_connections_verification_url',
|
||||||
|
'interactions_endpoint_url',
|
||||||
|
'redirect_uris',
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, state: ConnectionState, data: AppInfoPayload):
|
def __init__(self, state: ConnectionState, data: AppInfoPayload):
|
||||||
@ -190,6 +204,8 @@ class AppInfo:
|
|||||||
|
|
||||||
params = data.get('install_params')
|
params = data.get('install_params')
|
||||||
self.install_params: Optional[AppInstallParams] = AppInstallParams(params) if params else None
|
self.install_params: Optional[AppInstallParams] = AppInstallParams(params) if params else None
|
||||||
|
self.interactions_endpoint_url: Optional[str] = data.get('interactions_endpoint_url')
|
||||||
|
self.redirect_uris: List[str] = data.get('redirect_uris', [])
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return (
|
return (
|
||||||
@ -232,6 +248,138 @@ class AppInfo:
|
|||||||
"""
|
"""
|
||||||
return ApplicationFlags._from_value(self._flags)
|
return ApplicationFlags._from_value(self._flags)
|
||||||
|
|
||||||
|
async def edit(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
reason: Optional[str] = MISSING,
|
||||||
|
custom_install_url: Optional[str] = MISSING,
|
||||||
|
description: Optional[str] = MISSING,
|
||||||
|
role_connections_verification_url: Optional[str] = MISSING,
|
||||||
|
install_params_scopes: Optional[List[str]] = MISSING,
|
||||||
|
install_params_permissions: Optional[Permissions] = MISSING,
|
||||||
|
flags: Optional[ApplicationFlags] = MISSING,
|
||||||
|
icon: Optional[bytes] = MISSING,
|
||||||
|
cover_image: Optional[bytes] = MISSING,
|
||||||
|
interactions_endpoint_url: Optional[str] = MISSING,
|
||||||
|
tags: Optional[List[str]] = MISSING,
|
||||||
|
) -> AppInfo:
|
||||||
|
r"""|coro|
|
||||||
|
|
||||||
|
Edits the application info.
|
||||||
|
|
||||||
|
.. versionadded:: 2.4
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
custom_install_url: Optional[:class:`str`]
|
||||||
|
The new custom authorization URL for the application. Can be ``None`` to remove the URL.
|
||||||
|
description: Optional[:class:`str`]
|
||||||
|
The new application description. Can be ``None`` to remove the description.
|
||||||
|
role_connections_verification_url: Optional[:class:`str`]
|
||||||
|
The new application’s connection verification URL which will render the application
|
||||||
|
as a verification method in the guild’s role verification configuration. Can be ``None`` to remove the URL.
|
||||||
|
install_params_scopes: Optional[List[:class:`str`]]
|
||||||
|
The new list of :ddocs:`OAuth2 scopes <topics/oauth2#shared-resources-oauth2-scopes>` of
|
||||||
|
the :attr:`~install_params`. Can be ``None`` to remove the scopes.
|
||||||
|
install_params_permissions: Optional[:class:`Permissions`]
|
||||||
|
The new permissions of the :attr:`~install_params`. Can be ``None`` to remove the permissions.
|
||||||
|
flags: Optional[:class:`ApplicationFlags`]
|
||||||
|
The new application’s flags. Only limited intent flags (:attr:`~ApplicationFlags.gateway_presence_limited`,
|
||||||
|
:attr:`~ApplicationFlags.gateway_guild_members_limited`, :attr:`~ApplicationFlags.gateway_message_content_limited`)
|
||||||
|
can be edited. Can be ``None`` to remove the flags.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
Editing the limited intent flags leads to the termination of the bot.
|
||||||
|
|
||||||
|
icon: Optional[:class:`bytes`]
|
||||||
|
The new application’s icon as a :term:`py:bytes-like object`. Can be ``None`` to remove the icon.
|
||||||
|
cover_image: Optional[:class:`bytes`]
|
||||||
|
The new application’s cover image as a :term:`py:bytes-like object` on a store embed.
|
||||||
|
The cover image is only available if the application is a game sold on Discord.
|
||||||
|
Can be ``None`` to remove the image.
|
||||||
|
interactions_endpoint_url: Optional[:class:`str`]
|
||||||
|
The new interactions endpoint url of the application to receive interactions over this endpoint rather than
|
||||||
|
over the gateway. Can be ``None`` to remove the URL.
|
||||||
|
tags: Optional[List[:class:`str`]]
|
||||||
|
The new list of tags describing the functionality of the application. Can be ``None`` to remove the tags.
|
||||||
|
reason: Optional[:class:`str`]
|
||||||
|
The reason for editing the application. Shows up on the audit log.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
-------
|
||||||
|
HTTPException
|
||||||
|
Editing the application failed
|
||||||
|
ValueError
|
||||||
|
The image format passed in to ``icon`` or ``cover_image`` is invalid. This is also raised
|
||||||
|
when ``install_params_scopes`` and ``install_params_permissions`` are incompatible with each other.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
:class:`AppInfo`
|
||||||
|
The newly updated application info.
|
||||||
|
"""
|
||||||
|
payload: Dict[str, Any] = {}
|
||||||
|
|
||||||
|
if custom_install_url is not MISSING:
|
||||||
|
payload['custom_install_url'] = custom_install_url
|
||||||
|
|
||||||
|
if description is not MISSING:
|
||||||
|
payload['description'] = description
|
||||||
|
|
||||||
|
if role_connections_verification_url is not MISSING:
|
||||||
|
payload['role_connections_verification_url'] = role_connections_verification_url
|
||||||
|
|
||||||
|
if install_params_scopes is not MISSING:
|
||||||
|
install_params: Optional[Dict[str, Any]] = {}
|
||||||
|
if install_params_scopes is None:
|
||||||
|
install_params = None
|
||||||
|
else:
|
||||||
|
if "bot" not in install_params_scopes and install_params_permissions is not MISSING:
|
||||||
|
raise ValueError("'bot' must be in install_params_scopes if install_params_permissions is set")
|
||||||
|
|
||||||
|
install_params['scopes'] = install_params_scopes
|
||||||
|
|
||||||
|
if install_params_permissions is MISSING:
|
||||||
|
install_params['permissions'] = 0
|
||||||
|
else:
|
||||||
|
if install_params_permissions is None:
|
||||||
|
install_params['permissions'] = 0
|
||||||
|
else:
|
||||||
|
install_params['permissions'] = install_params_permissions.value
|
||||||
|
|
||||||
|
payload['install_params'] = install_params
|
||||||
|
|
||||||
|
else:
|
||||||
|
if install_params_permissions is not MISSING:
|
||||||
|
raise ValueError("install_params_scopes must be set if install_params_permissions is set")
|
||||||
|
|
||||||
|
if flags is not MISSING:
|
||||||
|
if flags is None:
|
||||||
|
payload['flags'] = flags
|
||||||
|
else:
|
||||||
|
payload['flags'] = flags.value
|
||||||
|
|
||||||
|
if icon is not MISSING:
|
||||||
|
if icon is None:
|
||||||
|
payload['icon'] = icon
|
||||||
|
else:
|
||||||
|
payload['icon'] = utils._bytes_to_base64_data(icon)
|
||||||
|
|
||||||
|
if cover_image is not MISSING:
|
||||||
|
if cover_image is None:
|
||||||
|
payload['cover_image'] = cover_image
|
||||||
|
else:
|
||||||
|
payload['cover_image'] = utils._bytes_to_base64_data(cover_image)
|
||||||
|
|
||||||
|
if interactions_endpoint_url is not MISSING:
|
||||||
|
payload['interactions_endpoint_url'] = interactions_endpoint_url
|
||||||
|
|
||||||
|
if tags is not MISSING:
|
||||||
|
payload['tags'] = tags
|
||||||
|
data = await self._state.http.edit_application_info(reason=reason, payload=payload)
|
||||||
|
return AppInfo(data=data, state=self._state)
|
||||||
|
|
||||||
|
|
||||||
class PartialAppInfo:
|
class PartialAppInfo:
|
||||||
"""Represents a partial AppInfo given by :func:`~discord.abc.GuildChannel.create_invite`
|
"""Represents a partial AppInfo given by :func:`~discord.abc.GuildChannel.create_invite`
|
||||||
|
@ -2456,6 +2456,22 @@ class HTTPClient:
|
|||||||
def application_info(self) -> Response[appinfo.AppInfo]:
|
def application_info(self) -> Response[appinfo.AppInfo]:
|
||||||
return self.request(Route('GET', '/oauth2/applications/@me'))
|
return self.request(Route('GET', '/oauth2/applications/@me'))
|
||||||
|
|
||||||
|
def edit_application_info(self, *, reason: Optional[str], payload: Any) -> Response[appinfo.AppInfo]:
|
||||||
|
valid_keys = (
|
||||||
|
'custom_install_url',
|
||||||
|
'description',
|
||||||
|
'role_connections_verification_url',
|
||||||
|
'install_params',
|
||||||
|
'flags',
|
||||||
|
'icon',
|
||||||
|
'cover_image',
|
||||||
|
'interactions_endpoint_url ',
|
||||||
|
'tags',
|
||||||
|
)
|
||||||
|
|
||||||
|
payload = {k: v for k, v in payload.items() if k in valid_keys}
|
||||||
|
return self.request(Route('PATCH', '/applications/@me'), json=payload, reason=reason)
|
||||||
|
|
||||||
async def get_gateway(self, *, encoding: str = 'json', zlib: bool = True) -> str:
|
async def get_gateway(self, *, encoding: str = 'json', zlib: bool = True) -> str:
|
||||||
try:
|
try:
|
||||||
data = await self.request(Route('GET', '/gateway'))
|
data = await self.request(Route('GET', '/gateway'))
|
||||||
|
@ -49,6 +49,9 @@ class BaseAppInfo(TypedDict):
|
|||||||
terms_of_service_url: NotRequired[str]
|
terms_of_service_url: NotRequired[str]
|
||||||
privacy_policy_url: NotRequired[str]
|
privacy_policy_url: NotRequired[str]
|
||||||
rpc_origins: NotRequired[List[str]]
|
rpc_origins: NotRequired[List[str]]
|
||||||
|
interactions_endpoint_url: NotRequired[Optional[str]]
|
||||||
|
redirect_uris: NotRequired[List[str]]
|
||||||
|
role_connections_verification_url: NotRequired[Optional[str]]
|
||||||
|
|
||||||
|
|
||||||
class AppInfo(BaseAppInfo):
|
class AppInfo(BaseAppInfo):
|
||||||
@ -64,16 +67,12 @@ class AppInfo(BaseAppInfo):
|
|||||||
tags: NotRequired[List[str]]
|
tags: NotRequired[List[str]]
|
||||||
install_params: NotRequired[InstallParams]
|
install_params: NotRequired[InstallParams]
|
||||||
custom_install_url: NotRequired[str]
|
custom_install_url: NotRequired[str]
|
||||||
role_connections_verification_url: NotRequired[str]
|
|
||||||
|
|
||||||
|
|
||||||
class PartialAppInfo(BaseAppInfo, total=False):
|
class PartialAppInfo(BaseAppInfo, total=False):
|
||||||
hook: bool
|
hook: bool
|
||||||
max_participants: int
|
max_participants: int
|
||||||
approximate_guild_count: int
|
approximate_guild_count: int
|
||||||
redirect_uris: List[str]
|
|
||||||
interactions_endpoint_url: Optional[str]
|
|
||||||
role_connections_verification_url: Optional[str]
|
|
||||||
|
|
||||||
|
|
||||||
class GatewayAppInfo(TypedDict):
|
class GatewayAppInfo(TypedDict):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user