From e4f04b5bd539fde7f952202b0229142443422dbb Mon Sep 17 00:00:00 2001 From: alyssa Date: Thu, 14 Nov 2024 11:45:40 +0900 Subject: [PATCH] fix(bot): throw better errors for (some) failed cache lookups --- Myriad/Extensions/CacheExtensions.cs | 3 ++- PluralKit.Bot/Handlers/MessageEdited.cs | 16 +++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Myriad/Extensions/CacheExtensions.cs b/Myriad/Extensions/CacheExtensions.cs index 0f6fb931..84045784 100644 --- a/Myriad/Extensions/CacheExtensions.cs +++ b/Myriad/Extensions/CacheExtensions.cs @@ -50,7 +50,8 @@ public static class CacheExtensions if (!channel.IsThread()) return channel; - var parent = await cache.GetChannel(guildId, channel.ParentId!.Value); + var parent = await cache.TryGetChannel(guildId, channel.ParentId!.Value); + if (parent == null) throw new Exception($"failed to find parent channel for thread {channelOrThread} in cache"); return parent; } } \ No newline at end of file diff --git a/PluralKit.Bot/Handlers/MessageEdited.cs b/PluralKit.Bot/Handlers/MessageEdited.cs index 468a8654..168feecb 100644 --- a/PluralKit.Bot/Handlers/MessageEdited.cs +++ b/PluralKit.Bot/Handlers/MessageEdited.cs @@ -52,13 +52,19 @@ public class MessageEdited: IEventHandler if (!evt.Content.HasValue || !evt.Author.HasValue || !evt.Member.HasValue) return; - var guildIdMaybe = evt.GuildId.HasValue ? evt.GuildId.Value ?? 0 : 0; + // we only use message edit event for proxying, so ignore messages from DMs + if (!evt.GuildId.HasValue || evt.GuildId.Value == null) return; + ulong guildId = evt.GuildId!.Value!.Value; - var channel = await _cache.GetChannel(guildIdMaybe, evt.ChannelId); // todo: is this correct for message update? + var channel = await _cache.TryGetChannel(guildId, evt.ChannelId); // todo: is this correct for message update? + if (channel == null) + throw new Exception("could not find self channel in MessageEdited event"); if (!DiscordUtils.IsValidGuildChannel(channel)) return; - var rootChannel = await _cache.GetRootChannel(guildIdMaybe, channel.Id); - var guild = await _cache.GetGuild(channel.GuildId!.Value); + var rootChannel = await _cache.GetRootChannel(guildId, channel.Id); + var guild = await _cache.TryGetGuild(channel.GuildId!.Value); + if (guild == null) + throw new Exception("could not find self guild in MessageEdited event"); var lastMessage = _lastMessageCache.GetLastMessage(evt.ChannelId)?.Current; // Only react to the last message in the channel @@ -73,7 +79,7 @@ public class MessageEdited: IEventHandler return; var equivalentEvt = await GetMessageCreateEvent(evt, lastMessage, channel); - var botPermissions = await _cache.BotPermissionsIn(guildIdMaybe, channel.Id); + var botPermissions = await _cache.BotPermissionsIn(guildId, channel.Id); try {