feat: better command parsing for pk;config
This commit is contained in:
parent
426d753827
commit
1626e0f548
@ -99,6 +99,16 @@ public static class ContextArgumentsExt
|
||||
public static bool MatchRaw(this Context ctx) =>
|
||||
ctx.Match("r", "raw") || ctx.MatchFlag("r", "raw");
|
||||
|
||||
public static bool MatchToggle(this Context ctx)
|
||||
{
|
||||
if (ctx.Match("yes", "on", "enable"))
|
||||
return true;
|
||||
else if (ctx.Match("no", "off", "disable"))
|
||||
return false;
|
||||
else
|
||||
throw new PKError("You must pass either \"on\" or \"off\" to this command.");
|
||||
}
|
||||
|
||||
public static (ulong? messageId, ulong? channelId) MatchMessage(this Context ctx, bool parseRawMessageId)
|
||||
{
|
||||
if (ctx.Message.Type == Message.MessageType.Reply && ctx.Message.MessageReference?.MessageId != null)
|
||||
|
@ -122,27 +122,18 @@ public class Config
|
||||
}
|
||||
);
|
||||
}
|
||||
private string EnabledDisabled(bool value) => value ? "enabled" : "disabled";
|
||||
|
||||
public async Task AutoproxyAccount(Context ctx)
|
||||
{
|
||||
// todo: this might be useful elsewhere, consider moving it to ctx.MatchToggle
|
||||
if (ctx.Match("enable", "on"))
|
||||
await AutoproxyEnableDisable(ctx, true);
|
||||
else if (ctx.Match("disable", "off"))
|
||||
await AutoproxyEnableDisable(ctx, false);
|
||||
else if (ctx.HasNext())
|
||||
throw new PKSyntaxError("You must pass either \"on\" or \"off\".");
|
||||
else
|
||||
if (!ctx.HasNext())
|
||||
{
|
||||
var statusString = ctx.MessageContext.AllowAutoproxy ? "enabled" : "disabled";
|
||||
await ctx.Reply($"Autoproxy is currently **{statusString}** for account <@{ctx.Author.Id}>.");
|
||||
await ctx.Reply($"Autoproxy is currently **{EnabledDisabled(ctx.MessageContext.AllowAutoproxy)}** for account <@{ctx.Author.Id}>.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private string EnabledDisabled(bool value) => value ? "enabled" : "disabled";
|
||||
var allow = ctx.MatchToggle();
|
||||
|
||||
private async Task AutoproxyEnableDisable(Context ctx, bool allow)
|
||||
{
|
||||
var statusString = EnabledDisabled(allow);
|
||||
if (ctx.MessageContext.AllowAutoproxy == allow)
|
||||
{
|
||||
@ -202,32 +193,6 @@ public class Config
|
||||
await ctx.Reply($"{Emojis.Success} Latch timeout set to {newTimeout.Value!.ToTimeSpan().Humanize(4)}.");
|
||||
}
|
||||
|
||||
public async Task SystemPing(Context ctx)
|
||||
{
|
||||
ctx.CheckSystem();
|
||||
|
||||
if (!ctx.HasNext())
|
||||
{
|
||||
if (ctx.Config.PingsEnabled) { await ctx.Reply("Reaction pings are currently **enabled** for your system. To disable reaction pings, type `pk;config ping disable`."); }
|
||||
else { await ctx.Reply("Reaction pings are currently **disabled** for your system. To enable reaction pings, type `pk;config ping enable`."); }
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ctx.Match("on", "enable"))
|
||||
{
|
||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { PingsEnabled = true });
|
||||
|
||||
await ctx.Reply("Reaction pings have now been enabled.");
|
||||
}
|
||||
if (ctx.Match("off", "disable"))
|
||||
{
|
||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { PingsEnabled = false });
|
||||
|
||||
await ctx.Reply("Reaction pings have now been disabled.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task SystemTimezone(Context ctx)
|
||||
{
|
||||
if (ctx.System == null) throw Errors.NoSystemError;
|
||||
@ -320,7 +285,33 @@ public class Config
|
||||
});
|
||||
}
|
||||
|
||||
// todo: this command parsing is really messy
|
||||
public async Task SystemPing(Context ctx)
|
||||
{
|
||||
// note: this is here because this is also used in `pk;system ping`, which does not CheckSystem
|
||||
ctx.CheckSystem();
|
||||
|
||||
// todo: move all the other config settings to this format
|
||||
|
||||
String Response(bool isError, bool val)
|
||||
=> $"Reaction pings are {(isError ? "already" : "currently")} **{EnabledDisabled(val)}** for your system. "
|
||||
+ $"To {EnabledDisabled(!val)[..^1]} reaction pings, type `pk;config ping {EnabledDisabled(!val)[..^1]}`.";
|
||||
|
||||
if (!ctx.HasNext())
|
||||
{
|
||||
await ctx.Reply(Response(false, ctx.Config.PingsEnabled));
|
||||
return;
|
||||
}
|
||||
|
||||
var value = ctx.MatchToggle();
|
||||
|
||||
if (ctx.Config.PingsEnabled == value)
|
||||
await ctx.Reply(Response(true, ctx.Config.PingsEnabled));
|
||||
else
|
||||
{
|
||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { PingsEnabled = value });
|
||||
await ctx.Reply($"Reaction pings have now been {EnabledDisabled(value)}.");
|
||||
}
|
||||
}
|
||||
|
||||
public async Task MemberDefaultPrivacy(Context ctx)
|
||||
{
|
||||
@ -331,13 +322,13 @@ public class Config
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ctx.Match("on", "enable"))
|
||||
if (ctx.MatchToggle())
|
||||
{
|
||||
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"))
|
||||
else
|
||||
{
|
||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { MemberDefaultPrivate = false });
|
||||
|
||||
@ -355,13 +346,13 @@ public class Config
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ctx.Match("on", "enable"))
|
||||
if (ctx.MatchToggle())
|
||||
{
|
||||
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"))
|
||||
else
|
||||
{
|
||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { GroupDefaultPrivate = false });
|
||||
|
||||
@ -379,18 +370,17 @@ public class Config
|
||||
return;
|
||||
}
|
||||
|
||||
if (ctx.Match("true"))
|
||||
if (ctx.MatchToggle())
|
||||
{
|
||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { ShowPrivateInfo = true });
|
||||
|
||||
await ctx.Reply("Private information will now be **shown** when looking up your own info. Use the `-public` flag to hide it.");
|
||||
}
|
||||
else if (ctx.Match("false"))
|
||||
else
|
||||
{
|
||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { ShowPrivateInfo = false });
|
||||
|
||||
await ctx.Reply("Private information will now be **hidden** when looking up your own info. Use the `-private` flag to show it.");
|
||||
}
|
||||
else throw new PKError("You must pass 'true' or 'false' to this command.");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user