Browse Source

Fix typings for member HTTP methods

pull/7476/head
Rapptz 4 years ago
parent
commit
cff9ca0288
  1. 124
      discord/http.py
  2. 4
      discord/member.py
  3. 7
      discord/types/member.py
  4. 4
      discord/types/voice.py

124
discord/http.py

@ -141,7 +141,8 @@ class MaybeUnlock:
def defer(self) -> None: def defer(self) -> None:
self._unlock = False self._unlock = False
def __exit__(self, def __exit__(
self,
exc_type: Optional[Type[BE]], exc_type: Optional[Type[BE]],
exc: Optional[BE], exc: Optional[BE],
traceback: Optional[TracebackType], traceback: Optional[TracebackType],
@ -152,7 +153,7 @@ class MaybeUnlock:
# For some reason, the Discord voice websocket expects this header to be # For some reason, the Discord voice websocket expects this header to be
# completely lowercase while aiohttp respects spec and does it as case-insensitive # completely lowercase while aiohttp respects spec and does it as case-insensitive
aiohttp.hdrs.WEBSOCKET = 'websocket' #type: ignore aiohttp.hdrs.WEBSOCKET = 'websocket' # type: ignore
class HTTPClient: class HTTPClient:
@ -165,7 +166,7 @@ class HTTPClient:
proxy: Optional[str] = None, proxy: Optional[str] = None,
proxy_auth: Optional[aiohttp.BasicAuth] = None, proxy_auth: Optional[aiohttp.BasicAuth] = None,
loop: Optional[asyncio.AbstractEventLoop] = None, loop: Optional[asyncio.AbstractEventLoop] = None,
unsync_clock: bool = True unsync_clock: bool = True,
) -> None: ) -> None:
self.loop: asyncio.AbstractEventLoop = asyncio.get_event_loop() if loop is None else loop self.loop: asyncio.AbstractEventLoop = asyncio.get_event_loop() if loop is None else loop
self.connector = connector self.connector = connector
@ -209,7 +210,7 @@ class HTTPClient:
*, *,
files: Optional[Sequence[File]] = None, files: Optional[Sequence[File]] = None,
form: Optional[Iterable[Dict[str, Any]]] = None, form: Optional[Iterable[Dict[str, Any]]] = None,
**kwargs: Any **kwargs: Any,
) -> Any: ) -> Any:
bucket = route.bucket bucket = route.bucket
method = route.method method = route.method
@ -547,11 +548,15 @@ class HTTPClient:
components=components, components=components,
) )
def delete_message(self, channel_id: Snowflake, message_id: Snowflake, *, reason: Optional[str] = None) -> Response[None]: def delete_message(
self, channel_id: Snowflake, message_id: Snowflake, *, reason: Optional[str] = None
) -> Response[None]:
r = Route('DELETE', '/channels/{channel_id}/messages/{message_id}', channel_id=channel_id, message_id=message_id) r = Route('DELETE', '/channels/{channel_id}/messages/{message_id}', channel_id=channel_id, message_id=message_id)
return self.request(r, reason=reason) return self.request(r, reason=reason)
def delete_messages(self, channel_id: Snowflake, message_ids: SnowflakeList, *, reason: Optional[str] = None) -> Response[None]: def delete_messages(
self, channel_id: Snowflake, message_ids: SnowflakeList, *, reason: Optional[str] = None
) -> Response[None]:
r = Route('POST', '/channels/{channel_id}/messages/bulk-delete', channel_id=channel_id) r = Route('POST', '/channels/{channel_id}/messages/bulk-delete', channel_id=channel_id)
payload = { payload = {
'messages': message_ids, 'messages': message_ids,
@ -573,7 +578,9 @@ class HTTPClient:
) )
return self.request(r) return self.request(r)
def remove_reaction(self, channel_id: Snowflake, message_id: Snowflake, emoji: str, member_id: Snowflake) -> Response[None]: def remove_reaction(
self, channel_id: Snowflake, message_id: Snowflake, emoji: str, member_id: Snowflake
) -> Response[None]:
r = Route( r = Route(
'DELETE', 'DELETE',
'/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/{member_id}', '/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/{member_id}',
@ -789,7 +796,7 @@ class HTTPClient:
*, *,
reason: Optional[str] = None, reason: Optional[str] = None,
**fields: Any, **fields: Any,
) -> Response[member.Member]: ) -> Response[member.MemberWithUser]:
r = Route('PATCH', '/guilds/{guild_id}/members/{user_id}', guild_id=guild_id, user_id=user_id) r = Route('PATCH', '/guilds/{guild_id}/members/{user_id}', guild_id=guild_id, user_id=user_id)
return self.request(r, json=fields, reason=reason) return self.request(r, json=fields, reason=reason)
@ -1122,7 +1129,9 @@ class HTTPClient:
def get_all_guild_channels(self, guild_id: Snowflake) -> Response[List[guild.GuildChannel]]: def get_all_guild_channels(self, guild_id: Snowflake) -> Response[List[guild.GuildChannel]]:
return self.request(Route('GET', '/guilds/{guild_id}/channels', guild_id=guild_id)) return self.request(Route('GET', '/guilds/{guild_id}/channels', guild_id=guild_id))
def get_members(self, guild_id: Snowflake, limit: int, after: Optional[Snowflake]) -> Response[List[member.Member]]: def get_members(
self, guild_id: Snowflake, limit: int, after: Optional[Snowflake]
) -> Response[List[member.MemberWithUser]]:
params: Dict[str, Any] = { params: Dict[str, Any] = {
'limit': limit, 'limit': limit,
} }
@ -1132,7 +1141,7 @@ class HTTPClient:
r = Route('GET', '/guilds/{guild_id}/members', guild_id=guild_id) r = Route('GET', '/guilds/{guild_id}/members', guild_id=guild_id)
return self.request(r, params=params) return self.request(r, params=params)
def get_member(self, guild_id: Snowflake, member_id: Snowflake) -> Response[member.Member]: def get_member(self, guild_id: Snowflake, member_id: Snowflake) -> Response[member.MemberWithUser]:
return self.request(Route('GET', '/guilds/{guild_id}/members/{member_id}', guild_id=guild_id, member_id=member_id)) return self.request(Route('GET', '/guilds/{guild_id}/members/{member_id}', guild_id=guild_id, member_id=member_id))
def prune_members( def prune_members(
@ -1177,9 +1186,13 @@ class HTTPClient:
return self.request(Route('GET', '/guilds/{guild_id}/stickers', guild_id=guild_id)) return self.request(Route('GET', '/guilds/{guild_id}/stickers', guild_id=guild_id))
def get_guild_sticker(self, guild_id: Snowflake, sticker_id: Snowflake) -> Response[sticker.GuildSticker]: def get_guild_sticker(self, guild_id: Snowflake, sticker_id: Snowflake) -> Response[sticker.GuildSticker]:
return self.request(Route('GET', '/guilds/{guild_id}/stickers/{sticker_id}', guild_id=guild_id, sticker_id=sticker_id)) return self.request(
Route('GET', '/guilds/{guild_id}/stickers/{sticker_id}', guild_id=guild_id, sticker_id=sticker_id)
)
def create_guild_sticker(self, guild_id: Snowflake, payload: sticker.CreateGuildSticker, file: File, reason: str) -> Response[sticker.GuildSticker]: def create_guild_sticker(
self, guild_id: Snowflake, payload: sticker.CreateGuildSticker, file: File, reason: str
) -> Response[sticker.GuildSticker]:
initial_bytes = file.fp.read(16) initial_bytes = file.fp.read(16)
try: try:
@ -1202,18 +1215,31 @@ class HTTPClient:
] ]
for k, v in payload.items(): for k, v in payload.items():
form.append({ form.append(
'name': k, {
'value': v, 'name': k,
}) 'value': v,
}
)
return self.request(Route('POST', '/guilds/{guild_id}/stickers', guild_id=guild_id), form=form, files=[file], reason=reason) return self.request(
Route('POST', '/guilds/{guild_id}/stickers', guild_id=guild_id), form=form, files=[file], reason=reason
)
def modify_guild_sticker(self, guild_id: Snowflake, sticker_id: Snowflake, payload: sticker.EditGuildSticker, reason: str) -> Response[sticker.GuildSticker]: def modify_guild_sticker(
return self.request(Route('PATCH', '/guilds/{guild_id}/stickers/{sticker_id}', guild_id=guild_id, sticker_id=sticker_id), json=payload, reason=reason) self, guild_id: Snowflake, sticker_id: Snowflake, payload: sticker.EditGuildSticker, reason: str
) -> Response[sticker.GuildSticker]:
return self.request(
Route('PATCH', '/guilds/{guild_id}/stickers/{sticker_id}', guild_id=guild_id, sticker_id=sticker_id),
json=payload,
reason=reason,
)
def delete_guild_sticker(self, guild_id: Snowflake, sticker_id: Snowflake, reason: str) -> Response[None]: def delete_guild_sticker(self, guild_id: Snowflake, sticker_id: Snowflake, reason: str) -> Response[None]:
return self.request(Route('DELETE', '/guilds/{guild_id}/stickers/{sticker_id}', guild_id=guild_id, sticker_id=sticker_id), reason=reason) return self.request(
Route('DELETE', '/guilds/{guild_id}/stickers/{sticker_id}', guild_id=guild_id, sticker_id=sticker_id),
reason=reason,
)
def get_all_custom_emojis(self, guild_id: Snowflake) -> Response[List[emoji.Emoji]]: def get_all_custom_emojis(self, guild_id: Snowflake) -> Response[List[emoji.Emoji]]:
return self.request(Route('GET', '/guilds/{guild_id}/emojis', guild_id=guild_id)) return self.request(Route('GET', '/guilds/{guild_id}/emojis', guild_id=guild_id))
@ -1288,7 +1314,9 @@ class HTTPClient:
return self.request(r) return self.request(r)
def delete_integration(self, guild_id: Snowflake, integration_id: Snowflake, *, reason: Optional[str] = None) -> Response[None]: def delete_integration(
self, guild_id: Snowflake, integration_id: Snowflake, *, reason: Optional[str] = None
) -> Response[None]:
r = Route( r = Route(
'DELETE', '/guilds/{guild_id}/integrations/{integration_id}', guild_id=guild_id, integration_id=integration_id 'DELETE', '/guilds/{guild_id}/integrations/{integration_id}', guild_id=guild_id, integration_id=integration_id
) )
@ -1336,7 +1364,7 @@ class HTTPClient:
unique: bool = True, unique: bool = True,
target_type: Optional[invite.InviteTargetType] = None, target_type: Optional[invite.InviteTargetType] = None,
target_user_id: Optional[Snowflake] = None, target_user_id: Optional[Snowflake] = None,
target_application_id: Optional[Snowflake] = None target_application_id: Optional[Snowflake] = None,
) -> Response[invite.Invite]: ) -> Response[invite.Invite]:
r = Route('POST', '/channels/{channel_id}/invites', channel_id=channel_id) r = Route('POST', '/channels/{channel_id}/invites', channel_id=channel_id)
payload = { payload = {
@ -1357,7 +1385,9 @@ class HTTPClient:
return self.request(r, reason=reason, json=payload) return self.request(r, reason=reason, json=payload)
def get_invite(self, invite_id: str, *, with_counts: bool = True, with_expiration: bool = True) -> Response[invite.Invite]: def get_invite(
self, invite_id: str, *, with_counts: bool = True, with_expiration: bool = True
) -> Response[invite.Invite]:
params = { params = {
'with_counts': int(with_counts), 'with_counts': int(with_counts),
'with_expiration': int(with_expiration), 'with_expiration': int(with_expiration),
@ -1378,7 +1408,9 @@ class HTTPClient:
def get_roles(self, guild_id: Snowflake) -> Response[List[role.Role]]: def get_roles(self, guild_id: Snowflake) -> Response[List[role.Role]]:
return self.request(Route('GET', '/guilds/{guild_id}/roles', guild_id=guild_id)) return self.request(Route('GET', '/guilds/{guild_id}/roles', guild_id=guild_id))
def edit_role(self, guild_id: Snowflake, role_id: Snowflake, *, reason: Optional[str] = None, **fields: Any) -> Response[role.Role]: def edit_role(
self, guild_id: Snowflake, role_id: Snowflake, *, reason: Optional[str] = None, **fields: Any
) -> Response[role.Role]:
r = Route('PATCH', '/guilds/{guild_id}/roles/{role_id}', guild_id=guild_id, role_id=role_id) r = Route('PATCH', '/guilds/{guild_id}/roles/{role_id}', guild_id=guild_id, role_id=role_id)
valid_keys = ('name', 'permissions', 'color', 'hoist', 'mentionable') valid_keys = ('name', 'permissions', 'color', 'hoist', 'mentionable')
payload = {k: v for k, v in fields.items() if k in valid_keys} payload = {k: v for k, v in fields.items() if k in valid_keys}
@ -1395,7 +1427,7 @@ class HTTPClient:
role_ids: List[int], role_ids: List[int],
*, *,
reason: Optional[str] = None, reason: Optional[str] = None,
) -> Response[member.Member]: ) -> Response[member.MemberWithUser]:
return self.edit_member(guild_id=guild_id, user_id=user_id, roles=role_ids, reason=reason) return self.edit_member(guild_id=guild_id, user_id=user_id, roles=role_ids, reason=reason)
def create_role(self, guild_id: Snowflake, *, reason: Optional[str] = None, **fields: Any) -> Response[role.Role]: def create_role(self, guild_id: Snowflake, *, reason: Optional[str] = None, **fields: Any) -> Response[role.Role]:
@ -1412,7 +1444,9 @@ class HTTPClient:
r = Route('PATCH', '/guilds/{guild_id}/roles', guild_id=guild_id) r = Route('PATCH', '/guilds/{guild_id}/roles', guild_id=guild_id)
return self.request(r, json=positions, reason=reason) return self.request(r, json=positions, reason=reason)
def add_role(self, guild_id: Snowflake, user_id: Snowflake, role_id: Snowflake, *, reason: Optional[str] = None) -> Response[None]: def add_role(
self, guild_id: Snowflake, user_id: Snowflake, role_id: Snowflake, *, reason: Optional[str] = None
) -> Response[None]:
r = Route( r = Route(
'PUT', 'PUT',
'/guilds/{guild_id}/members/{user_id}/roles/{role_id}', '/guilds/{guild_id}/members/{user_id}/roles/{role_id}',
@ -1422,7 +1456,9 @@ class HTTPClient:
) )
return self.request(r, reason=reason) return self.request(r, reason=reason)
def remove_role(self, guild_id: Snowflake, user_id: Snowflake, role_id: Snowflake, *, reason: Optional[str] = None) -> Response[None]: def remove_role(
self, guild_id: Snowflake, user_id: Snowflake, role_id: Snowflake, *, reason: Optional[str] = None
) -> Response[None]:
r = Route( r = Route(
'DELETE', 'DELETE',
'/guilds/{guild_id}/members/{user_id}/roles/{role_id}', '/guilds/{guild_id}/members/{user_id}/roles/{role_id}',
@ -1447,11 +1483,7 @@ class HTTPClient:
return self.request(r, json=payload, reason=reason) return self.request(r, json=payload, reason=reason)
def delete_channel_permissions( def delete_channel_permissions(
self, self, channel_id: Snowflake, target: channel.OverwriteType, *, reason: Optional[str] = None
channel_id: Snowflake,
target: channel.OverwriteType,
*,
reason: Optional[str] = None
) -> Response[None]: ) -> Response[None]:
r = Route('DELETE', '/channels/{channel_id}/permissions/{target}', channel_id=channel_id, target=target) r = Route('DELETE', '/channels/{channel_id}/permissions/{target}', channel_id=channel_id, target=target)
return self.request(r, reason=reason) return self.request(r, reason=reason)
@ -1465,7 +1497,7 @@ class HTTPClient:
channel_id: Snowflake, channel_id: Snowflake,
*, *,
reason: Optional[str] = None, reason: Optional[str] = None,
) -> Response[member.Member]: ) -> Response[member.MemberWithUser]:
return self.edit_member(guild_id=guild_id, user_id=user_id, channel_id=channel_id, reason=reason) return self.edit_member(guild_id=guild_id, user_id=user_id, channel_id=channel_id, reason=reason)
# Stage instance management # Stage instance management
@ -1490,7 +1522,9 @@ class HTTPClient:
) )
payload = {k: v for k, v in payload.items() if k in valid_keys} payload = {k: v for k, v in payload.items() if k in valid_keys}
return self.request(Route('PATCH', '/stage-instances/{channel_id}', channel_id=channel_id), json=payload, reason=reason) return self.request(
Route('PATCH', '/stage-instances/{channel_id}', channel_id=channel_id), json=payload, reason=reason
)
def delete_stage_instance(self, channel_id: Snowflake, *, reason: Optional[str] = None) -> Response[None]: def delete_stage_instance(self, channel_id: Snowflake, *, reason: Optional[str] = None) -> Response[None]:
return self.request(Route('DELETE', '/stage-instances/{channel_id}', channel_id=channel_id), reason=reason) return self.request(Route('DELETE', '/stage-instances/{channel_id}', channel_id=channel_id), reason=reason)
@ -1500,7 +1534,9 @@ class HTTPClient:
def get_global_commands(self, application_id: Snowflake) -> Response[List[interactions.ApplicationCommand]]: def get_global_commands(self, application_id: Snowflake) -> Response[List[interactions.ApplicationCommand]]:
return self.request(Route('GET', '/applications/{application_id}/commands', application_id=application_id)) return self.request(Route('GET', '/applications/{application_id}/commands', application_id=application_id))
def get_global_command(self, application_id: Snowflake, command_id: Snowflake) -> Response[interactions.ApplicationCommand]: def get_global_command(
self, application_id: Snowflake, command_id: Snowflake
) -> Response[interactions.ApplicationCommand]:
r = Route( r = Route(
'GET', 'GET',
'/applications/{application_id}/commands/{command_id}', '/applications/{application_id}/commands/{command_id}',
@ -1513,7 +1549,8 @@ class HTTPClient:
r = Route('POST', '/applications/{application_id}/commands', application_id=application_id) r = Route('POST', '/applications/{application_id}/commands', application_id=application_id)
return self.request(r, json=payload) return self.request(r, json=payload)
def edit_global_command(self, def edit_global_command(
self,
application_id: Snowflake, application_id: Snowflake,
command_id: Snowflake, command_id: Snowflake,
payload: interactions.EditApplicationCommand, payload: interactions.EditApplicationCommand,
@ -1541,13 +1578,17 @@ class HTTPClient:
) )
return self.request(r) return self.request(r)
def bulk_upsert_global_commands(self, application_id: Snowflake, payload) -> Response[List[interactions.ApplicationCommand]]: def bulk_upsert_global_commands(
self, application_id: Snowflake, payload
) -> Response[List[interactions.ApplicationCommand]]:
r = Route('PUT', '/applications/{application_id}/commands', application_id=application_id) r = Route('PUT', '/applications/{application_id}/commands', application_id=application_id)
return self.request(r, json=payload) return self.request(r, json=payload)
# Application commands (guild) # Application commands (guild)
def get_guild_commands(self, application_id: Snowflake, guild_id: Snowflake) -> Response[List[interactions.ApplicationCommand]]: def get_guild_commands(
self, application_id: Snowflake, guild_id: Snowflake
) -> Response[List[interactions.ApplicationCommand]]:
r = Route( r = Route(
'GET', 'GET',
'/applications/{application_id}/guilds/{guild_id}/commands', '/applications/{application_id}/guilds/{guild_id}/commands',
@ -1585,7 +1626,8 @@ class HTTPClient:
) )
return self.request(r, json=payload) return self.request(r, json=payload)
def edit_guild_command(self, def edit_guild_command(
self,
application_id: Snowflake, application_id: Snowflake,
guild_id: Snowflake, guild_id: Snowflake,
command_id: Snowflake, command_id: Snowflake,
@ -1679,7 +1721,7 @@ class HTTPClient:
token: str, token: str,
*, *,
type: InteractionResponseType, type: InteractionResponseType,
data: Optional[interactions.InteractionApplicationCommandCallbackData] = None data: Optional[interactions.InteractionApplicationCommandCallbackData] = None,
) -> Response[None]: ) -> Response[None]:
r = Route( r = Route(
'POST', 'POST',
@ -1769,7 +1811,7 @@ class HTTPClient:
content: Optional[str] = None, content: Optional[str] = None,
embeds: Optional[List[embed.Embed]] = None, embeds: Optional[List[embed.Embed]] = None,
allowed_mentions: Optional[message.AllowedMentions] = None, allowed_mentions: Optional[message.AllowedMentions] = None,
)-> Response[message.Message]: ) -> Response[message.Message]:
r = Route( r = Route(
'PATCH', 'PATCH',
'/webhooks/{application_id}/{interaction_token}/messages/{message_id}', '/webhooks/{application_id}/{interaction_token}/messages/{message_id}',

4
discord/member.py

@ -55,7 +55,7 @@ if TYPE_CHECKING:
from .guild import Guild from .guild import Guild
from .types.activity import PartialPresenceUpdate from .types.activity import PartialPresenceUpdate
from .types.member import ( from .types.member import (
GatewayMember as GatewayMemberPayload, MemberWithUser as MemberWithUserPayload,
Member as MemberPayload, Member as MemberPayload,
UserWithMember as UserWithMemberPayload, UserWithMember as UserWithMemberPayload,
) )
@ -284,7 +284,7 @@ class Member(discord.abc.Messageable, _UserTag):
accent_color: Optional[Colour] accent_color: Optional[Colour]
accent_colour: Optional[Colour] accent_colour: Optional[Colour]
def __init__(self, *, data: GatewayMemberPayload, guild: Guild, state: ConnectionState): def __init__(self, *, data: MemberWithUserPayload, guild: Guild, state: ConnectionState):
self._state: ConnectionState = state self._state: ConnectionState = state
self._user: User = state.store_user(data['user']) self._user: User = state.store_user(data['user'])
self.guild: Guild = guild self.guild: Guild = guild

7
discord/types/member.py

@ -46,7 +46,8 @@ class Member(PartialMember, total=False):
pending: bool pending: bool
permissions: str permissions: str
class _OptionalGatewayMember(PartialMember, total=False):
class _OptionalMemberWithUser(PartialMember, total=False):
avatar: str avatar: str
nick: str nick: str
premium_since: str premium_since: str
@ -54,9 +55,9 @@ class _OptionalGatewayMember(PartialMember, total=False):
permissions: str permissions: str
class GatewayMember(_OptionalGatewayMember): class MemberWithUser(_OptionalMemberWithUser):
user: User user: User
class UserWithMember(User, total=False): class UserWithMember(User, total=False):
member: _OptionalGatewayMember member: _OptionalMemberWithUser

4
discord/types/voice.py

@ -24,14 +24,14 @@ DEALINGS IN THE SOFTWARE.
from typing import Optional, TypedDict, List, Literal from typing import Optional, TypedDict, List, Literal
from .snowflake import Snowflake from .snowflake import Snowflake
from .member import GatewayMember from .member import MemberWithUser
SupportedModes = Literal['xsalsa20_poly1305_lite', 'xsalsa20_poly1305_suffix', 'xsalsa20_poly1305'] SupportedModes = Literal['xsalsa20_poly1305_lite', 'xsalsa20_poly1305_suffix', 'xsalsa20_poly1305']
class _PartialVoiceStateOptional(TypedDict, total=False): class _PartialVoiceStateOptional(TypedDict, total=False):
member: GatewayMember member: MemberWithUser
self_stream: bool self_stream: bool

Loading…
Cancel
Save