From: CMDR furrycat Date: Sun, 23 Oct 2016 09:54:24 +0000 (+0100) Subject: Don't overwrite permissions that are already correct. X-Git-Url: http://git.furryclan.net/?a=commitdiff_plain;h=279b6bc3c3ec5e7db2fce295c91bb6e2b3f2458d;p=furrycat%2Fcatbot.git Don't overwrite permissions that are already correct. --- 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):