Browse Source

Rework Role.edit to not rely on previous role state

pull/7139/head
Rapptz 4 years ago
parent
commit
2d7c709235
  1. 64
      discord/role.py

64
discord/role.py

@ -23,7 +23,7 @@ DEALINGS IN THE SOFTWARE.
""" """
from __future__ import annotations from __future__ import annotations
from typing import Any, List, Optional, TypeVar, Union, overload, TYPE_CHECKING from typing import Any, Dict, List, Optional, TypeVar, Union, overload, TYPE_CHECKING
from .permissions import Permissions from .permissions import Permissions
from .errors import InvalidArgument from .errors import InvalidArgument
@ -339,25 +339,18 @@ class Role(Hashable):
payload = [{"id": z[0], "position": z[1]} for z in zip(roles, change_range)] payload = [{"id": z[0], "position": z[1]} for z in zip(roles, change_range)]
await http.move_role_position(self.guild.id, payload, reason=reason) await http.move_role_position(self.guild.id, payload, reason=reason)
@overload
async def edit( async def edit(
self, self,
*, *,
reason: Optional[str] = ..., name: str = MISSING,
name: str = ..., permissions: Permissions = MISSING,
permissions: Permissions = ..., colour: Union[Colour, int] = MISSING,
colour: Union[Colour, int] = ..., color: Union[Colour, int] = MISSING,
hoist: bool = ..., hoist: bool = MISSING,
mentionable: bool = ..., mentionable: bool = MISSING,
position: int = ..., position: int = MISSING,
reason: Optional[str] = MISSING,
) -> None: ) -> None:
...
@overload
async def edit(self) -> None:
...
async def edit(self, *, reason=None, **fields) -> None:
"""|coro| """|coro|
Edits the role. Edits the role.
@ -399,26 +392,31 @@ class Role(Hashable):
role was asked to be moved. role was asked to be moved.
""" """
position = fields.get('position') if position is not MISSING:
if position is not None:
await self._move(position, reason=reason) await self._move(position, reason=reason)
self.position = position self.position = position
try: payload: Dict[str, Any] = {}
colour = fields['colour'] if color is not MISSING:
except KeyError: colour = color
colour = fields.get('color', self.colour)
if colour is not MISSING:
if isinstance(colour, int): if isinstance(colour, int):
colour = Colour(value=colour) payload['color'] = colour
else:
payload = { payload['color'] = colour.value
'name': fields.get('name', self.name),
'permissions': str(fields.get('permissions', self.permissions).value), if name is not MISSING:
'color': colour.value, payload['name'] = name
'hoist': fields.get('hoist', self.hoist),
'mentionable': fields.get('mentionable', self.mentionable), if permissions is not MISSING:
} payload['permissions'] = permissions.value
if hoist is not MISSING:
payload['hoist'] = hoist
if mentionable is not MISSING:
payload['mentionable'] = mentionable
data = await self._state.http.edit_role(self.guild.id, self.id, reason=reason, **payload) data = await self._state.http.edit_role(self.guild.id, self.id, reason=reason, **payload)
self._update(data) self._update(data)

Loading…
Cancel
Save