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 _);

View File

@ -22,7 +22,7 @@
public bool? Nsfw { get; init; }
public ulong? ParentId { get; init; }
public Overwrite[]? PermissionOverwrites { get; init; }
public User[]? Recipients { get; init; }
public User[]? Recipients { get; init; } // NOTE: this may be null for stub channel objects
public record Overwrite
{