feat(bot): allow clearing embeds from proxied messages
This commit is contained in:
parent
31ff2b7c87
commit
25c55df3b3
@ -1,6 +1,7 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
using Myriad.Utils;
|
using Myriad.Utils;
|
||||||
|
using Myriad.Types;
|
||||||
|
|
||||||
namespace Myriad.Rest.Types.Requests;
|
namespace Myriad.Rest.Types.Requests;
|
||||||
|
|
||||||
@ -11,4 +12,7 @@ public record WebhookMessageEditRequest
|
|||||||
|
|
||||||
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
|
||||||
public Optional<AllowedMentions> AllowedMentions { get; init; }
|
public Optional<AllowedMentions> AllowedMentions { get; init; }
|
||||||
|
|
||||||
|
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
|
||||||
|
public Optional<Embed[]?> Embeds { get; init; }
|
||||||
}
|
}
|
@ -95,9 +95,6 @@ public class ProxiedMessage
|
|||||||
if (ctx.System.Id != systemId)
|
if (ctx.System.Id != systemId)
|
||||||
throw new PKError("Can't edit a message sent by a different system.");
|
throw new PKError("Can't edit a message sent by a different system.");
|
||||||
|
|
||||||
if (!ctx.HasNext())
|
|
||||||
throw new PKSyntaxError("You need to include the message to edit in.");
|
|
||||||
|
|
||||||
var originalMsg = await _rest.GetMessageOrNull(msg.Channel, msg.Mid);
|
var originalMsg = await _rest.GetMessageOrNull(msg.Channel, msg.Mid);
|
||||||
if (originalMsg == null)
|
if (originalMsg == null)
|
||||||
throw new PKError("Could not edit message.");
|
throw new PKError("Could not edit message.");
|
||||||
@ -109,7 +106,15 @@ public class ProxiedMessage
|
|||||||
|
|
||||||
// Grab the original message content and new message content
|
// Grab the original message content and new message content
|
||||||
var originalContent = originalMsg.Content;
|
var originalContent = originalMsg.Content;
|
||||||
var newContent = ctx.RemainderOrNull().NormalizeLineEndSpacing();
|
var newContent = ctx.RemainderOrNull()?.NormalizeLineEndSpacing();
|
||||||
|
|
||||||
|
// Should we clear embeds?
|
||||||
|
var clearEmbeds = ctx.MatchFlag("clear-embed", "ce");
|
||||||
|
if (clearEmbeds && newContent == null)
|
||||||
|
newContent = originalMsg.Content!;
|
||||||
|
|
||||||
|
if (newContent == null)
|
||||||
|
throw new PKSyntaxError("You need to include the message to edit in.");
|
||||||
|
|
||||||
// Append or prepend the new content to the original message content if needed.
|
// Append or prepend the new content to the original message content if needed.
|
||||||
// If no flag is supplied, the new contents will completly overwrite the old contents
|
// If no flag is supplied, the new contents will completly overwrite the old contents
|
||||||
@ -124,7 +129,7 @@ public class ProxiedMessage
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var editedMsg =
|
var editedMsg =
|
||||||
await _webhookExecutor.EditWebhookMessage(msg.Channel, msg.Mid, newContent);
|
await _webhookExecutor.EditWebhookMessage(msg.Channel, msg.Mid, newContent, clearEmbeds);
|
||||||
|
|
||||||
if (ctx.Guild == null)
|
if (ctx.Guild == null)
|
||||||
await _rest.CreateReaction(ctx.Channel.Id, ctx.Message.Id, new Emoji { Name = Emojis.Success });
|
await _rest.CreateReaction(ctx.Channel.Id, ctx.Message.Id, new Emoji { Name = Emojis.Success });
|
||||||
|
@ -18,6 +18,7 @@ using Newtonsoft.Json.Linq;
|
|||||||
using Serilog;
|
using Serilog;
|
||||||
|
|
||||||
using PluralKit.Core;
|
using PluralKit.Core;
|
||||||
|
using Myriad.Utils;
|
||||||
|
|
||||||
namespace PluralKit.Bot;
|
namespace PluralKit.Bot;
|
||||||
|
|
||||||
@ -80,7 +81,7 @@ public class WebhookExecutorService
|
|||||||
return webhookMessage;
|
return webhookMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Message> EditWebhookMessage(ulong channelId, ulong messageId, string newContent)
|
public async Task<Message> EditWebhookMessage(ulong channelId, ulong messageId, string newContent, bool clearEmbeds = false)
|
||||||
{
|
{
|
||||||
var allowedMentions = newContent.ParseMentions() with
|
var allowedMentions = newContent.ParseMentions() with
|
||||||
{
|
{
|
||||||
@ -97,10 +98,14 @@ public class WebhookExecutorService
|
|||||||
}
|
}
|
||||||
|
|
||||||
var webhook = await _webhookCache.GetWebhook(channelId);
|
var webhook = await _webhookCache.GetWebhook(channelId);
|
||||||
|
var editReq = new WebhookMessageEditRequest
|
||||||
|
{
|
||||||
|
Content = newContent,
|
||||||
|
AllowedMentions = allowedMentions,
|
||||||
|
Embeds = (clearEmbeds == true ? Optional<Embed[]>.Some(new Embed[] { }) : Optional<Embed[]>.None()),
|
||||||
|
};
|
||||||
|
|
||||||
return await _rest.EditWebhookMessage(webhook.Id, webhook.Token, messageId,
|
return await _rest.EditWebhookMessage(webhook.Id, webhook.Token, messageId, editReq, threadId);
|
||||||
new WebhookMessageEditRequest { Content = newContent, AllowedMentions = allowedMentions },
|
|
||||||
threadId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Message> ExecuteWebhookInner(Webhook webhook, ProxyRequest req, bool hasRetried = false)
|
private async Task<Message> ExecuteWebhookInner(Webhook webhook, ProxyRequest req, bool hasRetried = false)
|
||||||
|
Loading…
Reference in New Issue
Block a user