Added hacky permissions comparision.
authorCMDR furrycat <elite@furrycat.net>
Sun, 23 Oct 2016 09:51:26 +0000 (10:51 +0100)
committerCMDR furrycat <elite@furrycat.net>
Sun, 23 Oct 2016 09:51:26 +0000 (10:51 +0100)
Discord API 0.13.0 will let us compare permissions directly.  For now we
have to check each bit individually.

bot.py

diff --git a/bot.py b/bot.py
index ef86445..3f195fc 100755 (executable)
--- a/bot.py
+++ b/bot.py
@@ -774,6 +774,70 @@ def greet(channel, member, sound = True):
       if sound:
         yield from play_greeting(greeting)
 
+# Discord API 0.13 has is_superset() to do this.
+def equal_permission(x, y, *, strict = True):
+  if x == y:
+    return True
+  if x and not y and not strict:
+    return True
+  return False
+
+# Discord API 0.13 has == to do this.
+def equal_permissions(x, y, *, strict = True):
+  if not equal_permission(x.create_instant_invite, y.create_instant_invite, strict = strict):
+    return False
+  if not equal_permission(x.kick_members, y.kick_members, strict = strict):
+    return False
+  if not equal_permission(x.ban_members, y.ban_members, strict = strict):
+    return False
+  if not equal_permission(x.administrator, y.administrator, strict = strict):
+    return False
+  if not equal_permission(x.manage_channels, y.manage_channels, strict = strict):
+    return False
+  if not equal_permission(x.manage_server, y.manage_server, strict = strict):
+    return False
+  if not equal_permission(x.read_messages, y.read_messages, strict = strict):
+    return False
+  if not equal_permission(x.send_messages, y.send_messages, strict = strict):
+    return False
+  if not equal_permission(x.send_tts_messages, y.send_tts_messages, strict = strict):
+    return False
+  if not equal_permission(x.manage_messages, y.manage_messages, strict = strict):
+    return False
+  if not equal_permission(x.embed_links, y.embed_links, strict = strict):
+    return False
+  if not equal_permission(x.attach_files, y.attach_files, strict = strict):
+    return False
+  if not equal_permission(x.read_message_history, y.read_message_history, strict = strict):
+    return False
+  if not equal_permission(x.mention_everyone, y.mention_everyone, strict = strict):
+    return False
+  if not equal_permission(x.external_emojis, y.external_emojis, strict = strict):
+    return False
+  if not equal_permission(x.connect, y.connect, strict = strict):
+    return False
+  if not equal_permission(x.speak, y.speak, strict = strict):
+    return False
+  if not equal_permission(x.mute_members, y.mute_members, strict = strict):
+    return False
+  if not equal_permission(x.deafen_members, y.deafen_members, strict = strict):
+    return False
+  if not equal_permission(x.move_members, y.move_members, strict = strict):
+    return False
+  if not equal_permission(x.use_voice_activation, y.use_voice_activation, strict = strict):
+    return False
+  if not equal_permission(x.change_nickname, y.change_nickname, strict = strict):
+    return False
+  if not equal_permission(x.manage_nicknames, y.manage_nicknames, strict = strict):
+    return False
+  if not equal_permission(x.manage_roles, y.manage_roles, strict = strict):
+    return False
+  #if not equal_permission(x.manage_webhooks, y.manage_webhooks, strict = strict):
+    #return False
+  #if not equal_permission(x.manage_emojis, y.manage_emojis, strict = strict):
+    #return False
+  return True
+
 @asyncio.coroutine
 def set_rss_permissions(channel_id):
   channel = client.get_channel(channel_id)