Ensure recipients have been cached before creating private channels.
This commit is contained in:
@@ -22,7 +22,7 @@ namespace Discord.Collections
|
|||||||
if (user.PrivateChannelId != null)
|
if (user.PrivateChannelId != null)
|
||||||
throw new Exception("User already has a private channel.");
|
throw new Exception("User already has a private channel.");
|
||||||
user.PrivateChannelId = item.Id;
|
user.PrivateChannelId = item.Id;
|
||||||
item.Recipient.AddRef();
|
user.AddRef();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected override void OnRemoved(Channel item)
|
protected override void OnRemoved(Channel item)
|
||||||
|
|||||||
@@ -283,7 +283,9 @@ namespace Discord
|
|||||||
}
|
}
|
||||||
foreach (var model in data.PrivateChannels)
|
foreach (var model in data.PrivateChannels)
|
||||||
{
|
{
|
||||||
var channel = _channels.GetOrAdd(model.Id, null, model.Recipient?.Id);
|
var user = _users.GetOrAdd(model.Recipient.Id);
|
||||||
|
user.Update(data.Recipient);
|
||||||
|
var channel = _channels.GetOrAdd(model.Id, null, user.Id);
|
||||||
channel.Update(model);
|
channel.Update(model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -324,7 +326,15 @@ namespace Discord
|
|||||||
case "CHANNEL_CREATE":
|
case "CHANNEL_CREATE":
|
||||||
{
|
{
|
||||||
var data = e.Payload.ToObject<Events.ChannelCreate>(_serializer);
|
var data = e.Payload.ToObject<Events.ChannelCreate>(_serializer);
|
||||||
var channel = _channels.GetOrAdd(data.Id, data.GuildId, data.Recipient?.Id);
|
Channel channel;
|
||||||
|
if (data.IsPrivate)
|
||||||
|
{
|
||||||
|
var user = _users.GetOrAdd(data.Recipient.Id);
|
||||||
|
user.Update(data.Recipient);
|
||||||
|
channel = _channels.GetOrAdd(data.Id, null, user.Id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
channel = _channels.GetOrAdd(data.Id, data.GuildId, null);
|
||||||
channel.Update(data);
|
channel.Update(data);
|
||||||
RaiseChannelCreated(channel);
|
RaiseChannelCreated(channel);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user