feat: config setting to automatically set members/groups to private when creating
This commit is contained in:
		@@ -58,6 +58,20 @@ public class Config
 | 
			
		||||
            "enabled"
 | 
			
		||||
        ));
 | 
			
		||||
 | 
			
		||||
        items.Add(new(
 | 
			
		||||
            "private member",
 | 
			
		||||
            "Whether member privacy is automatically set to private for new members",
 | 
			
		||||
            EnabledDisabled(ctx.Config.MemberDefaultPrivate),
 | 
			
		||||
            "disabled"
 | 
			
		||||
        ));
 | 
			
		||||
 | 
			
		||||
        items.Add(new(
 | 
			
		||||
            "private group",
 | 
			
		||||
            "Whether group privacy is automatically set to private for new groups",
 | 
			
		||||
            EnabledDisabled(ctx.Config.GroupDefaultPrivate),
 | 
			
		||||
            "disabled"
 | 
			
		||||
        ));
 | 
			
		||||
 | 
			
		||||
        items.Add(new(
 | 
			
		||||
            "Member limit",
 | 
			
		||||
            "The maximum number of registered members for your system",
 | 
			
		||||
@@ -298,4 +312,56 @@ public class Config
 | 
			
		||||
                return $"**{z.Id}**";
 | 
			
		||||
            });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task MemberDefaultPrivacy(Context ctx)
 | 
			
		||||
    {
 | 
			
		||||
        ctx.CheckSystem();
 | 
			
		||||
 | 
			
		||||
        if (!ctx.HasNext())
 | 
			
		||||
        {
 | 
			
		||||
            if (ctx.Config.MemberDefaultPrivate) { await ctx.Reply("Newly created members will currently have their privacy settings set to private. To change this, type `pk;config private member off`"); }
 | 
			
		||||
            else { await ctx.Reply("Newly created members will currently have their privacy settings set to public. To automatically set new members' privacy settings to private, type `pk;config private member on`"); }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            if (ctx.Match("on", "enable"))
 | 
			
		||||
            {
 | 
			
		||||
                await _repo.UpdateSystemConfig(ctx.System.Id, new() { MemberDefaultPrivate = true });
 | 
			
		||||
 | 
			
		||||
                await ctx.Reply("Newly created members will now have their privacy settings set to private.");
 | 
			
		||||
            }
 | 
			
		||||
            if (ctx.Match("off", "disable"))
 | 
			
		||||
            {
 | 
			
		||||
                await _repo.UpdateSystemConfig(ctx.System.Id, new() { MemberDefaultPrivate = false });
 | 
			
		||||
 | 
			
		||||
                await ctx.Reply("Newly created members will now have their privacy settings set to public.");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task GroupDefaultPrivacy(Context ctx)
 | 
			
		||||
    {
 | 
			
		||||
        ctx.CheckSystem();
 | 
			
		||||
 | 
			
		||||
        if (!ctx.HasNext())
 | 
			
		||||
        {
 | 
			
		||||
            if (ctx.Config.MemberDefaultPrivate) { await ctx.Reply("Newly created groups will currently have their privacy settings set to private. To change this, type `pk;config private group off`"); }
 | 
			
		||||
            else { await ctx.Reply("Newly created groups will currently have their privacy settings set to public. To automatically set new groups' privacy settings to private, type `pk;config private group on`"); }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            if (ctx.Match("on", "enable"))
 | 
			
		||||
            {
 | 
			
		||||
                await _repo.UpdateSystemConfig(ctx.System.Id, new() { GroupDefaultPrivate = true });
 | 
			
		||||
 | 
			
		||||
                await ctx.Reply("Newly created groups will now have their privacy settings set to private.");
 | 
			
		||||
            }
 | 
			
		||||
            if (ctx.Match("off", "disable"))
 | 
			
		||||
            {
 | 
			
		||||
                await _repo.UpdateSystemConfig(ctx.System.Id, new() { GroupDefaultPrivate = false });
 | 
			
		||||
 | 
			
		||||
                await ctx.Reply("Newly created groups will now have their privacy settings set to public.");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -64,14 +64,24 @@ public class Groups
 | 
			
		||||
                throw new PKError("Group creation cancelled.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        using var conn = await _db.Obtain();
 | 
			
		||||
        var newGroup = await _repo.CreateGroup(ctx.System.Id, groupName);
 | 
			
		||||
 | 
			
		||||
        _ = _dispatch.Dispatch(newGroup.Id,
 | 
			
		||||
            new UpdateDispatchData
 | 
			
		||||
            {
 | 
			
		||||
                Event = DispatchEvent.CREATE_GROUP,
 | 
			
		||||
                EventData = JObject.FromObject(new { name = groupName })
 | 
			
		||||
            });
 | 
			
		||||
        var dispatchData = new JObject();
 | 
			
		||||
        dispatchData.Add("name", groupName);
 | 
			
		||||
 | 
			
		||||
        if (ctx.Config.GroupDefaultPrivate)
 | 
			
		||||
        {
 | 
			
		||||
            var patch = new GroupPatch().WithAllPrivacy(PrivacyLevel.Private);
 | 
			
		||||
            await _repo.UpdateGroup(newGroup.Id, patch, conn);
 | 
			
		||||
            dispatchData.Merge(patch.ToJson());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        _ = _dispatch.Dispatch(newGroup.Id, new UpdateDispatchData
 | 
			
		||||
        {
 | 
			
		||||
            Event = DispatchEvent.CREATE_GROUP,
 | 
			
		||||
            EventData = dispatchData
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        var eb = new EmbedBuilder()
 | 
			
		||||
            .Description(
 | 
			
		||||
 
 | 
			
		||||
@@ -55,13 +55,22 @@ public class Member
 | 
			
		||||
            throw Errors.MemberLimitReachedError(memberLimit);
 | 
			
		||||
 | 
			
		||||
        // Create the member
 | 
			
		||||
        var member = await _repo.CreateMember(ctx.System.Id, memberName);
 | 
			
		||||
        var member = await _repo.CreateMember(ctx.System.Id, memberName, conn);
 | 
			
		||||
        memberCount++;
 | 
			
		||||
 | 
			
		||||
        JObject dispatchData = new JObject();
 | 
			
		||||
        dispatchData.Add("name", memberName);
 | 
			
		||||
 | 
			
		||||
        if (ctx.Config.MemberDefaultPrivate)
 | 
			
		||||
        {
 | 
			
		||||
            var patch = new MemberPatch().WithAllPrivacy(PrivacyLevel.Private);
 | 
			
		||||
            await _repo.UpdateMember(member.Id, patch, conn);
 | 
			
		||||
            dispatchData.Merge(patch.ToJson());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Try to match an image attached to the message
 | 
			
		||||
        var avatarArg = ctx.Message.Attachments.FirstOrDefault();
 | 
			
		||||
        Exception imageMatchError = null;
 | 
			
		||||
        var sentDispatch = false;
 | 
			
		||||
        if (avatarArg != null)
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
@@ -69,31 +78,25 @@ public class Member
 | 
			
		||||
                await _db.Execute(conn =>
 | 
			
		||||
                    _repo.UpdateMember(member.Id, new MemberPatch { AvatarUrl = avatarArg.Url }, conn));
 | 
			
		||||
 | 
			
		||||
                _ = _dispatch.Dispatch(member.Id, new UpdateDispatchData
 | 
			
		||||
                {
 | 
			
		||||
                    Event = DispatchEvent.CREATE_MEMBER,
 | 
			
		||||
                    EventData = JObject.FromObject(new { name = memberName, avatar_url = avatarArg.Url }),
 | 
			
		||||
                });
 | 
			
		||||
                sentDispatch = true;
 | 
			
		||||
                dispatchData.Add("avatar_url", avatarArg.Url);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                imageMatchError = e;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        if (!sentDispatch)
 | 
			
		||||
            _ = _dispatch.Dispatch(member.Id, new UpdateDispatchData
 | 
			
		||||
            {
 | 
			
		||||
                Event = DispatchEvent.CREATE_MEMBER,
 | 
			
		||||
                EventData = JObject.FromObject(new { name = memberName }),
 | 
			
		||||
            });
 | 
			
		||||
        _ = _dispatch.Dispatch(member.Id, new UpdateDispatchData
 | 
			
		||||
        {
 | 
			
		||||
            Event = DispatchEvent.CREATE_MEMBER,
 | 
			
		||||
            EventData = dispatchData,
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // Send confirmation and space hint
 | 
			
		||||
        await ctx.Reply(
 | 
			
		||||
            $"{Emojis.Success} Member \"{memberName}\" (`{member.Hid}`) registered! Check out the getting started page for how to get a member up and running: https://pluralkit.me/start#create-a-member");
 | 
			
		||||
        // todo: move this to ModelRepository
 | 
			
		||||
        if (await _db.Execute(conn => conn.QuerySingleAsync<bool>("select has_private_members(@System)",
 | 
			
		||||
                new { System = ctx.System.Id }))) //if has private members
 | 
			
		||||
                new { System = ctx.System.Id })) && !ctx.Config.MemberDefaultPrivate) //if has private members
 | 
			
		||||
            await ctx.Reply(
 | 
			
		||||
                $"{Emojis.Warn} This member is currently **public**. To change this, use `pk;member {member.Hid} private`.");
 | 
			
		||||
        if (avatarArg != null)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user