Fix permissions for managing announcements.
authorCMDR furrycat <elite@furrycat.net>
Fri, 7 Oct 2016 14:08:16 +0000 (15:08 +0100)
committerCMDR furrycat <elite@furrycat.net>
Fri, 7 Oct 2016 14:10:19 +0000 (15:10 +0100)
bot.py

diff --git a/bot.py b/bot.py
index a5d4ff3..ee4ae00 100755 (executable)
--- a/bot.py
+++ b/bot.py
@@ -719,7 +719,7 @@ def do_feeds():
     yield from asyncio.sleep(rsstime.value)
 
 @asyncio.coroutine
-def can_manage_announcements(member, channel, command, **args):
+def can_manage_announcements(author, channel, command, **args):
   # Anyone can list announcements.
   if command == 'list':
     log.debug('Anyone can list announcements.')
@@ -735,25 +735,27 @@ def can_manage_announcements(member, channel, command, **args):
   # Anyone on the server can show details of an announcement.
   if command == 'show':
     if announcement is not None:
-      if announcement['member_id'] == member.id:
+      if announcement['member_id'] == author.id:
         log.debug('Anyone can show own announcements.')
         return announcement
       if announcement['channel_id'] != 'private':
         server = client.get_server(announcement['server_id'])
         if server is not None:
+          member = server.get_member(author.id)
           if member in server.members:
             log.debug('Member {} on server {} can show announcement {}.'.format(member.name, server.name, announcement['id']))
             return announcement
 
   if command in ['delete', 'schedule']:
     if announcement is not None:
-      if announcement['member_id'] == member.id:
+      if announcement['member_id'] == author.id:
         log.debug('Anyone can manage own announcements.')
         return announcement
       if announcement['channel_id'] != 'private':
         server = client.get_server(announcement['server_id'])
         announcer = server.get_member(announcement['member_id'])
         announcer_role = highest_role(announcer.roles)
+        member = server.get_member(author.id)
         member_role = highest_role(member.roles)
         if member_role.position > announcer_role.position:
           log.debug('Member {} on server {} can edit announcements from lower role.'.format(member.name, server.name))