Ignore message and presence updates if the guild has not synced yet
This commit is contained in:
@@ -963,6 +963,12 @@ namespace Discord
|
|||||||
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
||||||
if (channel != null)
|
if (channel != null)
|
||||||
{
|
{
|
||||||
|
if (!(channel as ICachedGuildChannel)?.Guild.IsSynced ?? true)
|
||||||
|
{
|
||||||
|
await _gatewayLogger.DebugAsync("Ignored MESSAGE_CREATE, guild is not synced yet.").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var author = channel.GetUser(data.Author.Value.Id, true);
|
var author = channel.GetUser(data.Author.Value.Id, true);
|
||||||
|
|
||||||
if (author != null)
|
if (author != null)
|
||||||
@@ -991,6 +997,12 @@ namespace Discord
|
|||||||
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
||||||
if (channel != null)
|
if (channel != null)
|
||||||
{
|
{
|
||||||
|
if (!(channel as ICachedGuildChannel)?.Guild.IsSynced ?? true)
|
||||||
|
{
|
||||||
|
await _gatewayLogger.DebugAsync("Ignored MESSAGE_UPDATE, guild is not synced yet.").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
IMessage before = null, after = null;
|
IMessage before = null, after = null;
|
||||||
CachedMessage cachedMsg = channel.GetMessage(data.Id);
|
CachedMessage cachedMsg = channel.GetMessage(data.Id);
|
||||||
if (cachedMsg != null)
|
if (cachedMsg != null)
|
||||||
@@ -1019,11 +1031,17 @@ namespace Discord
|
|||||||
case "MESSAGE_DELETE":
|
case "MESSAGE_DELETE":
|
||||||
{
|
{
|
||||||
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_DELETE)").ConfigureAwait(false);
|
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_DELETE)").ConfigureAwait(false);
|
||||||
|
|
||||||
var data = (payload as JToken).ToObject<API.Message>(_serializer);
|
var data = (payload as JToken).ToObject<API.Message>(_serializer);
|
||||||
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
||||||
if (channel != null)
|
if (channel != null)
|
||||||
{
|
{
|
||||||
|
if (!(channel as ICachedGuildChannel)?.Guild.IsSynced ?? true)
|
||||||
|
{
|
||||||
|
await _gatewayLogger.DebugAsync("Ignored MESSAGE_DELETE, guild is not synced yet.").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var msg = channel.RemoveMessage(data.Id);
|
var msg = channel.RemoveMessage(data.Id);
|
||||||
if (msg != null)
|
if (msg != null)
|
||||||
await _messageDeletedEvent.InvokeAsync(data.Id, Optional.Create<IMessage>(msg)).ConfigureAwait(false);
|
await _messageDeletedEvent.InvokeAsync(data.Id, Optional.Create<IMessage>(msg)).ConfigureAwait(false);
|
||||||
@@ -1045,6 +1063,12 @@ namespace Discord
|
|||||||
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
||||||
if (channel != null)
|
if (channel != null)
|
||||||
{
|
{
|
||||||
|
if (!(channel as ICachedGuildChannel)?.Guild.IsSynced ?? true)
|
||||||
|
{
|
||||||
|
await _gatewayLogger.DebugAsync("Ignored MESSAGE_DELETE_BULK, guild is not synced yet.").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var id in data.Ids)
|
foreach (var id in data.Ids)
|
||||||
{
|
{
|
||||||
var msg = channel.RemoveMessage(id);
|
var msg = channel.RemoveMessage(id);
|
||||||
@@ -1077,6 +1101,12 @@ namespace Discord
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!guild.IsSynced)
|
||||||
|
{
|
||||||
|
await _gatewayLogger.DebugAsync("Ignored PRESENCE_UPDATE, guild is not synced yet.").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
IPresence before;
|
IPresence before;
|
||||||
var user = guild.GetUser(data.User.Id);
|
var user = guild.GetUser(data.User.Id);
|
||||||
if (user != null)
|
if (user != null)
|
||||||
@@ -1108,6 +1138,12 @@ namespace Discord
|
|||||||
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel;
|
||||||
if (channel != null)
|
if (channel != null)
|
||||||
{
|
{
|
||||||
|
if (!(channel as ICachedGuildChannel)?.Guild.IsSynced ?? true)
|
||||||
|
{
|
||||||
|
await _gatewayLogger.DebugAsync("Ignored TYPING_START, guild is not synced yet.").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var user = channel.GetUser(data.UserId, true);
|
var user = channel.GetUser(data.UserId, true);
|
||||||
if (user != null)
|
if (user != null)
|
||||||
await _userIsTypingEvent.InvokeAsync(user, channel).ConfigureAwait(false);
|
await _userIsTypingEvent.InvokeAsync(user, channel).ConfigureAwait(false);
|
||||||
@@ -1146,6 +1182,12 @@ namespace Discord
|
|||||||
var guild = DataStore.GetGuild(data.GuildId.Value);
|
var guild = DataStore.GetGuild(data.GuildId.Value);
|
||||||
if (guild != null)
|
if (guild != null)
|
||||||
{
|
{
|
||||||
|
if (!guild.IsSynced)
|
||||||
|
{
|
||||||
|
await _gatewayLogger.DebugAsync("Ignored VOICE_STATE_UPDATE, guild is not synced yet.").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
VoiceState before, after;
|
VoiceState before, after;
|
||||||
if (data.ChannelId != null)
|
if (data.ChannelId != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ namespace Discord
|
|||||||
public AudioClient AudioClient { get; private set; }
|
public AudioClient AudioClient { get; private set; }
|
||||||
|
|
||||||
public bool HasAllMembers => _downloaderPromise.Task.IsCompleted;
|
public bool HasAllMembers => _downloaderPromise.Task.IsCompleted;
|
||||||
|
public bool IsSynced => _syncPromise.Task.IsCompleted;
|
||||||
public Task SyncPromise => _syncPromise.Task;
|
public Task SyncPromise => _syncPromise.Task;
|
||||||
public Task DownloaderPromise => _downloaderPromise.Task;
|
public Task DownloaderPromise => _downloaderPromise.Task;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user