Fix messages in DMs

This commit is contained in:
Ske
2021-03-18 11:28:11 +01:00
parent 13e3289c26
commit 1c548e9d7b
4 changed files with 19 additions and 3 deletions

View File

@@ -1,8 +1,6 @@
using System.Threading.Tasks;
using Myriad.Gateway;
using Myriad.Rest;
using Myriad.Types;
namespace Myriad.Cache
{
@@ -51,6 +49,11 @@ namespace Myriad.Cache
private static async ValueTask SaveMessageCreate(this IDiscordCache cache, MessageCreateEvent evt)
{
// DM messages don't get Channel Create events first, so we need to save
// some kind of stub channel object until we get the real one
if (evt.GuildId == null)
await cache.SaveDmChannelStub(evt.ChannelId);
await cache.SaveUser(evt.Author);
foreach (var mention in evt.Mentions)
await cache.SaveUser(mention);

View File

@@ -11,6 +11,7 @@ namespace Myriad.Cache
public ValueTask SaveChannel(Channel channel);
public ValueTask SaveUser(User user);
public ValueTask SaveRole(ulong guildId, Role role);
public ValueTask SaveDmChannelStub(ulong channelId);
public ValueTask RemoveGuild(ulong guildId);
public ValueTask RemoveChannel(ulong channelId);

View File

@@ -81,6 +81,18 @@ namespace Myriad.Cache
return default;
}
public ValueTask SaveDmChannelStub(ulong channelId)
{
// Use existing channel object if present, otherwise add a stub
// We may get a message create before channel create and we want to have it saved
_channels.GetOrAdd(channelId, id => new Channel
{
Id = id,
Type = Channel.ChannelType.Dm
});
return default;
}
public ValueTask RemoveGuild(ulong guildId)
{
_guilds.TryRemove(guildId, out _);