From: CMDR furrycat Date: Sun, 23 Oct 2016 09:51:26 +0000 (+0100) Subject: Added hacky permissions comparision. X-Git-Url: http://git.furryclan.net/?a=commitdiff_plain;h=890c63d70ddacb1bb592131ecb5d9d72a27cba10;p=furrycat%2Fcatbot.git Added hacky permissions comparision. Discord API 0.13.0 will let us compare permissions directly. For now we have to check each bit individually. --- diff --git a/bot.py b/bot.py index ef86445..3f195fc 100755 --- 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)