From bb296880c4731114644b8249a77eafa6846f1403 Mon Sep 17 00:00:00 2001 From: dolfies Date: Sun, 3 Sep 2023 22:25:50 -0400 Subject: [PATCH] Fix invite typing issues --- discord/client.py | 1 - discord/guild.py | 10 +++------- discord/http.py | 18 +++++++++--------- discord/stage_instance.py | 2 +- discord/types/gateway.py | 24 ++++++++++++------------ discord/types/invite.py | 25 +++---------------------- 6 files changed, 28 insertions(+), 52 deletions(-) diff --git a/discord/client.py b/discord/client.py index 54a7c707a..50801ff92 100644 --- a/discord/client.py +++ b/discord/client.py @@ -2125,7 +2125,6 @@ class Client: data = await state.http.get_invite( resolved.code, with_counts=True, - with_expiration=True, input_value=resolved.code if isinstance(url, Invite) else url, ) if isinstance(url, Invite): diff --git a/discord/guild.py b/discord/guild.py index d1509b2ea..20b24d0bd 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -3175,7 +3175,7 @@ class Guild(Hashable): data = await self._state.http.invites_from(self.id) result = [] for invite in data: - channel = self.get_channel(int(invite['channel']['id'])) + channel = self.get_channel(int(invite['channel']['id'])) # type: ignore result.append(Invite(state=self._state, data=invite, guild=self, channel=channel)) return result @@ -4301,12 +4301,8 @@ class Guild(Hashable): # Get the vanity channel & uses data = await self._state.http.get_invite(payload['code']) - channel = self.get_channel(int(data['channel']['id'])) - payload['revoked'] = False - payload['temporary'] = False - payload['max_uses'] = 0 - payload['max_age'] = 0 - payload['uses'] = payload.get('uses', 0) + channel = self.get_channel(int(data['channel']['id'])) # type: ignore + data.update({'temporary': False, 'max_uses': 0, 'max_age': 0, 'uses': payload.get('uses', 0)}) # type: ignore return Invite(state=self._state, data=payload, guild=self, channel=channel) # type: ignore # We're faking a payload here async def audit_logs( diff --git a/discord/http.py b/discord/http.py index 4bb77ab06..3154e67d3 100644 --- a/discord/http.py +++ b/discord/http.py @@ -2394,7 +2394,7 @@ class HTTPClient: target_user_id: Optional[Snowflake] = None, target_application_id: Optional[Snowflake] = None, flags: int = 0, - ) -> Response[invite.Invite]: + ) -> Response[invite.InviteWithMetadata]: payload = { 'max_age': max_age, 'max_uses': max_uses, @@ -2423,7 +2423,7 @@ class HTTPClient: context_properties=props, ) - def create_group_invite(self, channel_id: Snowflake, *, max_age: int = 86400) -> Response[invite.Invite]: + def create_group_invite(self, channel_id: Snowflake, *, max_age: int = 86400) -> Response[invite.InviteWithMetadata]: payload = { 'max_age': max_age, } @@ -2433,7 +2433,7 @@ class HTTPClient: Route('POST', '/channels/{channel_id}/invites', channel_id=channel_id), json=payload, context_properties=props ) - def create_friend_invite(self) -> Response[invite.Invite]: + def create_friend_invite(self) -> Response[invite.InviteWithMetadata]: return self.request(Route('POST', '/users/@me/invites'), json={}, context_properties=ContextProperties.empty()) def get_invite( @@ -2443,7 +2443,7 @@ class HTTPClient: with_counts: bool = True, guild_scheduled_event_id: Optional[Snowflake] = None, input_value: Optional[str] = None, - ) -> Response[invite.Invite]: + ) -> Response[Union[invite.PartialInvite, invite.InviteWithCounts]]: params: Dict[str, Any] = { 'with_counts': str(with_counts).lower(), 'with_expiration': 'true', # No longer exists @@ -2455,19 +2455,19 @@ class HTTPClient: return self.request(Route('GET', '/invites/{invite_id}', invite_id=invite_id), params=params) - def invites_from(self, guild_id: Snowflake) -> Response[List[invite.Invite]]: + def invites_from(self, guild_id: Snowflake) -> Response[List[invite.InviteWithMetadata]]: return self.request(Route('GET', '/guilds/{guild_id}/invites', guild_id=guild_id)) - def invites_from_channel(self, channel_id: Snowflake) -> Response[List[invite.Invite]]: + def invites_from_channel(self, channel_id: Snowflake) -> Response[List[invite.InviteWithMetadata]]: return self.request(Route('GET', '/channels/{channel_id}/invites', channel_id=channel_id)) - def get_friend_invites(self) -> Response[List[invite.Invite]]: + def get_friend_invites(self) -> Response[List[invite.InviteWithMetadata]]: return self.request(Route('GET', '/users/@me/invites'), context_properties=ContextProperties.empty()) - def delete_invite(self, invite_id: str, *, reason: Optional[str] = None) -> Response[invite.Invite]: + def delete_invite(self, invite_id: str, *, reason: Optional[str] = None) -> Response[invite.InviteWithMetadata]: return self.request(Route('DELETE', '/invites/{invite_id}', invite_id=invite_id), reason=reason) - def delete_friend_invites(self) -> Response[List[invite.Invite]]: + def delete_friend_invites(self) -> Response[List[invite.InviteWithMetadata]]: return self.request(Route('DELETE', '/users/@me/invites'), context_properties=ContextProperties.empty()) # Role management diff --git a/discord/stage_instance.py b/discord/stage_instance.py index f8aee8975..fa7839f2e 100644 --- a/discord/stage_instance.py +++ b/discord/stage_instance.py @@ -26,7 +26,7 @@ from __future__ import annotations from typing import List, Optional, TYPE_CHECKING -from .utils import MISSING, cached_slot_property, _get_as_snowflake +from .utils import MISSING, _get_as_snowflake from .mixins import Hashable from .enums import PrivacyLevel, try_enum diff --git a/discord/types/gateway.py b/discord/types/gateway.py index 445fdf0f9..5f74cf059 100644 --- a/discord/types/gateway.py +++ b/discord/types/gateway.py @@ -29,7 +29,7 @@ from typing import List, Literal, Optional, TypedDict, Union from typing_extensions import NotRequired, Required from .activity import Activity, ClientStatus, PartialPresenceUpdate, StatusType -from .application import BaseAchievement, PartialApplication +from .application import BaseAchievement from .audit_log import AuditLogEntry from .automod import AutoModerationAction, AutoModerationRuleTriggerType from .channel import ChannelType, DMChannel, GroupDMChannel, StageInstance @@ -39,7 +39,7 @@ from .experiment import GuildExperiment, UserExperiment from .guild import ApplicationCommandCounts, Guild, SupplementalGuild, UnavailableGuild from .integration import BaseIntegration, IntegrationApplication from .interactions import Interaction -from .invite import InviteTargetType +from .invite import _InviteTargetType from .library import LibraryApplication from .member import MemberWithUser from .message import Message @@ -211,25 +211,25 @@ InteractionCreateEvent = Interaction UserUpdateEvent = User -class InviteCreateEvent(TypedDict): - channel_id: Snowflake +class InviteCreateEvent(_InviteTargetType): code: str + type: Literal[0] + channel_id: Snowflake + guild_id: Snowflake + inviter: NotRequired[PartialUser] + expires_at: Optional[str] created_at: str + uses: int max_age: int max_uses: int temporary: bool - uses: Literal[0] - guild_id: NotRequired[Snowflake] - inviter: NotRequired[PartialUser] - target_type: NotRequired[InviteTargetType] - target_user: NotRequired[PartialUser] - target_application: NotRequired[PartialApplication] + flags: NotRequired[int] class InviteDeleteEvent(TypedDict): - channel_id: Snowflake code: str - guild_id: NotRequired[Snowflake] + channel_id: Snowflake + guild_id: Snowflake class _ChannelEvent(TypedDict): diff --git a/discord/types/invite.py b/discord/types/invite.py index 159d57b3c..192399954 100644 --- a/discord/types/invite.py +++ b/discord/types/invite.py @@ -29,6 +29,7 @@ from typing_extensions import NotRequired from .application import PartialApplication from .channel import InviteStageInstance, PartialChannel +from .gateway import InviteCreateEvent, InviteDeleteEvent from .guild import InviteGuild, _GuildCounts from .scheduled_event import GuildScheduledEvent from .snowflake import Snowflake @@ -51,7 +52,7 @@ class _InviteTargetType(TypedDict, total=False): target_application: PartialApplication -class VanityInvite: +class VanityInvite(TypedDict): code: Optional[str] uses: int @@ -80,25 +81,5 @@ class InviteWithMetadata(PartialInvite, _InviteMetadata): Invite = Union[PartialInvite, InviteWithCounts, InviteWithMetadata] -class GatewayInviteCreate(_InviteTargetType): - code: str - type: Literal[0] - channel_id: Snowflake - guild_id: Snowflake - inviter: NotRequired[PartialUser] - expires_at: Optional[str] - created_at: str - uses: int - max_age: int - max_uses: int - temporary: bool - flags: NotRequired[int] - - -class GatewayInviteDelete(TypedDict): - code: str - channel_id: Snowflake - guild_id: Snowflake - -GatewayInvite = Union[GatewayInviteCreate, GatewayInviteDelete] +GatewayInvite = Union[InviteCreateEvent, InviteDeleteEvent]