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
|
// Only proxies in guild text channels
|
||||||
if (evt.Channel.Type != ChannelType.Text) return;
|
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)
|
// Ignore reactions from bots (we can't DM them anyway)
|
||||||
if (evt.User.IsBot) return;
|
if (evt.User.IsBot) return;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
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 >.>
|
// 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) =>
|
public static Task<DiscordMessage> SendMessageFixedAsync(this DiscordMember member, string content = null, DiscordEmbed embed = null) =>
|
||||||
member.SendMessageAsync(content, embed: embed);
|
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