mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-04 04:56:49 +00:00
feat(bot): add option to log a switch when proxying
This commit is contained in:
parent
a0f6ed6f89
commit
e1c2e6b6d6
10 changed files with 50 additions and 3 deletions
|
|
@ -596,6 +596,8 @@ public partial class CommandTree
|
||||||
return ctx.Execute<Config>(null, m => m.HidListPadding(ctx));
|
return ctx.Execute<Config>(null, m => m.HidListPadding(ctx));
|
||||||
if (ctx.MatchMultiple(new[] { "member", "group" }, new[] { "limit" }) || ctx.Match("limit"))
|
if (ctx.MatchMultiple(new[] { "member", "group" }, new[] { "limit" }) || ctx.Match("limit"))
|
||||||
return ctx.Execute<Config>(null, m => m.LimitUpdate(ctx));
|
return ctx.Execute<Config>(null, m => m.LimitUpdate(ctx));
|
||||||
|
if (ctx.MatchMultiple(new[] { "proxy" }, new[] { "switch" }) || ctx.Match("proxyswitch", "ps"))
|
||||||
|
return ctx.Execute<Config>(null, m => m.ProxySwitch(ctx));
|
||||||
|
|
||||||
// todo: maybe add the list of configuration keys here?
|
// todo: maybe add the list of configuration keys here?
|
||||||
return ctx.Reply($"{Emojis.Error} Could not find a setting with that name. Please see `pk;commands config` for the list of possible config settings.");
|
return ctx.Reply($"{Emojis.Error} Could not find a setting with that name. Please see `pk;commands config` for the list of possible config settings.");
|
||||||
|
|
|
||||||
|
|
@ -123,6 +123,13 @@ public class Config
|
||||||
"off"
|
"off"
|
||||||
));
|
));
|
||||||
|
|
||||||
|
items.Add(new(
|
||||||
|
"Proxy Switch",
|
||||||
|
"Whether using a proxy tag logs a switch",
|
||||||
|
EnabledDisabled(ctx.Config.ProxySwitch),
|
||||||
|
"disabled"
|
||||||
|
));
|
||||||
|
|
||||||
await ctx.Paginate<PaginatedConfigItem>(
|
await ctx.Paginate<PaginatedConfigItem>(
|
||||||
items.ToAsyncEnumerable(),
|
items.ToAsyncEnumerable(),
|
||||||
items.Count,
|
items.Count,
|
||||||
|
|
@ -537,6 +544,20 @@ public class Config
|
||||||
else throw new PKError(badInputError);
|
else throw new PKError(badInputError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task ProxySwitch(Context ctx)
|
||||||
|
{
|
||||||
|
if (!ctx.HasNext())
|
||||||
|
{
|
||||||
|
var msg = $"Logging a switch every time a proxy tag is used is currently **{EnabledDisabled(ctx.Config.ProxySwitch)}**.";
|
||||||
|
await ctx.Reply(msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newVal = ctx.MatchToggle(false);
|
||||||
|
await ctx.Repository.UpdateSystemConfig(ctx.System.Id, new() { ProxySwitch = newVal });
|
||||||
|
await ctx.Reply($"Logging a switch every time a proxy tag is used is now {EnabledDisabled(newVal)}.");
|
||||||
|
}
|
||||||
|
|
||||||
public Task LimitUpdate(Context ctx)
|
public Task LimitUpdate(Context ctx)
|
||||||
{
|
{
|
||||||
throw new PKError("You cannot update your own member or group limits. If you need a limit update, please join the " +
|
throw new PKError("You cannot update your own member or group limits. If you need a limit update, please join the " +
|
||||||
|
|
|
||||||
|
|
@ -506,6 +506,10 @@ public class ProxyService
|
||||||
|
|
||||||
Task DispatchWebhook() => _dispatch.Dispatch(ctx.SystemId.Value, sentMessage);
|
Task DispatchWebhook() => _dispatch.Dispatch(ctx.SystemId.Value, sentMessage);
|
||||||
|
|
||||||
|
Task MaybeLogSwitch() => (ctx.ProxySwitch && !Array.Exists(ctx.LastSwitchMembers, element => element == match.Member.Id))
|
||||||
|
? _db.Execute(conn => _repo.AddSwitch(conn, (SystemId)ctx.SystemId, new[] { match.Member.Id }))
|
||||||
|
: Task.CompletedTask;
|
||||||
|
|
||||||
async Task DeleteProxyTriggerMessage()
|
async Task DeleteProxyTriggerMessage()
|
||||||
{
|
{
|
||||||
if (!deletePrevious)
|
if (!deletePrevious)
|
||||||
|
|
@ -539,7 +543,8 @@ public class ProxyService
|
||||||
UpdateMemberForSentMessage(),
|
UpdateMemberForSentMessage(),
|
||||||
LogMessageToChannel(),
|
LogMessageToChannel(),
|
||||||
SaveLatchAutoproxy(),
|
SaveLatchAutoproxy(),
|
||||||
DispatchWebhook()
|
DispatchWebhook(),
|
||||||
|
MaybeLogSwitch()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,5 +31,6 @@ public class MessageContext
|
||||||
public int? LatchTimeout { get; }
|
public int? LatchTimeout { get; }
|
||||||
public bool CaseSensitiveProxyTags { get; }
|
public bool CaseSensitiveProxyTags { get; }
|
||||||
public bool ProxyErrorMessageEnabled { get; }
|
public bool ProxyErrorMessageEnabled { get; }
|
||||||
|
public bool ProxySwitch { get; }
|
||||||
public bool DenyBotUsage { get; }
|
public bool DenyBotUsage { get; }
|
||||||
}
|
}
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
latch_timeout integer,
|
latch_timeout integer,
|
||||||
case_sensitive_proxy_tags bool,
|
case_sensitive_proxy_tags bool,
|
||||||
proxy_error_message_enabled bool,
|
proxy_error_message_enabled bool,
|
||||||
|
proxy_switch bool,
|
||||||
|
|
||||||
tag_enabled bool,
|
tag_enabled bool,
|
||||||
proxy_enabled bool,
|
proxy_enabled bool,
|
||||||
|
|
@ -40,6 +41,7 @@ as $$
|
||||||
system_config.latch_timeout as latch_timeout,
|
system_config.latch_timeout as latch_timeout,
|
||||||
system_config.case_sensitive_proxy_tags as case_sensitive_proxy_tags,
|
system_config.case_sensitive_proxy_tags as case_sensitive_proxy_tags,
|
||||||
system_config.proxy_error_message_enabled as proxy_error_message_enabled,
|
system_config.proxy_error_message_enabled as proxy_error_message_enabled,
|
||||||
|
system_config.proxy_switch as proxy_switch,
|
||||||
|
|
||||||
-- system_guild table
|
-- system_guild table
|
||||||
coalesce(system_guild.tag_enabled, true) as tag_enabled,
|
coalesce(system_guild.tag_enabled, true) as tag_enabled,
|
||||||
|
|
|
||||||
6
PluralKit.Core/Database/Migrations/45.sql
Normal file
6
PluralKit.Core/Database/Migrations/45.sql
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
-- database version 45
|
||||||
|
-- add new config setting "proxy_switch"
|
||||||
|
|
||||||
|
alter table system_config add column proxy_switch bool default false;
|
||||||
|
|
||||||
|
update info set schema_version = 45;
|
||||||
|
|
@ -9,7 +9,7 @@ namespace PluralKit.Core;
|
||||||
internal class DatabaseMigrator
|
internal class DatabaseMigrator
|
||||||
{
|
{
|
||||||
private const string RootPath = "PluralKit.Core.Database"; // "resource path" root for SQL files
|
private const string RootPath = "PluralKit.Core.Database"; // "resource path" root for SQL files
|
||||||
private const int TargetSchemaVersion = 44;
|
private const int TargetSchemaVersion = 45;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
public DatabaseMigrator(ILogger logger)
|
public DatabaseMigrator(ILogger logger)
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ public class SystemConfigPatch: PatchObject
|
||||||
public Partial<bool> HidDisplaySplit { get; set; }
|
public Partial<bool> HidDisplaySplit { get; set; }
|
||||||
public Partial<bool> HidDisplayCaps { get; set; }
|
public Partial<bool> HidDisplayCaps { get; set; }
|
||||||
public Partial<SystemConfig.HidPadFormat> HidListPadding { get; set; }
|
public Partial<SystemConfig.HidPadFormat> HidListPadding { get; set; }
|
||||||
|
public Partial<bool> ProxySwitch { get; set; }
|
||||||
|
|
||||||
public override Query Apply(Query q) => q.ApplyPatch(wrapper => wrapper
|
public override Query Apply(Query q) => q.ApplyPatch(wrapper => wrapper
|
||||||
.With("ui_tz", UiTz)
|
.With("ui_tz", UiTz)
|
||||||
|
|
@ -39,6 +39,7 @@ public class SystemConfigPatch: PatchObject
|
||||||
.With("hid_display_split", HidDisplaySplit)
|
.With("hid_display_split", HidDisplaySplit)
|
||||||
.With("hid_display_caps", HidDisplayCaps)
|
.With("hid_display_caps", HidDisplayCaps)
|
||||||
.With("hid_list_padding", HidListPadding)
|
.With("hid_list_padding", HidListPadding)
|
||||||
|
.With("proxy_switch", ProxySwitch)
|
||||||
);
|
);
|
||||||
|
|
||||||
public new void AssertIsValid()
|
public new void AssertIsValid()
|
||||||
|
|
@ -103,6 +104,9 @@ public class SystemConfigPatch: PatchObject
|
||||||
if (HidListPadding.IsPresent)
|
if (HidListPadding.IsPresent)
|
||||||
o.Add("hid_list_padding", HidListPadding.Value.ToUserString());
|
o.Add("hid_list_padding", HidListPadding.Value.ToUserString());
|
||||||
|
|
||||||
|
if (ProxySwitch.IsPresent)
|
||||||
|
o.Add("proxy_switch", ProxySwitch.Value);
|
||||||
|
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -140,6 +144,9 @@ public class SystemConfigPatch: PatchObject
|
||||||
if (o.ContainsKey("hid_display_caps"))
|
if (o.ContainsKey("hid_display_caps"))
|
||||||
patch.HidDisplayCaps = o.Value<bool>("hid_display_caps");
|
patch.HidDisplayCaps = o.Value<bool>("hid_display_caps");
|
||||||
|
|
||||||
|
if (o.ContainsKey("proxy_switch"))
|
||||||
|
patch.ProxySwitch = o.Value<bool>("proxy_switch");
|
||||||
|
|
||||||
return patch;
|
return patch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -24,6 +24,7 @@ public class SystemConfig
|
||||||
public bool HidDisplaySplit { get; }
|
public bool HidDisplaySplit { get; }
|
||||||
public bool HidDisplayCaps { get; }
|
public bool HidDisplayCaps { get; }
|
||||||
public HidPadFormat HidListPadding { get; }
|
public HidPadFormat HidListPadding { get; }
|
||||||
|
public bool ProxySwitch { get; }
|
||||||
|
|
||||||
public enum HidPadFormat
|
public enum HidPadFormat
|
||||||
{
|
{
|
||||||
|
|
@ -52,6 +53,7 @@ public static class SystemConfigExt
|
||||||
o.Add("hid_display_split", cfg.HidDisplaySplit);
|
o.Add("hid_display_split", cfg.HidDisplaySplit);
|
||||||
o.Add("hid_display_caps", cfg.HidDisplayCaps);
|
o.Add("hid_display_caps", cfg.HidDisplayCaps);
|
||||||
o.Add("hid_list_padding", cfg.HidListPadding.ToUserString());
|
o.Add("hid_list_padding", cfg.HidListPadding.ToUserString());
|
||||||
|
o.Add("proxy_switch", cfg.ProxySwitch);
|
||||||
|
|
||||||
o.Add("description_templates", JArray.FromObject(cfg.DescriptionTemplates));
|
o.Add("description_templates", JArray.FromObject(cfg.DescriptionTemplates));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,7 @@ You can have a space after `pk;`, e.g. `pk;system` and `pk; system` will do the
|
||||||
- `pk;config split IDs [on|off]` - Toggles whether to display 6-letter IDs with a hyphen, to ease readability.
|
- `pk;config split IDs [on|off]` - Toggles whether to display 6-letter IDs with a hyphen, to ease readability.
|
||||||
- `pk;config capitalize IDs [on|off]` - Toggles whether to display IDs as capital letters, to ease readability.
|
- `pk;config capitalize IDs [on|off]` - Toggles whether to display IDs as capital letters, to ease readability.
|
||||||
- `pk;config pad IDs [left|right|off]` - Toggles whether to pad (add a space) 5-character IDs in lists.
|
- `pk;config pad IDs [left|right|off]` - Toggles whether to pad (add a space) 5-character IDs in lists.
|
||||||
|
- `pk;config proxy switch [on|off]` - Toggles whether to log a switch whenever you proxy as a different member.
|
||||||
|
|
||||||
## Server owner commands
|
## Server owner commands
|
||||||
*(all commands here require Manage Server permission)*
|
*(all commands here require Manage Server permission)*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue