Merge pull request #134 from nephanim/feature/member-limit
Add members per system cap & improve import performance
This commit is contained in:
		@@ -101,13 +101,16 @@ namespace PluralKit.Bot.Commands
 | 
			
		||||
                    // If passed system is null, it'll create a new one
 | 
			
		||||
                    // (and that's okay!)
 | 
			
		||||
                    var result = await _dataFiles.ImportSystem(data, ctx.System, ctx.Author.Id);
 | 
			
		||||
                    
 | 
			
		||||
                    if (ctx.System != null)
 | 
			
		||||
                    if (!result.Success)
 | 
			
		||||
                        await ctx.Reply($"{Emojis.Error} The provided system profile could not be imported. {result.Message}");
 | 
			
		||||
                    else if (ctx.System == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        // We didn't have a system prior to importing, so give them the new system's ID
 | 
			
		||||
                        await ctx.Reply($"{Emojis.Success} PluralKit has created a system for you based on the given file. Your system ID is `{result.System.Hid}`. Type `pk;system` for more information.");
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        // We already had a system, so show them what changed
 | 
			
		||||
                        await ctx.Reply($"{Emojis.Success} Updated {result.ModifiedNames.Count} members, created {result.AddedNames.Count} members. Type `pk;system list` to check!");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -45,13 +45,24 @@ namespace PluralKit.Bot.Commands
 | 
			
		||||
                if (!await ctx.PromptYesNo(msg)) throw new PKError("Member creation cancelled.");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Enforce per-system member limit
 | 
			
		||||
            var memberCount = await _members.MemberCount(ctx.System);
 | 
			
		||||
            if (memberCount >= Limits.MaxMemberCount)
 | 
			
		||||
                throw Errors.MemberLimitReachedError;
 | 
			
		||||
 | 
			
		||||
            // Create the member
 | 
			
		||||
            var member = await _members.Create(ctx.System, memberName);
 | 
			
		||||
            memberCount++;
 | 
			
		||||
            
 | 
			
		||||
            // Send confirmation and space hint
 | 
			
		||||
            await ctx.Reply($"{Emojis.Success} Member \"{memberName.SanitizeMentions()}\" (`{member.Hid}`) registered! See the user guide for commands for editing this member: https://pluralkit.me/guide#member-management");
 | 
			
		||||
            if (memberName.Contains(" ")) await ctx.Reply($"{Emojis.Note} Note that this member's name contains spaces. You will need to surround it with \"double quotes\" when using commands referring to it, or just use the member's 5-character ID (which is `{member.Hid}`).");
 | 
			
		||||
            
 | 
			
		||||
            if (memberName.Contains(" "))
 | 
			
		||||
                await ctx.Reply($"{Emojis.Note} Note that this member's name contains spaces. You will need to surround it with \"double quotes\" when using commands referring to it, or just use the member's 5-character ID (which is `{member.Hid}`).");
 | 
			
		||||
            if (memberCount >= Limits.MaxMemberCount)
 | 
			
		||||
                await ctx.Reply($"{Emojis.Warn} You have reached the per-system member limit ({Limits.MaxMemberCount}). You will be unable to create additional members until existing members are deleted.");
 | 
			
		||||
            else if (memberCount >= Limits.MaxMembersWarnThreshold)
 | 
			
		||||
                await ctx.Reply($"{Emojis.Warn} You are approaching the per-system member limit ({memberCount} / {Limits.MaxMemberCount} members). Please review your member list for unused or duplicate members.");
 | 
			
		||||
 | 
			
		||||
            await _proxyCache.InvalidateResultsForSystem(ctx.System);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,8 @@ namespace PluralKit.Bot {
 | 
			
		||||
        public static PKError DescriptionTooLongError(int length) => new PKError($"Description too long ({length}/{Limits.MaxDescriptionLength} characters).");
 | 
			
		||||
        public static PKError MemberNameTooLongError(int length) => new PKError($"Member name too long ({length}/{Limits.MaxMemberNameLength} characters).");
 | 
			
		||||
        public static PKError MemberPronounsTooLongError(int length) => new PKError($"Member pronouns too long ({length}/{Limits.MaxMemberNameLength} characters).");
 | 
			
		||||
        
 | 
			
		||||
        public static PKError MemberLimitReachedError => new PKError($"System has reached the maximum number of members ({Limits.MaxMemberCount}). Please delete unused members first in order to create new ones.");
 | 
			
		||||
 | 
			
		||||
        public static PKError InvalidColorError(string color) => new PKError($"\"{color.SanitizeMentions()}\" is not a valid color. Color must be in 6-digit RGB hex format (eg. #ff0000).");
 | 
			
		||||
        public static PKError BirthdayParseError(string birthday) => new PKError($"\"{birthday.SanitizeMentions()}\" could not be parsed as a valid date. Try a format like \"2016-12-24\" or \"May 3 1996\".");
 | 
			
		||||
        public static PKError ProxyMustHaveText => new PKSyntaxError("Example proxy message must contain the string 'text'.");
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user