From 279b6bc3c3ec5e7db2fce295c91bb6e2b3f2458d Mon Sep 17 00:00:00 2001 From: CMDR furrycat Date: Sun, 23 Oct 2016 10:54:24 +0100 Subject: [PATCH] Don't overwrite permissions that are already correct. --- bot.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/bot.py b/bot.py index 3f195fc..c451361 100755 --- a/bot.py +++ b/bot.py @@ -839,16 +839,23 @@ def equal_permissions(x, y, *, strict = True): return True @asyncio.coroutine +def overwrite_permissions(channel, whom, overwrite, *, strict = True): + permissions = channel.overwrites_for(whom) + if equal_permissions(permissions, overwrite, strict = strict): + log.debug('Permissions for {} in {} are already correct.'.format(whom.name, channel.name)) + return + log.info('Setting permissions for {} in {} to {}'.format(whom.name, channel.name, permissions.__dict__)) + yield from client.edit_channel_permissions(channel, whom, overwrite) + +@asyncio.coroutine def set_rss_permissions(channel_id): channel = client.get_channel(channel_id) if channel is None: log.warning("Can't get channel {} for RSS feeds.".format(channel_id)) return role = None - for server_role in channel.server.me.roles: - if server_role.name == 'Robocat': - role = server_role - break + # My highest role. + role = highest_role(channel.server.me.roles) if role is not None: # Permissions for bot. overwrite = discord.PermissionOverwrite() @@ -858,14 +865,14 @@ def set_rss_permissions(channel_id): overwrite.send_tts_messages = True overwrite.manage_messages = True overwrite.attach_files = True - yield from client.edit_channel_permissions(channel, role, overwrite) + yield from overwrite_permissions(channel, role, overwrite, strict = False) # Permissions for @everyone. overwrite = discord.PermissionOverwrite() overwrite.read_messages = True overwrite.read_message_history = True overwrite.send_messages = False overwrite.send_tts_messages = False - yield from client.edit_channel_permissions(channel, channel.server.default_role, overwrite) + yield from overwrite_permissions(channel, channel.server.default_role, overwrite) @asyncio.coroutine def do_rss(feed): -- 2.7.4