diff --git a/discord/appinfo.py b/discord/appinfo.py index 79be2035f8fd..95a6e14d2955 100644 --- a/discord/appinfo.py +++ b/discord/appinfo.py @@ -42,6 +42,7 @@ Team as TeamPayload, InstallParams as InstallParamsPayload, ) + from .types.user import User as UserPayload from .user import User from .state import ConnectionState @@ -142,6 +143,10 @@ class AppInfo: redirect_uris: List[:class:`str`] A list of authentication redirect URIs. + .. versionadded:: 2.4 + bot: Optional[:class:`User`] + The bot user, if this application belongs to a bot. + .. versionadded:: 2.4 """ @@ -153,6 +158,7 @@ class AppInfo: 'rpc_origins', 'bot_public', 'bot_require_code_grant', + 'bot', 'owner', '_icon', 'verify_key', @@ -188,6 +194,9 @@ def __init__(self, state: ConnectionState, data: AppInfoPayload): team: Optional[TeamPayload] = data.get('team') self.team: Optional[Team] = Team(state, team) if team else None + bot: Optional[UserPayload] = data.get('bot') + self.bot: Optional[User] = state.create_user(bot) if bot else None + self.verify_key: str = data['verify_key'] self.guild_id: Optional[int] = utils._get_as_snowflake(data, 'guild_id') diff --git a/discord/client.py b/discord/client.py index b3243ef93bd4..44717cde3965 100644 --- a/discord/client.py +++ b/discord/client.py @@ -613,8 +613,8 @@ async def login(self, token: str) -> None: token = token.strip() data = await self.http.static_login(token) - self._connection.user = ClientUser(state=self._connection, data=data) - self._application = await self.application_info() + self._connection.user = ClientUser(state=self._connection, data=data['bot']) # type: ignore + self._application = AppInfo(self._connection, data) if self._connection.application_id is None: self._connection.application_id = self._application.id diff --git a/discord/http.py b/discord/http.py index 0979942a980e..d93273d571d4 100644 --- a/discord/http.py +++ b/discord/http.py @@ -789,7 +789,7 @@ async def close(self) -> None: # login management - async def static_login(self, token: str) -> user.User: + async def static_login(self, token: str) -> appinfo.AppInfo: # Necessary to get aiohttp to stop complaining about session creation if self.connector is MISSING: # discord does not support ipv6 @@ -807,7 +807,7 @@ async def static_login(self, token: str) -> user.User: self.token = token try: - data = await self.request(Route('GET', '/users/@me')) + data = await self.application_info() except HTTPException as exc: self.token = old_token if exc.status == 401: diff --git a/discord/types/appinfo.py b/discord/types/appinfo.py index e291babfa3e0..00ace4340c2c 100644 --- a/discord/types/appinfo.py +++ b/discord/types/appinfo.py @@ -58,6 +58,7 @@ class AppInfo(BaseAppInfo): owner: User bot_public: bool bot_require_code_grant: bool + bot: NotRequired[User] team: NotRequired[Team] guild_id: NotRequired[Snowflake] primary_sku_id: NotRequired[Snowflake]