diff --git a/discord/client.py b/discord/client.py index 295768455..74e5d5cbf 100644 --- a/discord/client.py +++ b/discord/client.py @@ -2447,8 +2447,7 @@ class Client: yield from utils._verify_successful_response(r) data = yield from r.json(encoding='utf-8') - everyone = server.id == data.get('id') - role = Role(everyone=everyone, **data) + role = Role(server=server, **data) # we have to call edit because you can't pass a payload to the # http request currently. diff --git a/discord/role.py b/discord/role.py index 84cd9fbb7..678d4d1fd 100644 --- a/discord/role.py +++ b/discord/role.py @@ -54,6 +54,8 @@ class Role(Hashable): The name of the role. permissions : :class:`Permissions` Represents the role's permissions. + server : :class:`Server` + The server the role belongs to. colour : :class:`Colour` Represents the role colour. An alias exists under ``color``. hoist : bool @@ -68,10 +70,10 @@ class Role(Hashable): """ __slots__ = ['id', 'name', 'permissions', 'color', 'colour', 'position', - 'managed', 'mentionable', '_is_everyone', 'hoist' ] + 'managed', 'mentionable', 'hoist', 'server' ] def __init__(self, **kwargs): - self._is_everyone = kwargs.get('everyone', False) + self.server = kwargs.pop('server') self._update(**kwargs) def __str__(self): @@ -87,13 +89,11 @@ class Role(Hashable): self.managed = kwargs.get('managed', False) self.mentionable = kwargs.get('mentionable', False) self.color = self.colour - if 'everyone' in kwargs: - self._is_everyone = kwargs['everyone'] @property def is_everyone(self): """Checks if the role is the @everyone role.""" - return self._is_everyone + return self.server.id == self.id @property def created_at(self): diff --git a/discord/server.py b/discord/server.py index 618dab075..62bd9ad6e 100644 --- a/discord/server.py +++ b/discord/server.py @@ -155,7 +155,7 @@ class Server(Hashable): self.icon = guild.get('icon') self.unavailable = guild.get('unavailable', False) self.id = guild['id'] - self.roles = [Role(everyone=(self.id == r['id']), **r) for r in guild.get('roles', [])] + self.roles = [Role(server=self, **r) for r in guild.get('roles', [])] for data in guild.get('members', []): roles = [self.default_role] diff --git a/discord/state.py b/discord/state.py index 268af1885..b0c4ae15d 100644 --- a/discord/state.py +++ b/discord/state.py @@ -476,10 +476,9 @@ class ConnectionState: def parse_guild_role_create(self, data): server = self._get_server(data.get('guild_id')) role_data = data.get('role', {}) - everyone = server.id == role_data.get('id') - role = Role(everyone=everyone, **role_data) + role = Role(server=server, **role_data) server.roles.append(role) - self.dispatch('server_role_create', server, role) + self.dispatch('server_role_create', role) def parse_guild_role_delete(self, data): server = self._get_server(data.get('guild_id')) @@ -491,7 +490,7 @@ class ConnectionState: except ValueError: return else: - self.dispatch('server_role_delete', server, role) + self.dispatch('server_role_delete', role) def parse_guild_role_update(self, data): server = self._get_server(data.get('guild_id')) diff --git a/docs/api.rst b/docs/api.rst index d1824ad2d..c50098d9f 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -264,12 +264,13 @@ to handle it, which defaults to print a traceback and ignore the exception. :param before: The :class:`Server` prior to being updated. :param after: The :class:`Server` after being updated. -.. function:: on_server_role_create(server, role) - on_server_role_delete(server, role) +.. function:: on_server_role_create(role) + on_server_role_delete(role) Called when a :class:`Server` creates or deletes a new :class:`Role`. - :param server: The :class:`Server` that was created or deleted. + To get the server it belongs to, use :attr:`Role.server`. + :param role: The :class:`Role` that was created or deleted. .. function:: on_server_role_update(before, after)