Don't overwrite permissions that are already correct.
authorCMDR furrycat <elite@furrycat.net>
Sun, 23 Oct 2016 09:54:24 +0000 (10:54 +0100)
committerCMDR furrycat <elite@furrycat.net>
Sun, 23 Oct 2016 09:54:24 +0000 (10:54 +0100)
bot.py

diff --git a/bot.py b/bot.py
index 3f195fc..c451361 100755 (executable)
--- 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):