Log migration in real time.
authorCMDR furrycat <elite@furrycat.net>
Fri, 26 Mar 2021 11:09:19 +0000 (12:09 +0100)
committerCMDR furrycat <elite@furrycat.net>
Fri, 26 Mar 2021 11:09:19 +0000 (12:09 +0100)
plugins/role/__init__.py

index 5bb2a0d..a32e3b2 100644 (file)
@@ -613,32 +613,29 @@ class Role(DBConnection):
           continue
         members.append(member)
 
-    migrated = []
-    errors = 0
-    for member in members:
-      if parsed['add']:
-        if role not in member.roles:
-          try:
-            await member.add_roles(role, reason = 'Migrating {}'.format(existing.name))
-            log.info('Added role {} to {} on {}'.format(role.name, member.name, role.guild.name))
-            migrated.append(member)
-          except:
-            log.error("Couldn't add role {} on {} to {}".format(role.name, role.guild.name, member.name))
-            errors += 1
-      else:
-        if role in member.roles:
-          try:
-            await member.remove_roles(role, reason = 'Migrating {}'.format(existing.name))
-            log.info('Removed role {} from {} on {}'.format(role.name, member.name, role.guild.name))
-            migrated.append(member)
-          except:
-            log.error("Couldn't add role {} on {} to {}".format(role.name, role.guild.name, member.name))
-            errors += 1
-
-    if migrated:
-      await bot.say_many(message.channel, [member.nick if member.nick is not None else member.name for member in migrated])
-    if errors:
-      await cat.yelp(message.channel)
+    async with message.channel.typing() as typing:
+      errors = 0
+      for member in members:
+        if parsed['add']:
+          if role not in member.roles:
+            try:
+              await member.add_roles(role, reason = 'Migrating {}'.format(existing.name))
+              log.info('Added role {} to {} on {}'.format(role.name, member.name, role.guild.name))
+              await bot.say_many(message.channel, member.nick is not None else member.name, typing = typing)
+            except:
+              log.error("Couldn't add role {} on {} to {}".format(role.name, role.guild.name, member.name))
+              errors += 1
+        else:
+          if role in member.roles:
+            try:
+              await member.remove_roles(role, reason = 'Migrating {}'.format(existing.name))
+              log.info('Removed role {} from {} on {}'.format(role.name, member.name, role.guild.name))
+              await bot.say_many(message.channel, member.nick is not None else member.name, typing = typing)
+            except:
+              log.error("Couldn't add role {} on {} to {}".format(role.name, role.guild.name, member.name))
+              errors += 1
+      if errors:
+        await cat.yelp(message.channel, typing = typing)
 
   async def handle_reaction(self, reaction, message, member, channel, server, event_type, emoji):
     if event_type != 'REACTION_ADD':