feat: proxy debug command
Co-authored-by: Spectralitree <72747870+Spectralitree@users.noreply.github.com>
This commit is contained in:
@@ -45,24 +45,41 @@ namespace PluralKit.Bot
|
||||
|
||||
// Skip autoproxy match if we hit the escape character
|
||||
if (messageContent.StartsWith(AutoproxyEscapeCharacter))
|
||||
return false;
|
||||
throw new ProxyService.ProxyChecksFailedException("This message matches none of your proxy tags, and it was not autoproxied because it starts with a backslash (`\\`).");
|
||||
|
||||
// Find the member we should autoproxy (null if none)
|
||||
var member = ctx.AutoproxyMode switch
|
||||
{
|
||||
AutoproxyMode.Member when ctx.AutoproxyMember != null =>
|
||||
members.FirstOrDefault(m => m.Id == ctx.AutoproxyMember),
|
||||
|
||||
|
||||
AutoproxyMode.Front when ctx.LastSwitchMembers.Length > 0 =>
|
||||
members.FirstOrDefault(m => m.Id == ctx.LastSwitchMembers[0]),
|
||||
|
||||
AutoproxyMode.Latch when ctx.LastMessageMember != null && !IsLatchExpired(ctx) =>
|
||||
AutoproxyMode.Latch when ctx.LastMessageMember != null =>
|
||||
members.FirstOrDefault(m => m.Id == ctx.LastMessageMember.Value),
|
||||
|
||||
_ => null
|
||||
};
|
||||
// Throw an error if the member is null, message varies depending on autoproxy mode
|
||||
if (member == null)
|
||||
{
|
||||
if (ctx.AutoproxyMode == AutoproxyMode.Front)
|
||||
throw new ProxyService.ProxyChecksFailedException("You are using autoproxy front, but no members are currently registered as fronting. Please use `pk;switch <member>` to log a new switch.");
|
||||
else if (ctx.AutoproxyMode == AutoproxyMode.Member)
|
||||
throw new ProxyService.ProxyChecksFailedException("You are using member-specific autoproxy with an invalid member. Was this member deleted?");
|
||||
else if (ctx.AutoproxyMode == AutoproxyMode.Latch)
|
||||
throw new ProxyService.ProxyChecksFailedException("You are using autoproxy latch, but have not sent any messages yet in this server. Please send a message using proxy tags first.");
|
||||
throw new ProxyService.ProxyChecksFailedException("This message matches none of your proxy tags and autoproxy is not enabled.");
|
||||
}
|
||||
|
||||
if (ctx.AutoproxyMode != AutoproxyMode.Member && !member.AllowAutoproxy)
|
||||
throw new ProxyService.ProxyChecksFailedException("This member has autoproxy disabled. To enable it, use `pk;m <member> autoproxy on`.");
|
||||
|
||||
// Moved the IsLatchExpired() check to here, so that an expired latch and a latch without any previous messages throw different errors
|
||||
if (ctx.AutoproxyMode == AutoproxyMode.Latch && IsLatchExpired(ctx))
|
||||
throw new ProxyService.ProxyChecksFailedException("Latch-mode autoproxy has timed out. Please send a new message using proxy tags.");
|
||||
|
||||
if (member == null || (ctx.AutoproxyMode != AutoproxyMode.Member && !member.AllowAutoproxy)) return false;
|
||||
match = new ProxyMatch
|
||||
{
|
||||
Content = messageContent,
|
||||
|
@@ -89,24 +89,34 @@ namespace PluralKit.Bot
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool ShouldProxy(Channel channel, Message msg, MessageContext ctx)
|
||||
public bool ShouldProxy(Channel channel, Message msg, MessageContext ctx)
|
||||
{
|
||||
// Make sure author has a system
|
||||
if (ctx.SystemId == null) return false;
|
||||
if (ctx.SystemId == null)
|
||||
throw new ProxyChecksFailedException(Errors.NoSystemError.Message);
|
||||
|
||||
// Make sure channel is a guild text channel and this is a normal message
|
||||
if (!DiscordUtils.IsValidGuildChannel(channel)) return false;
|
||||
if (msg.Type != Message.MessageType.Default && msg.Type != Message.MessageType.Reply) return false;
|
||||
if (!DiscordUtils.IsValidGuildChannel(channel))
|
||||
throw new ProxyChecksFailedException("This channel is not a text channel.");
|
||||
if (msg.Type != Message.MessageType.Default && msg.Type != Message.MessageType.Reply)
|
||||
throw new ProxyChecksFailedException("This message is not a normal message.");
|
||||
|
||||
// Make sure author is a normal user
|
||||
if (msg.Author.System == true || msg.Author.Bot || msg.WebhookId != null) return false;
|
||||
if (msg.Author.System == true || msg.Author.Bot || msg.WebhookId != null)
|
||||
throw new ProxyChecksFailedException("This message was not sent by a normal user.");
|
||||
|
||||
// Make sure proxying is enabled here
|
||||
if (!ctx.ProxyEnabled || ctx.InBlacklist) return false;
|
||||
if (ctx.InBlacklist)
|
||||
throw new ProxyChecksFailedException($"Proxying was disabled in this channel by a server administrator (via the proxy blacklist).");
|
||||
|
||||
// Make sure the system has proxying enabled in the server
|
||||
if (!ctx.ProxyEnabled)
|
||||
throw new ProxyChecksFailedException("Your system has proxying disabled in this server. Type `pk;proxy on` to enable it.");
|
||||
|
||||
// Make sure we have either an attachment or message content
|
||||
var isMessageBlank = msg.Content == null || msg.Content.Trim().Length == 0;
|
||||
if (isMessageBlank && msg.Attachments.Length == 0) return false;
|
||||
if (isMessageBlank && msg.Attachments.Length == 0)
|
||||
throw new ProxyChecksFailedException("Message cannot be blank.");
|
||||
|
||||
// All good!
|
||||
return true;
|
||||
@@ -364,5 +374,9 @@ namespace PluralKit.Bot
|
||||
{
|
||||
if (proxyName.Length > Limits.MaxProxyNameLength) throw Errors.ProxyNameTooLong(proxyName);
|
||||
}
|
||||
public class ProxyChecksFailedException : Exception
|
||||
{
|
||||
public ProxyChecksFailedException(string message) : base(message) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user