diff --git a/disco/api/client.py b/disco/api/client.py index a478b9b..1ee9026 100644 --- a/disco/api/client.py +++ b/disco/api/client.py @@ -216,6 +216,12 @@ class APIClient(LoggingClass): def guilds_members_modify(self, guild, member, **kwargs): self.http(Routes.GUILDS_MEMBERS_MODIFY, dict(guild=guild, member=member), json=kwargs) + def guilds_members_roles_add(self, guild, member, role): + self.http(Routes.GUILDS_MEMBERS_ROLES_ADD, dict(guild=guild, member=member, role=role)) + + def guilds_members_roles_remove(self, guild, member, role): + self.http(Routes.GUILDS_MEMBERS_ROLES_REMOVE, dict(guild=guild, member=member, role=role)) + def guilds_members_me_nick(self, guild, nick): self.http(Routes.GUILDS_MEMBERS_ME_NICK, dict(guild=guild), json={'nick': nick}) diff --git a/disco/api/http.py b/disco/api/http.py index 10dcd22..c1c54db 100644 --- a/disco/api/http.py +++ b/disco/api/http.py @@ -71,6 +71,8 @@ class Routes(object): GUILDS_MEMBERS_LIST = (HTTPMethod.GET, GUILDS + '/members') GUILDS_MEMBERS_GET = (HTTPMethod.GET, GUILDS + '/members/{member}') GUILDS_MEMBERS_MODIFY = (HTTPMethod.PATCH, GUILDS + '/members/{member}') + GUILDS_MEMBERS_ROLES_ADD = (HTTPMethod.PUT, GUILDS + '/members/{member}/roles/{role}') + GUILDS_MEMBERS_ROLES_REMOVE = (HTTPMethod.DELETE, GUILDS + '/members/{member}/roles/{role}') GUILDS_MEMBERS_ME_NICK = (HTTPMethod.PATCH, GUILDS + '/members/@me/nick') GUILDS_MEMBERS_KICK = (HTTPMethod.DELETE, GUILDS + '/members/{member}') GUILDS_BANS_LIST = (HTTPMethod.GET, GUILDS + '/bans') diff --git a/disco/types/guild.py b/disco/types/guild.py index 220ffa4..2206547 100644 --- a/disco/types/guild.py +++ b/disco/types/guild.py @@ -177,8 +177,10 @@ class GuildMember(SlottedModel): self.client.api.guilds_members_modify(self.guild.id, self.user.id, nick=nickname or '') def add_role(self, role): - roles = self.roles + [role.id] - self.client.api.guilds_members_modify(self.guild.id, self.user.id, roles=roles) + self.client.api.guilds_members_roles_add(self.guild.id, self.user.id, to_snowflake(role)) + + def remove_role(self, role): + self.clients.api.guilds_members_roles_remove(self.guild.id, self.user.id, to_snowflake(role)) @cached_property def owner(self):