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;