Browse Source

Rework Member.edit to not use kwargs for better typing

pull/7139/head
Rapptz 4 years ago
parent
commit
a372aadb2d
  1. 60
      discord/member.py

60
discord/member.py

@ -29,11 +29,12 @@ import inspect
import itertools import itertools
import sys import sys
from operator import attrgetter from operator import attrgetter
from typing import List, Literal, Optional, TYPE_CHECKING, Union, overload from typing import Any, Dict, List, Literal, Optional, TYPE_CHECKING, Union, overload
import discord.abc import discord.abc
from . import utils from . import utils
from .utils import MISSING
from .user import BaseUser, User from .user import BaseUser, User
from .activity import create_activity from .activity import create_activity
from .permissions import Permissions from .permissions import Permissions
@ -559,25 +560,17 @@ class Member(discord.abc.Messageable, _BaseUser):
""" """
await self.guild.kick(self, reason=reason) await self.guild.kick(self, reason=reason)
@overload
async def edit( async def edit(
self, self,
*, *,
reason: Optional[str] = ..., nick: Optional[str] = MISSING,
nick: Optional[str] = None, mute: bool = MISSING,
mute: bool = ..., deafen: bool = MISSING,
deafen: bool = ..., suppress: bool = MISSING,
suppress: bool = ..., roles: List[discord.abc.Snowflake] = MISSING,
roles: Optional[List[discord.abc.Snowflake]] = ..., voice_channel: Optional[VocalGuildChannel] = MISSING,
voice_channel: Optional[VocalGuildChannel] = ..., reason: Optional[str] = None,
) -> None: ) -> None:
...
@overload
async def edit(self) -> None:
...
async def edit(self, *, reason=None, **fields):
"""|coro| """|coro|
Edits the member's data. Edits the member's data.
@ -616,7 +609,7 @@ class Member(discord.abc.Messageable, _BaseUser):
.. versionadded:: 1.7 .. versionadded:: 1.7
roles: Optional[List[:class:`Role`]] roles: List[:class:`Role`]
The member's new list of roles. This *replaces* the roles. The member's new list of roles. This *replaces* the roles.
voice_channel: Optional[:class:`VoiceChannel`] voice_channel: Optional[:class:`VoiceChannel`]
The voice channel to move the member to. The voice channel to move the member to.
@ -634,30 +627,22 @@ class Member(discord.abc.Messageable, _BaseUser):
http = self._state.http http = self._state.http
guild_id = self.guild.id guild_id = self.guild.id
me = self._state.self_id == self.id me = self._state.self_id == self.id
payload = {} payload: Dict[str, Any] = {}
try: if nick is not MISSING:
nick = fields['nick']
except KeyError:
# nick not present so...
pass
else:
nick = nick or '' nick = nick or ''
if me: if me:
await http.change_my_nickname(guild_id, nick, reason=reason) await http.change_my_nickname(guild_id, nick, reason=reason)
else: else:
payload['nick'] = nick payload['nick'] = nick
deafen = fields.get('deafen') if deafen is not MISSING:
if deafen is not None:
payload['deaf'] = deafen payload['deaf'] = deafen
mute = fields.get('mute') if mute is not MISSING:
if mute is not None:
payload['mute'] = mute payload['mute'] = mute
suppress = fields.get('suppress') if suppress is not MISSING:
if suppress is not None:
voice_state_payload = { voice_state_payload = {
'channel_id': self.voice.channel.id, 'channel_id': self.voice.channel.id,
'suppress': suppress, 'suppress': suppress,
@ -673,24 +658,15 @@ class Member(discord.abc.Messageable, _BaseUser):
voice_state_payload['request_to_speak_timestamp'] = datetime.datetime.utcnow().isoformat() voice_state_payload['request_to_speak_timestamp'] = datetime.datetime.utcnow().isoformat()
await http.edit_voice_state(guild_id, self.id, voice_state_payload) await http.edit_voice_state(guild_id, self.id, voice_state_payload)
try: if voice_channel is not MISSING:
vc = fields['voice_channel'] payload['channel_id'] = voice_channel and voice_channel.id
except KeyError:
pass
else:
payload['channel_id'] = vc and vc.id
try: if roles is not MISSING:
roles = fields['roles']
except KeyError:
pass
else:
payload['roles'] = tuple(r.id for r in roles) payload['roles'] = tuple(r.id for r in roles)
if payload: if payload:
await http.edit_member(guild_id, self.id, reason=reason, **payload) await http.edit_member(guild_id, self.id, reason=reason, **payload)
# TODO: wait for WS event for modify-in-place behaviour
async def request_to_speak(self): async def request_to_speak(self):
"""|coro| """|coro|

Loading…
Cancel
Save