run dotnet format
This commit is contained in:
@@ -24,10 +24,10 @@ namespace PluralKit.Bot
|
||||
_client = client;
|
||||
}
|
||||
|
||||
public async Task Name(Context ctx, PKMember target)
|
||||
public async Task Name(Context ctx, PKMember target)
|
||||
{
|
||||
ctx.CheckSystem().CheckOwnMember(target);
|
||||
|
||||
ctx.CheckSystem().CheckOwnMember(target);
|
||||
|
||||
var newName = ctx.RemainderOrNull() ?? throw new PKSyntaxError("You must pass a new name for the member.");
|
||||
|
||||
// Hard name length cap
|
||||
@@ -35,14 +35,14 @@ namespace PluralKit.Bot
|
||||
|
||||
// Warn if there's already a member by this name
|
||||
var existingMember = await _db.Execute(conn => _repo.GetMemberByName(conn, ctx.System.Id, newName));
|
||||
if (existingMember != null && existingMember.Id != target.Id)
|
||||
if (existingMember != null && existingMember.Id != target.Id)
|
||||
{
|
||||
var msg = $"{Emojis.Warn} You already have a member in your system with the name \"{existingMember.NameFor(ctx)}\" (`{existingMember.Hid}`). Do you want to rename this member to that name too?";
|
||||
if (!await ctx.PromptYesNo(msg, "Rename")) throw new PKError("Member renaming cancelled.");
|
||||
}
|
||||
|
||||
// Rename the member
|
||||
var patch = new MemberPatch {Name = Partial<string>.Present(newName)};
|
||||
var patch = new MemberPatch { Name = Partial<string>.Present(newName) };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
await ctx.Reply($"{Emojis.Success} Member renamed.");
|
||||
@@ -57,15 +57,16 @@ namespace PluralKit.Bot
|
||||
}
|
||||
}
|
||||
|
||||
public async Task Description(Context ctx, PKMember target) {
|
||||
public async Task Description(Context ctx, PKMember target)
|
||||
{
|
||||
if (await ctx.MatchClear("this member's description"))
|
||||
{
|
||||
ctx.CheckOwnMember(target);
|
||||
|
||||
var patch = new MemberPatch {Description = Partial<string>.Null()};
|
||||
var patch = new MemberPatch { Description = Partial<string>.Null() };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
await ctx.Reply($"{Emojis.Success} Member description cleared.");
|
||||
}
|
||||
}
|
||||
else if (!ctx.HasNext())
|
||||
{
|
||||
if (!target.DescriptionPrivacy.CanAccess(ctx.LookupContextFor(target.System)))
|
||||
@@ -81,7 +82,7 @@ namespace PluralKit.Bot
|
||||
await ctx.Reply(embed: new EmbedBuilder()
|
||||
.Title("Member description")
|
||||
.Description(target.Description)
|
||||
.Field(new("\u200B", $"To print the description with formatting, type `pk;member {target.Reference()} description -raw`."
|
||||
.Field(new("\u200B", $"To print the description with formatting, type `pk;member {target.Reference()} description -raw`."
|
||||
+ (ctx.System?.Id == target.System ? $" To clear it, type `pk;member {target.Reference()} description -clear`." : "")))
|
||||
.Build());
|
||||
}
|
||||
@@ -92,23 +93,24 @@ namespace PluralKit.Bot
|
||||
var description = ctx.RemainderOrNull().NormalizeLineEndSpacing();
|
||||
if (description.IsLongerThan(Limits.MaxDescriptionLength))
|
||||
throw Errors.DescriptionTooLongError(description.Length);
|
||||
|
||||
var patch = new MemberPatch {Description = Partial<string>.Present(description)};
|
||||
|
||||
var patch = new MemberPatch { Description = Partial<string>.Present(description) };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
|
||||
await ctx.Reply($"{Emojis.Success} Member description changed.");
|
||||
}
|
||||
}
|
||||
|
||||
public async Task Pronouns(Context ctx, PKMember target) {
|
||||
|
||||
public async Task Pronouns(Context ctx, PKMember target)
|
||||
{
|
||||
if (await ctx.MatchClear("this member's pronouns"))
|
||||
{
|
||||
ctx.CheckOwnMember(target);
|
||||
|
||||
var patch = new MemberPatch {Pronouns = Partial<string>.Null()};
|
||||
var patch = new MemberPatch { Pronouns = Partial<string>.Null() };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
await ctx.Reply($"{Emojis.Success} Member pronouns cleared.");
|
||||
}
|
||||
}
|
||||
else if (!ctx.HasNext())
|
||||
{
|
||||
if (!target.PronounPrivacy.CanAccess(ctx.LookupContextFor(target.System)))
|
||||
@@ -131,10 +133,10 @@ namespace PluralKit.Bot
|
||||
var pronouns = ctx.RemainderOrNull().NormalizeLineEndSpacing();
|
||||
if (pronouns.IsLongerThan(Limits.MaxPronounsLength))
|
||||
throw Errors.MemberPronounsTooLongError(pronouns.Length);
|
||||
|
||||
var patch = new MemberPatch {Pronouns = Partial<string>.Present(pronouns)};
|
||||
|
||||
var patch = new MemberPatch { Pronouns = Partial<string>.Present(pronouns) };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
|
||||
await ctx.Reply($"{Emojis.Success} Member pronouns changed.");
|
||||
}
|
||||
}
|
||||
@@ -145,7 +147,7 @@ namespace PluralKit.Bot
|
||||
|
||||
async Task ClearBannerImage()
|
||||
{
|
||||
await _db.Execute(c => _repo.UpdateMember(c, target.Id, new MemberPatch {BannerImage = null}));
|
||||
await _db.Execute(c => _repo.UpdateMember(c, target.Id, new MemberPatch { BannerImage = null }));
|
||||
await ctx.Reply($"{Emojis.Success} Member banner image cleared.");
|
||||
}
|
||||
|
||||
@@ -153,7 +155,7 @@ namespace PluralKit.Bot
|
||||
{
|
||||
await AvatarUtils.VerifyAvatarOrThrow(_client, img.Url, isFullSizeImage: true);
|
||||
|
||||
await _db.Execute(c => _repo.UpdateMember(c, target.Id, new MemberPatch {BannerImage = img.Url}));
|
||||
await _db.Execute(c => _repo.UpdateMember(c, target.Id, new MemberPatch { BannerImage = img.Url }));
|
||||
|
||||
var msg = img.Source switch
|
||||
{
|
||||
@@ -165,8 +167,8 @@ namespace PluralKit.Bot
|
||||
|
||||
// The attachment's already right there, no need to preview it.
|
||||
var hasEmbed = img.Source != AvatarSource.Attachment;
|
||||
await (hasEmbed
|
||||
? ctx.Reply(msg, embed: new EmbedBuilder().Image(new(img.Url)).Build())
|
||||
await (hasEmbed
|
||||
? ctx.Reply(msg, embed: new EmbedBuilder().Image(new(img.Url)).Build())
|
||||
: ctx.Reply(msg));
|
||||
}
|
||||
|
||||
@@ -186,7 +188,7 @@ namespace PluralKit.Bot
|
||||
|
||||
if (await ctx.MatchClear("this member's banner image"))
|
||||
await ClearBannerImage();
|
||||
else if (await ctx.MatchImage() is {} img)
|
||||
else if (await ctx.MatchImage() is { } img)
|
||||
await SetBannerImage(img);
|
||||
else
|
||||
await ShowBannerImage();
|
||||
@@ -198,10 +200,10 @@ namespace PluralKit.Bot
|
||||
if (await ctx.MatchClear())
|
||||
{
|
||||
ctx.CheckOwnMember(target);
|
||||
|
||||
var patch = new MemberPatch {Color = Partial<string>.Null()};
|
||||
|
||||
var patch = new MemberPatch { Color = Partial<string>.Null() };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
|
||||
await ctx.Reply($"{Emojis.Success} Member color cleared.");
|
||||
}
|
||||
else if (!ctx.HasNext())
|
||||
@@ -230,8 +232,8 @@ namespace PluralKit.Bot
|
||||
|
||||
if (color.StartsWith("#")) color = color.Substring(1);
|
||||
if (!Regex.IsMatch(color, "^[0-9a-fA-F]{6}$")) throw Errors.InvalidColorError(color);
|
||||
|
||||
var patch = new MemberPatch {Color = Partial<string>.Present(color.ToLowerInvariant())};
|
||||
|
||||
var patch = new MemberPatch { Color = Partial<string>.Present(color.ToLowerInvariant()) };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
await ctx.Reply(embed: new EmbedBuilder()
|
||||
@@ -246,17 +248,17 @@ namespace PluralKit.Bot
|
||||
if (await ctx.MatchClear("this member's birthday"))
|
||||
{
|
||||
ctx.CheckOwnMember(target);
|
||||
|
||||
var patch = new MemberPatch {Birthday = Partial<LocalDate?>.Null()};
|
||||
|
||||
var patch = new MemberPatch { Birthday = Partial<LocalDate?>.Null() };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
await ctx.Reply($"{Emojis.Success} Member birthdate cleared.");
|
||||
}
|
||||
}
|
||||
else if (!ctx.HasNext())
|
||||
{
|
||||
if (!target.BirthdayPrivacy.CanAccess(ctx.LookupContextFor(target.System)))
|
||||
throw Errors.LookupNotAllowed;
|
||||
|
||||
|
||||
if (target.Birthday == null)
|
||||
await ctx.Reply("This member does not have a birthdate set."
|
||||
+ (ctx.System?.Id == target.System ? $" To set one, type `pk;member {target.Reference()} birthdate <birthdate>`." : ""));
|
||||
@@ -267,22 +269,22 @@ namespace PluralKit.Bot
|
||||
else
|
||||
{
|
||||
ctx.CheckOwnMember(target);
|
||||
|
||||
|
||||
var birthdayStr = ctx.RemainderOrNull();
|
||||
var birthday = DateUtils.ParseDate(birthdayStr, true);
|
||||
if (birthday == null) throw Errors.BirthdayParseError(birthdayStr);
|
||||
|
||||
var patch = new MemberPatch {Birthday = Partial<LocalDate?>.Present(birthday)};
|
||||
|
||||
var patch = new MemberPatch { Birthday = Partial<LocalDate?>.Present(birthday) };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
await ctx.Reply($"{Emojis.Success} Member birthdate changed.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private async Task<EmbedBuilder> CreateMemberNameInfoEmbed(Context ctx, PKMember target)
|
||||
{
|
||||
var lcx = ctx.LookupContextFor(target);
|
||||
|
||||
|
||||
MemberGuildSettings memberGuildConfig = null;
|
||||
if (ctx.Guild != null)
|
||||
memberGuildConfig = await _db.Execute(c => _repo.GetMemberGuild(c, ctx.Guild.Id, target.Id));
|
||||
@@ -329,12 +331,12 @@ namespace PluralKit.Bot
|
||||
|
||||
await ctx.Reply(successStr);
|
||||
}
|
||||
|
||||
|
||||
if (await ctx.MatchClear("this member's display name"))
|
||||
{
|
||||
ctx.CheckOwnMember(target);
|
||||
|
||||
var patch = new MemberPatch {DisplayName = Partial<string>.Null()};
|
||||
|
||||
var patch = new MemberPatch { DisplayName = Partial<string>.Null() };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
await PrintSuccess($"{Emojis.Success} Member display name cleared. This member will now be proxied using their member name \"{target.NameFor(ctx)}\".");
|
||||
@@ -365,25 +367,25 @@ namespace PluralKit.Bot
|
||||
else
|
||||
{
|
||||
ctx.CheckOwnMember(target);
|
||||
|
||||
|
||||
var newDisplayName = ctx.RemainderOrNull();
|
||||
|
||||
var patch = new MemberPatch {DisplayName = Partial<string>.Present(newDisplayName)};
|
||||
|
||||
var patch = new MemberPatch { DisplayName = Partial<string>.Present(newDisplayName) };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
await PrintSuccess($"{Emojis.Success} Member display name changed. This member will now be proxied using the name \"{newDisplayName}\".");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public async Task ServerName(Context ctx, PKMember target)
|
||||
{
|
||||
ctx.CheckGuildContext();
|
||||
|
||||
|
||||
if (await ctx.MatchClear("this member's server name"))
|
||||
{
|
||||
ctx.CheckOwnMember(target);
|
||||
|
||||
var patch = new MemberGuildPatch {DisplayName = null};
|
||||
var patch = new MemberGuildPatch { DisplayName = null };
|
||||
await _db.Execute(conn => _repo.UpsertMemberGuild(conn, target.Id, ctx.Guild.Id, patch));
|
||||
|
||||
if (target.DisplayName != null)
|
||||
@@ -419,16 +421,16 @@ namespace PluralKit.Bot
|
||||
else
|
||||
{
|
||||
ctx.CheckOwnMember(target);
|
||||
|
||||
|
||||
var newServerName = ctx.RemainderOrNull();
|
||||
|
||||
var patch = new MemberGuildPatch {DisplayName = newServerName};
|
||||
|
||||
var patch = new MemberGuildPatch { DisplayName = newServerName };
|
||||
await _db.Execute(conn => _repo.UpsertMemberGuild(conn, target.Id, ctx.Guild.Id, patch));
|
||||
|
||||
await ctx.Reply($"{Emojis.Success} Member server name changed. This member will now be proxied using the name \"{newServerName}\" in this server ({ctx.Guild.Name}).");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public async Task KeepProxy(Context ctx, PKMember target)
|
||||
{
|
||||
ctx.CheckSystem().CheckOwnMember(target);
|
||||
@@ -446,9 +448,9 @@ namespace PluralKit.Bot
|
||||
return;
|
||||
};
|
||||
|
||||
var patch = new MemberPatch {KeepProxy = Partial<bool>.Present(newValue)};
|
||||
var patch = new MemberPatch { KeepProxy = Partial<bool>.Present(newValue) };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
|
||||
if (newValue)
|
||||
await ctx.Reply($"{Emojis.Success} Member proxy tags will now be included in the resulting message when proxying.");
|
||||
else
|
||||
@@ -473,7 +475,7 @@ namespace PluralKit.Bot
|
||||
return;
|
||||
};
|
||||
|
||||
var patch = new MemberPatch {AllowAutoproxy = Partial<bool>.Present(newValue)};
|
||||
var patch = new MemberPatch { AllowAutoproxy = Partial<bool>.Present(newValue) };
|
||||
await _db.Execute(conn => _repo.UpdateMember(conn, target.Id, patch));
|
||||
|
||||
if (newValue)
|
||||
@@ -491,18 +493,18 @@ namespace PluralKit.Bot
|
||||
{
|
||||
await ctx.Reply(embed: new EmbedBuilder()
|
||||
.Title($"Current privacy settings for {target.NameFor(ctx)}")
|
||||
.Field(new("Name (replaces name with display name if member has one)",target.NamePrivacy.Explanation()))
|
||||
.Field(new("Name (replaces name with display name if member has one)", target.NamePrivacy.Explanation()))
|
||||
.Field(new("Description", target.DescriptionPrivacy.Explanation()))
|
||||
.Field(new("Avatar", target.AvatarPrivacy.Explanation()))
|
||||
.Field(new("Birthday", target.BirthdayPrivacy.Explanation()))
|
||||
.Field(new("Pronouns", target.PronounPrivacy.Explanation()))
|
||||
.Field(new("Meta (message count, last front, last message)",target.MetadataPrivacy.Explanation()))
|
||||
.Field(new("Meta (message count, last front, last message)", target.MetadataPrivacy.Explanation()))
|
||||
.Field(new("Visibility", target.MemberVisibility.Explanation()))
|
||||
.Description("To edit privacy settings, use the command:\n`pk;member <member> privacy <subject> <level>`\n\n- `subject` is one of `name`, `description`, `avatar`, `birthday`, `pronouns`, `created`, `messages`, `visibility`, or `all`\n- `level` is either `public` or `private`.")
|
||||
.Build());
|
||||
.Build());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Get guild settings (mostly for warnings and such)
|
||||
MemberGuildSettings guildSettings = null;
|
||||
if (ctx.Guild != null)
|
||||
@@ -511,17 +513,17 @@ namespace PluralKit.Bot
|
||||
async Task SetAll(PrivacyLevel level)
|
||||
{
|
||||
await _db.Execute(c => _repo.UpdateMember(c, target.Id, new MemberPatch().WithAllPrivacy(level)));
|
||||
|
||||
|
||||
if (level == PrivacyLevel.Private)
|
||||
await ctx.Reply($"{Emojis.Success} All {target.NameFor(ctx)}'s privacy settings have been set to **{level.LevelName()}**. Other accounts will now see nothing on the member card.");
|
||||
else
|
||||
else
|
||||
await ctx.Reply($"{Emojis.Success} All {target.NameFor(ctx)}'s privacy settings have been set to **{level.LevelName()}**. Other accounts will now see everything on the member card.");
|
||||
}
|
||||
|
||||
async Task SetLevel(MemberPrivacySubject subject, PrivacyLevel level)
|
||||
{
|
||||
await _db.Execute(c => _repo.UpdateMember(c, target.Id, new MemberPatch().WithPrivacy(subject, level)));
|
||||
|
||||
|
||||
var subjectName = subject switch
|
||||
{
|
||||
MemberPrivacySubject.Name => "name privacy",
|
||||
@@ -533,7 +535,7 @@ namespace PluralKit.Bot
|
||||
MemberPrivacySubject.Visibility => "visibility",
|
||||
_ => throw new ArgumentOutOfRangeException($"Unknown privacy subject {subject}")
|
||||
};
|
||||
|
||||
|
||||
var explanation = (subject, level) switch
|
||||
{
|
||||
(MemberPrivacySubject.Name, PrivacyLevel.Private) => "This member's name is now hidden from other systems, and will be replaced by the member's display name.",
|
||||
@@ -543,7 +545,7 @@ namespace PluralKit.Bot
|
||||
(MemberPrivacySubject.Pronouns, PrivacyLevel.Private) => "This member's pronouns are now hidden from other systems.",
|
||||
(MemberPrivacySubject.Metadata, PrivacyLevel.Private) => "This member's metadata (eg. created timestamp, message count, etc) is now hidden from other systems.",
|
||||
(MemberPrivacySubject.Visibility, PrivacyLevel.Private) => "This member is now hidden from member lists.",
|
||||
|
||||
|
||||
(MemberPrivacySubject.Name, PrivacyLevel.Public) => "This member's name is no longer hidden from other systems.",
|
||||
(MemberPrivacySubject.Description, PrivacyLevel.Public) => "This member's description is no longer hidden from other systems.",
|
||||
(MemberPrivacySubject.Avatar, PrivacyLevel.Public) => "This member's avatar is no longer hidden from other systems.",
|
||||
@@ -551,16 +553,16 @@ namespace PluralKit.Bot
|
||||
(MemberPrivacySubject.Pronouns, PrivacyLevel.Public) => "This member's pronouns are no longer hidden other systems.",
|
||||
(MemberPrivacySubject.Metadata, PrivacyLevel.Public) => "This member's metadata (eg. created timestamp, message count, etc) is no longer hidden from other systems.",
|
||||
(MemberPrivacySubject.Visibility, PrivacyLevel.Public) => "This member is no longer hidden from member lists.",
|
||||
|
||||
|
||||
_ => throw new InvalidOperationException($"Invalid subject/level tuple ({subject}, {level})")
|
||||
};
|
||||
|
||||
|
||||
await ctx.Reply($"{Emojis.Success} {target.NameFor(ctx)}'s **{subjectName}** has been set to **{level.LevelName()}**. {explanation}");
|
||||
|
||||
|
||||
// Name privacy only works given a display name
|
||||
if (subject == MemberPrivacySubject.Name && level == PrivacyLevel.Private && target.DisplayName == null)
|
||||
await ctx.Reply($"{Emojis.Warn} This member does not have a display name set, and name privacy **will not take effect**.");
|
||||
|
||||
|
||||
// Avatar privacy doesn't apply when proxying if no server avatar is set
|
||||
if (subject == MemberPrivacySubject.Avatar && level == PrivacyLevel.Private && guildSettings?.AvatarUrl == null)
|
||||
await ctx.Reply($"{Emojis.Warn} This member does not have a server avatar set, so *proxying* will **still show the member avatar**. If you want to hide your avatar when proxying here, set a server avatar: `pk;member {target.Reference()} serveravatar`");
|
||||
@@ -571,17 +573,17 @@ namespace PluralKit.Bot
|
||||
else
|
||||
await SetLevel(ctx.PopMemberPrivacySubject(), ctx.PopPrivacyLevel());
|
||||
}
|
||||
|
||||
|
||||
public async Task Delete(Context ctx, PKMember target)
|
||||
{
|
||||
ctx.CheckSystem().CheckOwnMember(target);
|
||||
|
||||
|
||||
await ctx.Reply($"{Emojis.Warn} Are you sure you want to delete \"{target.NameFor(ctx)}\"? If so, reply to this message with the member's ID (`{target.Hid}`). __***This cannot be undone!***__");
|
||||
if (!await ctx.ConfirmWithReply(target.Hid)) throw Errors.MemberDeleteCancelled;
|
||||
|
||||
|
||||
await _db.Execute(conn => _repo.DeleteMember(conn, target.Id));
|
||||
|
||||
|
||||
await ctx.Reply($"{Emojis.Success} Member deleted.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user