Skip to content

Commit d1f455f

Browse files
committed
rework the cursed thing
1 parent b5f5df0 commit d1f455f

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs

+23-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using Discord.Rest;
2-
using Newtonsoft.Json.Linq;
2+
33
using System;
44
using System.Collections.Generic;
55
using System.Collections.Immutable;
@@ -142,6 +142,8 @@ public abstract class SocketMessage : SocketEntity<ulong>, IMessage
142142
/// Collection of WebSocket-based users.
143143
/// </returns>
144144
public IReadOnlyCollection<SocketUser> MentionedUsers => _userMentions;
145+
146+
public IReadOnlyCollection<ulong> MentionedUserIds { get; private set; }
145147
/// <inheritdoc />
146148
public DateTimeOffset Timestamp => DateTimeUtils.FromTicks(_timestampTicks);
147149

@@ -270,23 +272,30 @@ internal virtual void Update(ClientState state, Model model)
270272

271273
if (model.UserMentions.IsSpecified)
272274
{
273-
var value = model.UserMentions.Value;
274-
if (value.Length > 0)
275+
if (model.UserMentions.Value.Length == 0)
276+
{
277+
_userMentions = ImmutableArray<SocketUser>.Empty;
278+
MentionedUserIds = ImmutableArray<ulong>.Empty;
279+
}
280+
else
275281
{
276-
var newMentions = ImmutableArray.CreateBuilder<SocketUser>(value.Length);
277-
for (int i = 0; i < value.Length; i++)
282+
MentionedUserIds = model.UserMentions.Value.Select(x => x.Id).ToImmutableArray();
283+
284+
// Create a new list of mentions from the API model
285+
var newMentions = ImmutableArray.CreateBuilder<SocketUser>(model.UserMentions.Value.Length);
286+
foreach (var mention in model.UserMentions.Value)
278287
{
279-
var val = value[i];
280-
if (val != null)
288+
if (mention is not null)
281289
{
282-
// TODO: this is cursed af and should be yeeted
283-
var user = Channel?.GetUserAsync(val.Id, CacheMode.CacheOnly).GetAwaiter().GetResult() as SocketUser;
284-
if (user != null)
285-
newMentions.Add(user);
286-
else
287-
newMentions.Add(SocketUnknownUser.Create(Discord, state, val));
290+
SocketUser user = null;
291+
292+
if (Channel is SocketChannel socketChannel)
293+
user = socketChannel.GetUser(mention.Id);
294+
295+
newMentions.Add(user ?? SocketUnknownUser.Create(Discord, state, mention));
288296
}
289297
}
298+
290299
_userMentions = newMentions.ToImmutable();
291300
}
292301
}
@@ -355,7 +364,7 @@ public Task DeleteAsync(RequestOptions options = null)
355364
/// <inheritdoc />
356365
IReadOnlyCollection<ulong> IMessage.MentionedChannelIds => MentionedChannels.Select(x => x.Id).ToImmutableArray();
357366
/// <inheritdoc />
358-
IReadOnlyCollection<ulong> IMessage.MentionedUserIds => MentionedUsers.Select(x => x.Id).ToImmutableArray();
367+
IReadOnlyCollection<ulong> IMessage.MentionedUserIds => MentionedUserIds;
359368

360369
/// <inheritdoc/>
361370
IReadOnlyCollection<IMessageComponent> IMessage.Components => Components;

0 commit comments

Comments
 (0)