Hopefully fix user cache error in ReactionAdd
This commit is contained in:
parent
3b47785aa0
commit
3e297178c7
@ -29,6 +29,11 @@ namespace PluralKit.Bot
|
||||
{
|
||||
// Only proxies in guild text channels
|
||||
if (evt.Channel.Type != ChannelType.Text) return;
|
||||
|
||||
// Sometimes we get events from users that aren't in the user cache
|
||||
// In that case we get a "broken" user object (where eg. calling IsBot throws an exception)
|
||||
// We just ignore all of those for now, should be quite rare...
|
||||
if (!evt.Client.TryGetCachedUser(evt.User.Id, out _)) return;
|
||||
|
||||
// Ignore reactions from bots (we can't DM them anyway)
|
||||
if (evt.User.IsBot) return;
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
@ -114,5 +115,15 @@ namespace PluralKit.Bot
|
||||
// It's just here for consistency so we don't use the standard SendMessageAsync method >.>
|
||||
public static Task<DiscordMessage> SendMessageFixedAsync(this DiscordMember member, string content = null, DiscordEmbed embed = null) =>
|
||||
member.SendMessageAsync(content, embed: embed);
|
||||
|
||||
public static bool TryGetCachedUser(this DiscordClient client, ulong id, out DiscordUser user)
|
||||
{
|
||||
user = null;
|
||||
|
||||
var cache = (ConcurrentDictionary<ulong, DiscordUser>) typeof(BaseDiscordClient)
|
||||
.GetProperty("UserCache", BindingFlags.Instance | BindingFlags.NonPublic)
|
||||
?.GetValue(client);
|
||||
return cache != null && cache.TryGetValue(id, out user);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user