Browse Source

Fix KeyNotFoundException for stickers in messages

pull/1923/head
quin lynch 3 years ago
parent
commit
e489a8004d
5 changed files with 16 additions and 12 deletions
  1. +6
    -1
      src/Discord.Net.WebSocket/DiscordSocketClient.cs
  2. +3
    -3
      src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
  3. +5
    -6
      src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs
  4. +1
    -1
      src/Discord.Net.WebSocket/Entities/Stickers/SocketCustomSticker.cs
  5. +1
    -1
      src/Discord.Net.WebSocket/Entities/Stickers/SocketSticker.cs

+ 6
- 1
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -511,7 +511,12 @@ namespace Discord.WebSocket
if (model.GuildId.IsSpecified)
{
var guild = State.GetGuild(model.GuildId.Value);
sticker = guild.AddOrUpdateSticker(model);

// since the sticker can be from another guild, check if we are in the guild or its in the cache
if (guild != null)
sticker = guild.AddOrUpdateSticker(model);
else
sticker = SocketSticker.Create(this, model);
return sticker;
}
else


+ 3
- 3
src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs View File

@@ -1240,10 +1240,10 @@ namespace Discord.WebSocket
/// </returns>
public async ValueTask<SocketCustomSticker> GetStickerAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null)
{
var sticker = _stickers[id];
var sticker = _stickers.FirstOrDefault(x => x.Key == id);

if (sticker != null)
return sticker;
if (sticker.Value != null)
return sticker.Value;

if (mode == CacheMode.CacheOnly)
return null;


+ 5
- 6
src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs View File

@@ -174,17 +174,16 @@ namespace Discord.WebSocket
SocketSticker sticker = null;

if (guild != null)
{
sticker = guild.GetSticker(stickerItem.Id);
}

if(sticker == null)
{
if (sticker == null)
sticker = Discord.GetSticker(stickerItem.Id);
}

// if its still null, create an unknown
sticker = SocketUnknownSticker.Create(Discord, stickerItem);
if (sticker == null)
sticker = SocketUnknownSticker.Create(Discord, stickerItem);

stickers.Add(sticker);
}

_stickers = stickers.ToImmutable();


+ 1
- 1
src/Discord.Net.WebSocket/Entities/Stickers/SocketCustomSticker.cs View File

@@ -70,7 +70,7 @@ namespace Discord.WebSocket

internal SocketCustomSticker Clone() => MemberwiseClone() as SocketCustomSticker;

private string DebuggerDisplay => $"{Name} in {Guild.Name} ({Id})";
private new string DebuggerDisplay => Guild == null ? base.DebuggerDisplay : $"{Name} in {Guild.Name} ({Id})";

// ICustomSticker
ulong? ICustomSticker.AuthorId


+ 1
- 1
src/Discord.Net.WebSocket/Entities/Stickers/SocketSticker.cs View File

@@ -76,7 +76,7 @@ namespace Discord.WebSocket
}
}

private string DebuggerDisplay => $"{Name} ({Id})";
internal string DebuggerDisplay => $"{Name} ({Id})";

/// <inheritdoc/>
public override bool Equals(object obj)


Loading…
Cancel
Save