mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-05-13 17:29:50 +00:00
Update positions when a role is added or removed.
This commit is contained in:
parent
b6492a4124
commit
c97e5a17e6
@ -136,6 +136,27 @@ class Server(Hashable):
|
|||||||
member._update_voice_state(voice_channel=channel, **data)
|
member._update_voice_state(voice_channel=channel, **data)
|
||||||
return before, member
|
return before, member
|
||||||
|
|
||||||
|
def _add_role(self, role):
|
||||||
|
# roles get added to the bottom (position 1, pos 0 is @everyone)
|
||||||
|
# so since self.roles has the @everyone role, we can't increment
|
||||||
|
# its position because it's stuck at position 0. Luckily x += False
|
||||||
|
# is equivalent to adding 0. So we cast the position to a bool and
|
||||||
|
# increment it.
|
||||||
|
for r in self.roles:
|
||||||
|
r.position += bool(r.position)
|
||||||
|
|
||||||
|
self.roles.append(role)
|
||||||
|
|
||||||
|
def _remove_role(self, role):
|
||||||
|
# this raises ValueError if it fails..
|
||||||
|
self.roles.remove(role)
|
||||||
|
|
||||||
|
# since it didn't, we can change the positions now
|
||||||
|
# basically the same as above except we only decrement
|
||||||
|
# the position if we're above the role we deleted.
|
||||||
|
for r in self.roles:
|
||||||
|
r.position -= r.position > role.position
|
||||||
|
|
||||||
def _from_data(self, guild):
|
def _from_data(self, guild):
|
||||||
# according to Stan, this is always available even if the guild is unavailable
|
# according to Stan, this is always available even if the guild is unavailable
|
||||||
# I don't have this guarantee when someone updates the server.
|
# I don't have this guarantee when someone updates the server.
|
||||||
|
@ -477,7 +477,7 @@ class ConnectionState:
|
|||||||
server = self._get_server(data.get('guild_id'))
|
server = self._get_server(data.get('guild_id'))
|
||||||
role_data = data.get('role', {})
|
role_data = data.get('role', {})
|
||||||
role = Role(server=server, **role_data)
|
role = Role(server=server, **role_data)
|
||||||
server.roles.append(role)
|
server._add_role(role)
|
||||||
self.dispatch('server_role_create', role)
|
self.dispatch('server_role_create', role)
|
||||||
|
|
||||||
def parse_guild_role_delete(self, data):
|
def parse_guild_role_delete(self, data):
|
||||||
@ -486,7 +486,7 @@ class ConnectionState:
|
|||||||
role_id = data.get('role_id')
|
role_id = data.get('role_id')
|
||||||
role = utils.find(lambda r: r.id == role_id, server.roles)
|
role = utils.find(lambda r: r.id == role_id, server.roles)
|
||||||
try:
|
try:
|
||||||
server.roles.remove(role)
|
server._remove_role(role)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user