From c0c4871f0b41a76dc81434af7a3d31aceb7a83ef Mon Sep 17 00:00:00 2001 From: Ske Date: Sun, 15 Nov 2020 15:07:20 +0100 Subject: [PATCH] Fix cache error using log channel --- PluralKit.Bot/Handlers/MessageCreated.cs | 6 +++--- PluralKit.Bot/Handlers/MessageEdited.cs | 2 +- PluralKit.Bot/Proxy/ProxyService.cs | 12 ++++++------ PluralKit.Bot/Services/LogChannelService.cs | 13 ++++++------- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/PluralKit.Bot/Handlers/MessageCreated.cs b/PluralKit.Bot/Handlers/MessageCreated.cs index 6046c65c..31c66075 100644 --- a/PluralKit.Bot/Handlers/MessageCreated.cs +++ b/PluralKit.Bot/Handlers/MessageCreated.cs @@ -73,7 +73,7 @@ namespace PluralKit.Bot return; if (await TryHandleCommand(shard, evt, ctx)) return; - await TryHandleProxy(evt, ctx); + await TryHandleProxy(shard, evt, ctx); } private async ValueTask TryHandleLogClean(MessageCreateEventArgs evt, MessageContext ctx) @@ -133,11 +133,11 @@ namespace PluralKit.Bot return false; } - private async ValueTask TryHandleProxy(MessageCreateEventArgs evt, MessageContext ctx) + private async ValueTask TryHandleProxy(DiscordClient shard, MessageCreateEventArgs evt, MessageContext ctx) { try { - return await _proxy.HandleIncomingMessage(evt.Message, ctx, allowAutoproxy: true); + return await _proxy.HandleIncomingMessage(shard, evt.Message, ctx, allowAutoproxy: true); } catch (PKError e) { diff --git a/PluralKit.Bot/Handlers/MessageEdited.cs b/PluralKit.Bot/Handlers/MessageEdited.cs index c0b31c38..ac627ef0 100644 --- a/PluralKit.Bot/Handlers/MessageEdited.cs +++ b/PluralKit.Bot/Handlers/MessageEdited.cs @@ -44,7 +44,7 @@ namespace PluralKit.Bot await using (var conn = await _db.Obtain()) using (_metrics.Measure.Timer.Time(BotMetrics.MessageContextQueryTime)) ctx = await _repo.GetMessageContext(conn, evt.Author.Id, evt.Channel.GuildId, evt.Channel.Id); - await _proxy.HandleIncomingMessage(evt.Message, ctx, allowAutoproxy: false); + await _proxy.HandleIncomingMessage(shard, evt.Message, ctx, allowAutoproxy: false); } } } \ No newline at end of file diff --git a/PluralKit.Bot/Proxy/ProxyService.cs b/PluralKit.Bot/Proxy/ProxyService.cs index d690817a..6f77e42b 100644 --- a/PluralKit.Bot/Proxy/ProxyService.cs +++ b/PluralKit.Bot/Proxy/ProxyService.cs @@ -39,7 +39,7 @@ namespace PluralKit.Bot _logger = logger.ForContext(); } - public async Task HandleIncomingMessage(DiscordMessage message, MessageContext ctx, bool allowAutoproxy) + public async Task HandleIncomingMessage(DiscordClient shard, DiscordMessage message, MessageContext ctx, bool allowAutoproxy) { if (!ShouldProxy(message, ctx)) return false; @@ -64,7 +64,7 @@ namespace PluralKit.Bot var allowEmbeds = (senderPermissions & Permissions.EmbedLinks) != 0; // Everything's in order, we can execute the proxy! - await ExecuteProxy(conn, message, ctx, match, allowEveryone, allowEmbeds); + await ExecuteProxy(shard, conn, message, ctx, match, allowEveryone, allowEmbeds); return true; } @@ -90,7 +90,7 @@ namespace PluralKit.Bot return true; } - private async Task ExecuteProxy(IPKConnection conn, DiscordMessage trigger, MessageContext ctx, + private async Task ExecuteProxy(DiscordClient shard, IPKConnection conn, DiscordMessage trigger, MessageContext ctx, ProxyMatch match, bool allowEveryone, bool allowEmbeds) { // Send the webhook @@ -100,10 +100,10 @@ namespace PluralKit.Bot match.Member.ProxyAvatar(ctx), content, trigger.Attachments, allowEveryone); - await HandleProxyExecutedActions(conn, ctx, trigger, proxyMessage, match); + await HandleProxyExecutedActions(shard, conn, ctx, trigger, proxyMessage, match); } - private async Task HandleProxyExecutedActions(IPKConnection conn, MessageContext ctx, + private async Task HandleProxyExecutedActions(DiscordClient shard, IPKConnection conn, MessageContext ctx, DiscordMessage triggerMessage, DiscordMessage proxyMessage, ProxyMatch match) { @@ -117,7 +117,7 @@ namespace PluralKit.Bot Sender = triggerMessage.Author.Id }); - Task LogMessageToChannel() => _logChannel.LogMessage(ctx, match, triggerMessage, proxyMessage.Id).AsTask(); + Task LogMessageToChannel() => _logChannel.LogMessage(shard, ctx, match, triggerMessage, proxyMessage.Id).AsTask(); async Task DeleteProxyTriggerMessage() { diff --git a/PluralKit.Bot/Services/LogChannelService.cs b/PluralKit.Bot/Services/LogChannelService.cs index 6f91cfcf..f360221c 100644 --- a/PluralKit.Bot/Services/LogChannelService.cs +++ b/PluralKit.Bot/Services/LogChannelService.cs @@ -15,23 +15,21 @@ namespace PluralKit.Bot { private readonly IDatabase _db; private readonly ModelRepository _repo; private readonly ILogger _logger; - private readonly DiscordRestClient _rest; - public LogChannelService(EmbedService embed, ILogger logger, DiscordRestClient rest, IDatabase db, ModelRepository repo) + public LogChannelService(EmbedService embed, ILogger logger, IDatabase db, ModelRepository repo) { _embed = embed; - _rest = rest; _db = db; _repo = repo; _logger = logger.ForContext(); } - public async ValueTask LogMessage(MessageContext ctx, ProxyMatch proxy, DiscordMessage trigger, ulong hookMessage) + public async ValueTask LogMessage(DiscordClient client, MessageContext ctx, ProxyMatch proxy, DiscordMessage trigger, ulong hookMessage) { if (ctx.SystemId == null || ctx.LogChannel == null || ctx.InLogBlacklist) return; // Find log channel and check if valid - var logChannel = await FindLogChannel(trigger.Channel.GuildId, ctx.LogChannel.Value); + var logChannel = await FindLogChannel(client, trigger.Channel.GuildId, ctx.LogChannel.Value); if (logChannel == null || logChannel.Type != ChannelType.Text) return; // Check bot permissions @@ -52,9 +50,10 @@ namespace PluralKit.Bot { await logChannel.SendMessageFixedAsync(content: url, embed: embed); } - private async Task FindLogChannel(ulong guild, ulong channel) + private async Task FindLogChannel(DiscordClient client, ulong guild, ulong channel) { - var obj = await _rest.GetChannel(channel); + // MUST use this client here, otherwise we get strange cache issues where the guild doesn't exist... >.> + var obj = await client.GetChannel(channel); if (obj == null) {