From 18cb6785e9d9b9904a95f99cbb8c846f0b3ba5e8 Mon Sep 17 00:00:00 2001
From: Ske <voltasalt@gmail.com>
Date: Tue, 7 Jul 2020 19:34:44 +0200
Subject: [PATCH] Extract member list parsing to a separate method

---
 PluralKit.Bot/Commands/Groups.cs | 37 +++++++++++++++++++-------------
 1 file changed, 22 insertions(+), 15 deletions(-)

diff --git a/PluralKit.Bot/Commands/Groups.cs b/PluralKit.Bot/Commands/Groups.cs
index 8c1631d8..2faec364 100644
--- a/PluralKit.Bot/Commands/Groups.cs
+++ b/PluralKit.Bot/Commands/Groups.cs
@@ -149,22 +149,9 @@ namespace PluralKit.Bot
         public async Task AddRemoveMembers(Context ctx, PKGroup target, AddRemoveOperation op)
         {
             ctx.CheckOwnGroup(target);
+
+            var members = await ParseMemberList(ctx);
             
-            // Parse all arguments
-            var members = new List<PKMember>();
-            while (ctx.HasNext())
-            {
-                var member = await ctx.MatchMember();
-                if (member == null)
-                    throw new PKSyntaxError(ctx.CreateMemberNotFoundError(ctx.PopArgument()));;
-                if (member.System != target.System)
-                    throw new PKError($"Member **{member.Name}** (`{member.Hid}`) is not in your own system, so you can't add it to a group.");
-                members.Add(member);
-            }
-
-            if (members.Count == 0)
-                throw new PKSyntaxError("You must pass one or more members.");
-
             await using var conn = await _db.Obtain();
             if (op == AddRemoveOperation.Add)
             {
@@ -204,6 +191,26 @@ namespace PluralKit.Bot
             Remove
         }
 
+        private static async Task<List<PKMember>> ParseMemberList(Context ctx)
+        {
+            // TODO: move this to a context extension and share with the switch command somewhere, after branch merge?
+            
+            var members = new List<PKMember>();
+            while (ctx.HasNext())
+            {
+                var member = await ctx.MatchMember();
+                if (member == null)
+                    throw new PKSyntaxError(ctx.CreateMemberNotFoundError(ctx.PopArgument()));;
+                if (member.System != ctx.System.Id)
+                    throw new PKError($"Member **{member.Name}** (`{member.Hid}`) is not in your own system, so you can't add it to a group.");
+                members.Add(member);
+            }
+
+            if (members.Count == 0)
+                throw new PKSyntaxError("You must pass one or more members.");
+            return members;
+        }
+
         private static async Task<PKSystem> GetGroupSystem(Context ctx, PKGroup target, IPKConnection conn)
         {
             var system = ctx.System;