From 51fb56184148ad23f0425aa31bef0735c0066ee5 Mon Sep 17 00:00:00 2001 From: Ske Date: Mon, 6 Jun 2022 00:59:53 +0200 Subject: [PATCH] fix: a couple more minor reproxy fixes --- PluralKit.Bot/Commands/Message.cs | 4 ++-- PluralKit.Bot/Proxy/ProxyService.cs | 11 ++++++----- PluralKit.Bot/Services/LogChannelService.cs | 2 +- PluralKit.Bot/Services/WebhookExecutorService.cs | 5 +++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/PluralKit.Bot/Commands/Message.cs b/PluralKit.Bot/Commands/Message.cs index c5681bb7..527e2805 100644 --- a/PluralKit.Bot/Commands/Message.cs +++ b/PluralKit.Bot/Commands/Message.cs @@ -140,13 +140,12 @@ public class ProxiedMessage var editType = isReproxy ? "reproxy" : "edit"; var editTypeAction = isReproxy ? "reproxied" : "edited"; - // todo: is it correct to get a connection here? - await using var conn = await ctx.Database.Obtain(); FullMessage? msg = null; var (referencedMessage, _) = ctx.MatchMessage(false); if (referencedMessage != null) { + await using var conn = await ctx.Database.Obtain(); msg = await ctx.Repository.GetMessage(conn, referencedMessage.Value); if (msg == null) throw new PKError("This is not a message proxied by PluralKit."); @@ -161,6 +160,7 @@ public class ProxiedMessage if (recent == null) throw new PKSyntaxError($"Could not find a recent message to {editType}."); + await using var conn = await ctx.Database.Obtain(); msg = await ctx.Repository.GetMessage(conn, recent.Mid); if (msg == null) throw new PKSyntaxError($"Could not find a recent message to {editType}."); diff --git a/PluralKit.Bot/Proxy/ProxyService.cs b/PluralKit.Bot/Proxy/ProxyService.cs index e8a01301..5ba39bc8 100644 --- a/PluralKit.Bot/Proxy/ProxyService.cs +++ b/PluralKit.Bot/Proxy/ProxyService.cs @@ -211,16 +211,17 @@ public class ProxyService { Member = member, Content = prevMatched ? prevMatch.Content : originalMsg.Content, - ProxyTags = member.ProxyTags.First(), + ProxyTags = member.ProxyTags.FirstOrDefault(), }; var messageChannel = await _rest.GetChannelOrNull(msg.Channel!); var rootChannel = messageChannel.IsThread() ? await _rest.GetChannelOrNull(messageChannel.ParentId!.Value) : messageChannel; var threadId = messageChannel.IsThread() ? messageChannel.Id : (ulong?)null; var guild = await _rest.GetGuildOrNull(msg.Guild!.Value); + var guildMember = await _rest.GetGuildMember(msg.Guild!.Value, trigger.Author.Id); - // Grab user permissions (the MessageCreateEvent cast is gross but so is our permission handling rn) - var senderPermissions = PermissionExtensions.PermissionsFor(guild, rootChannel, trigger.Author.Id, ((MessageCreateEvent) trigger).Member); + // Grab user permissions + var senderPermissions = PermissionExtensions.PermissionsFor(guild, rootChannel, trigger.Author.Id, guildMember); var allowEveryone = senderPermissions.HasFlag(PermissionSet.MentionEveryone); // Make sure user has permissions to send messages @@ -373,8 +374,8 @@ public class ProxyService { var sentMessage = new PKMessage { - Channel = triggerMessage.ChannelId, - Guild = triggerMessage.GuildId, + Channel = proxyMessage.ChannelId, + Guild = proxyMessage.GuildId, Member = match.Member.Id, Mid = proxyMessage.Id, OriginalMid = triggerMessage.Id, diff --git a/PluralKit.Bot/Services/LogChannelService.cs b/PluralKit.Bot/Services/LogChannelService.cs index 3257dae1..b72b0aee 100644 --- a/PluralKit.Bot/Services/LogChannelService.cs +++ b/PluralKit.Bot/Services/LogChannelService.cs @@ -86,7 +86,7 @@ public class LogChannelService { _logger.Information( "Does not have permission to log proxy, ignoring (channel: {ChannelId}, guild: {GuildId}, bot permissions: {BotPermissions})", - logChannel.Id, trigger.GuildId!.Value, perms); + logChannel.Id, guildId, perms); return null; } diff --git a/PluralKit.Bot/Services/WebhookExecutorService.cs b/PluralKit.Bot/Services/WebhookExecutorService.cs index c9596545..f9ccaf76 100644 --- a/PluralKit.Bot/Services/WebhookExecutorService.cs +++ b/PluralKit.Bot/Services/WebhookExecutorService.cs @@ -173,8 +173,9 @@ public class WebhookExecutorService // We don't care about whether the sending succeeds, and we don't want to *wait* for it, so we just fork it off var _ = TrySendRemainingAttachments(webhook, req.Name, req.AvatarUrl, attachmentChunks, req.ThreadId); - - return webhookMessage; + + // for some reason discord may(?) return a null guildid here??? + return webhookMessage with { GuildId = webhookMessage.GuildId ?? req.GuildId }; } private async Task TrySendRemainingAttachments(Webhook webhook, string name, string avatarUrl,