diff options
author | 2019-01-03 19:37:48 +0100 | |
---|---|---|
committer | 2019-01-03 19:37:48 +0100 | |
commit | 04b05d180d5be9014c422851e4728e19b8886a47 (patch) | |
tree | f4880ec9514ef2f04201c87109b1b3b5d2d2000c | |
parent | Update users who joined and left. (diff) |
Create or update roles as needed.
-rw-r--r-- | bot/cogs/sync/syncers.py | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/bot/cogs/sync/syncers.py b/bot/cogs/sync/syncers.py index 1ff04e1d8..ac32860fb 100644 --- a/bot/cogs/sync/syncers.py +++ b/bot/cogs/sync/syncers.py @@ -14,7 +14,7 @@ Role = namedtuple('Role', ('id', 'name', 'colour', 'permissions')) User = namedtuple('User', ('id', 'name', 'discriminator', 'avatar_hash', 'roles', 'in_guild')) -def get_roles_for_update(guild_roles: Set[Role], api_roles: Set[Role]) -> Set[Role]: +def get_roles_for_sync(guild_roles: Set[Role], api_roles: Set[Role]) -> Set[Role]: """ Determine which roles should be updated on the site. @@ -30,7 +30,13 @@ def get_roles_for_update(guild_roles: Set[Role], api_roles: Set[Role]) -> Set[Ro Roles to be sent to the site for an update or insert. """ - return guild_roles - api_roles + guild_role_ids = {role.id for role in guild_roles} + api_role_ids = {role.id for role in api_roles} + new_role_ids = guild_role_ids - api_role_ids + + roles_to_create = {role for role in guild_roles if role.id in new_role_ids} + roles_to_update = guild_roles - api_roles - roles_to_create + return roles_to_create, roles_to_update async def sync_roles(bot: Bot, guild: Guild): @@ -47,12 +53,23 @@ async def sync_roles(bot: Bot, guild: Guild): ) for role in guild.roles } - roles_to_update = get_roles_for_update(guild_roles, api_roles) + roles_to_create, roles_to_update = get_roles_for_sync(guild_roles, api_roles) + for role in roles_to_create: + log.info(f"Creating role `{role.name}` on the site.") + await bot.api_client.post( + 'bot/roles', + json={ + 'id': role.id, + 'name': role.name, + 'colour': role.colour, + 'permissions': role.permissions + } + ) for role in roles_to_update: log.info(f"Updating role `{role.name}` on the site.") await bot.api_client.put( - 'bot/roles', + 'bot/roles/' + str(role.id), json={ 'id': role.id, 'name': role.name, |