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) =>
|
public static bool MatchRaw(this Context ctx) =>
|
||||||
ctx.Match("r", "raw") || ctx.MatchFlag("r", "raw");
|
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)
|
public static (ulong? messageId, ulong? channelId) MatchMessage(this Context ctx, bool parseRawMessageId)
|
||||||
{
|
{
|
||||||
if (ctx.Message.Type == Message.MessageType.Reply && ctx.Message.MessageReference?.MessageId != null)
|
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)
|
public async Task AutoproxyAccount(Context ctx)
|
||||||
{
|
{
|
||||||
// todo: this might be useful elsewhere, consider moving it to ctx.MatchToggle
|
if (!ctx.HasNext())
|
||||||
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
|
|
||||||
{
|
{
|
||||||
var statusString = ctx.MessageContext.AllowAutoproxy ? "enabled" : "disabled";
|
await ctx.Reply($"Autoproxy is currently **{EnabledDisabled(ctx.MessageContext.AllowAutoproxy)}** for account <@{ctx.Author.Id}>.");
|
||||||
await ctx.Reply($"Autoproxy is currently **{statusString}** 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);
|
var statusString = EnabledDisabled(allow);
|
||||||
if (ctx.MessageContext.AllowAutoproxy == 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)}.");
|
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)
|
public async Task SystemTimezone(Context ctx)
|
||||||
{
|
{
|
||||||
if (ctx.System == null) throw Errors.NoSystemError;
|
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)
|
public async Task MemberDefaultPrivacy(Context ctx)
|
||||||
{
|
{
|
||||||
@ -331,13 +322,13 @@ public class Config
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ctx.Match("on", "enable"))
|
if (ctx.MatchToggle())
|
||||||
{
|
{
|
||||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { MemberDefaultPrivate = true });
|
await _repo.UpdateSystemConfig(ctx.System.Id, new() { MemberDefaultPrivate = true });
|
||||||
|
|
||||||
await ctx.Reply("Newly created members will now have their privacy settings set to private.");
|
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 });
|
await _repo.UpdateSystemConfig(ctx.System.Id, new() { MemberDefaultPrivate = false });
|
||||||
|
|
||||||
@ -355,13 +346,13 @@ public class Config
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ctx.Match("on", "enable"))
|
if (ctx.MatchToggle())
|
||||||
{
|
{
|
||||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { GroupDefaultPrivate = true });
|
await _repo.UpdateSystemConfig(ctx.System.Id, new() { GroupDefaultPrivate = true });
|
||||||
|
|
||||||
await ctx.Reply("Newly created groups will now have their privacy settings set to private.");
|
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 });
|
await _repo.UpdateSystemConfig(ctx.System.Id, new() { GroupDefaultPrivate = false });
|
||||||
|
|
||||||
@ -379,18 +370,17 @@ public class Config
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx.Match("true"))
|
if (ctx.MatchToggle())
|
||||||
{
|
{
|
||||||
await _repo.UpdateSystemConfig(ctx.System.Id, new() { ShowPrivateInfo = true });
|
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.");
|
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 _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.");
|
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