From b998636cbeaa1431864f8f7e850e3aaa7d9a8832 Mon Sep 17 00:00:00 2001 From: Katrix Date: Fri, 29 Oct 2021 16:42:10 -0400 Subject: [PATCH] feat: add -raw flag to pk;msg (#399) --- PluralKit.Bot/Commands/Checks.cs | 10 ++------ PluralKit.Bot/Commands/Message.cs | 35 ++++++++++++++++++++++++-- PluralKit.Bot/Services/EmbedService.cs | 10 +------- PluralKit.Bot/Utils/DiscordUtils.cs | 14 +++++++++++ 4 files changed, 50 insertions(+), 19 deletions(-) diff --git a/PluralKit.Bot/Commands/Checks.cs b/PluralKit.Bot/Commands/Checks.cs index c3af38ed..127dc48d 100644 --- a/PluralKit.Bot/Commands/Checks.cs +++ b/PluralKit.Bot/Commands/Checks.cs @@ -245,15 +245,9 @@ namespace PluralKit.Bot } // get the message info - var msg = ctx.Message; - try - { - msg = await _rest.GetMessage(channelId.Value, messageId.Value); - } - catch (ForbiddenException) - { + var msg = await _rest.GetMessageOrNull(channelId.Value, messageId.Value); + if (msg == null) throw new PKError(failedToGetMessage); - } // if user is fetching a message in a different channel sent by someone else, throw a generic error message if (msg == null || (msg.Author.Id != ctx.Author.Id && msg.ChannelId != ctx.Channel.Id)) diff --git a/PluralKit.Bot/Commands/Message.cs b/PluralKit.Bot/Commands/Message.cs index 0f8bc225..aa7fdb98 100644 --- a/PluralKit.Bot/Commands/Message.cs +++ b/PluralKit.Bot/Commands/Message.cs @@ -1,11 +1,15 @@ #nullable enable -using System; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using Myriad.Builders; using Myriad.Cache; using Myriad.Extensions; using Myriad.Rest; +using Myriad.Rest.Types; +using Myriad.Rest.Types.Requests; using Myriad.Rest.Exceptions; using Myriad.Types; @@ -52,7 +56,7 @@ namespace PluralKit.Bot var newContent = ctx.RemainderOrNull().NormalizeLineEndSpacing(); - var originalMsg = await _rest.GetMessage(msg.Message.Channel, msg.Message.Mid); + var originalMsg = await _rest.GetMessageOrNull(msg.Message.Channel, msg.Message.Mid); if (originalMsg == null) throw new PKError("Could not edit message."); @@ -141,6 +145,33 @@ namespace PluralKit.Bot throw Errors.MessageNotFound(messageId.Value); } + if (ctx.MatchRaw()) + { + var discordMessage = await _rest.GetMessageOrNull(message.Message.Channel, message.Message.Mid); + if (discordMessage == null) + throw new PKError("Message deleted or inaccessible."); + + var content = discordMessage.Content; + if (content == null || content == "") + { + await ctx.Reply("No message content found in that message."); + return; + } + + await ctx.Reply(text: $"```{content}```"); + + if (Regex.IsMatch(content, "```.*```", RegexOptions.Singleline)) + { + var stream = new MemoryStream(Encoding.UTF8.GetBytes(content)); + await ctx.Rest.CreateMessage( + ctx.Channel.Id, + new MessageRequest { Content = $"{Emojis.Warn} Message contains codeblocks, raw source sent as an attachment." }, + new[] { new MultipartFile("message.txt", stream) }); + } + + return; + } + if (isDelete) { if (message.System.Id != ctx.System.Id) diff --git a/PluralKit.Bot/Services/EmbedService.cs b/PluralKit.Bot/Services/EmbedService.cs index 6dbb1716..cdb64831 100644 --- a/PluralKit.Bot/Services/EmbedService.cs +++ b/PluralKit.Bot/Services/EmbedService.cs @@ -280,15 +280,7 @@ namespace PluralKit.Bot var channel = await _cache.GetOrFetchChannel(_rest, msg.Message.Channel); var ctx = LookupContext.ByNonOwner; - Message serverMsg = null; - try - { - serverMsg = await _rest.GetMessage(msg.Message.Channel, msg.Message.Mid); - } - catch (ForbiddenException) - { - // no permission, couldn't fetch, oh well - } + var serverMsg = await _rest.GetMessageOrNull(msg.Message.Channel, msg.Message.Mid); // Need this whole dance to handle cases where: // - the user is deleted (userInfo == null) diff --git a/PluralKit.Bot/Utils/DiscordUtils.cs b/PluralKit.Bot/Utils/DiscordUtils.cs index aa87e0a0..d21bb2b2 100644 --- a/PluralKit.Bot/Utils/DiscordUtils.cs +++ b/PluralKit.Bot/Utils/DiscordUtils.cs @@ -9,6 +9,7 @@ using Myriad.Builders; using Myriad.Extensions; using Myriad.Gateway; using Myriad.Rest; +using Myriad.Rest.Exceptions; using Myriad.Rest.Types; using Myriad.Types; @@ -56,6 +57,19 @@ namespace PluralKit.Bot } } + public static async Task GetMessageOrNull(this DiscordApiClient rest, ulong channelId, ulong messageId) + { + try + { + return await rest.GetMessage(channelId, messageId); + } + catch (ForbiddenException) + { + // no permission, couldn't fetch, oh well + return null; + } + } + public static uint? ToDiscordColor(this string color) { if (uint.TryParse(color, NumberStyles.HexNumber, null, out var colorInt))