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