@@ -24,6 +24,7 @@ namespace Discord.WebSocket
/// </summary>
public partial class DiscordSocketClient : BaseSocketClient, IDiscordClient
{
#region DiscordSocketClient
private readonly ConcurrentQueue<ulong> _largeGuilds;
internal readonly JsonSerializer _serializer;
private readonly DiscordShardedClient _shardedClient;
@@ -62,6 +63,7 @@ namespace Discord.WebSocket
/// <inheritdoc />
public override IActivity Activity { get => _activity.GetValueOrDefault(); protected set => _activity = Optional.Create(value); }
private Optional<IActivity> _activity;
#endregion
//From DiscordSocketConfig
internal int TotalShards { get; private set; }
@@ -436,7 +438,7 @@ namespace Discord.WebSocket
var entity = State.GetOrAddCommand(model.Id, (id) => SocketApplicationCommand.Create(this, model));
// u pdate it incase it was cached
//U pdate it incase it was cached
entity.Update(model);
return entity;
@@ -448,7 +450,7 @@ namespace Discord.WebSocket
var entities = models.Select(x => SocketApplicationCommand.Create(this, x));
// p urge our previous commands
//P urge our previous commands
State.PurgeCommands(x => x.IsGlobalCommand);
foreach(var entity in entities)
@@ -513,7 +515,7 @@ namespace Discord.WebSocket
{
var guild = State.GetGuild(model.GuildId.Value);
// s ince the sticker can be from another guild, check if we are in the guild or its in the cache
//S ince 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
@@ -678,7 +680,7 @@ namespace Discord.WebSocket
return null;
GameModel game = null;
// Discord only accepts rich presence over RPC, don't even bother building a payload
//Discord only accepts rich presence over RPC, don't even bother building a payload
if (activity.GetValueOrDefault() != null)
{
@@ -700,6 +702,7 @@ namespace Discord.WebSocket
game);
}
#region ProcessMessageAsync
private async Task ProcessMessageAsync(GatewayOpCode opCode, int? seq, string type, object payload)
{
if (seq != null)
@@ -772,7 +775,7 @@ namespace Discord.WebSocket
case GatewayOpCode.Dispatch:
switch (type)
{
// Connection
#region Connection
case "READY":
{
try
@@ -849,8 +852,9 @@ namespace Discord.WebSocket
await _gatewayLogger.InfoAsync("Resumed previous session").ConfigureAwait(false);
}
break;
#endregion
// Guilds
#region Guilds
case "GUILD_CREATE":
{
var data = (payload as JToken).ToObject<ExtendedGuild>(_serializer);
@@ -1000,8 +1004,9 @@ namespace Discord.WebSocket
}
}
break;
#endregion
// Channels
#region Channels
case "CHANNEL_CREATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (CHANNEL_CREATE)").ConfigureAwait(false);
@@ -1103,8 +1108,9 @@ namespace Discord.WebSocket
}
}
break;
#endregion
// Members
#region Members
case "GUILD_MEMBER_ADD":
{
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_MEMBER_ADD)").ConfigureAwait(false);
@@ -1275,8 +1281,9 @@ namespace Discord.WebSocket
}
}
break;
#endregion
// Roles
#region Roles
case "GUILD_ROLE_CREATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_ROLE_CREATE)").ConfigureAwait(false);
@@ -1368,8 +1375,9 @@ namespace Discord.WebSocket
}
}
break;
#endregion
// Bans
#region Bans
case "GUILD_BAN_ADD":
{
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_BAN_ADD)").ConfigureAwait(false);
@@ -1422,8 +1430,9 @@ namespace Discord.WebSocket
}
}
break;
#endregion
// Messages
#region Messages
case "MESSAGE_CREATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_CREATE)").ConfigureAwait(false);
@@ -1754,8 +1763,9 @@ namespace Discord.WebSocket
await TimedInvokeAsync(_messagesBulkDeletedEvent, nameof(MessagesBulkDeleted), cacheableList, cacheableChannel).ConfigureAwait(false);
}
break;
#endregion
// Statuses
#region Statuses
case "PRESENCE_UPDATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (PRESENCE_UPDATE)").ConfigureAwait(false);
@@ -1843,8 +1853,9 @@ namespace Discord.WebSocket
await TimedInvokeAsync(_userIsTypingEvent, nameof(UserIsTyping), cacheableUser, cacheableChannel).ConfigureAwait(false);
}
break;
#endregion
// Users
#region Users
case "USER_UPDATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (USER_UPDATE)").ConfigureAwait(false);
@@ -1863,8 +1874,9 @@ namespace Discord.WebSocket
}
}
break;
#endregion
// Voice
#region Voice
case "VOICE_STATE_UPDATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (VOICE_STATE_UPDATE)").ConfigureAwait(false);
@@ -1901,7 +1913,7 @@ namespace Discord.WebSocket
after = SocketVoiceState.Create(null, data);
}
// p er g250k, this should always be sent, but apparently not always
//P er g250k, this should always be sent, but apparently not always
user = guild.GetUser(data.UserId)
?? (data.Member.IsSpecified ? guild.AddOrUpdateUser(data.Member.Value) : null);
if (user == null)
@@ -1993,8 +2005,9 @@ namespace Discord.WebSocket
}
break;
#endregion
// Invites
#region Invites
case "INVITE_CREATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (INVITE_CREATE)").ConfigureAwait(false);
@@ -2051,8 +2064,9 @@ namespace Discord.WebSocket
}
}
break;
#endregion
// Interactions
#region Interactions
case "INTERACTION_CREATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (INTERACTION_CREATE)").ConfigureAwait(false);
@@ -2189,8 +2203,9 @@ namespace Discord.WebSocket
await TimedInvokeAsync(_applicationCommandDeleted, nameof(ApplicationCommandDeleted), applicationCommand).ConfigureAwait(false);
}
break;
#endregion
// Threads
#region Threads
case "THREAD_CREATE":
{
await _gatewayLogger.DebugAsync("Received Dispatch (THREAD_CREATE)").ConfigureAwait(false);
@@ -2251,7 +2266,7 @@ namespace Discord.WebSocket
}
else
{
// Thread is updated but was not cached, likely meaning the thread was unarchived.
//Thread is updated but was not cached, likely meaning the thread was unarchived.
threadChannel = (SocketThreadChannel)guild.AddChannel(State, data);
if (data.ThreadMember.IsSpecified)
threadChannel.AddOrUpdateThreadMember(data.ThreadMember.Value, guild.CurrentUser);
@@ -2507,8 +2522,9 @@ namespace Discord.WebSocket
}
}
break;
#endregion
// Ignored (User only)
#region Ignored (User only)
case "CHANNEL_PINS_ACK":
await _gatewayLogger.DebugAsync("Ignored Dispatch (CHANNEL_PINS_ACK)").ConfigureAwait(false);
break;
@@ -2530,11 +2546,13 @@ namespace Discord.WebSocket
case "WEBHOOKS_UPDATE":
await _gatewayLogger.DebugAsync("Ignored Dispatch (WEBHOOKS_UPDATE)").ConfigureAwait(false);
break;
#endregion
// Others
#region Others
default:
await _gatewayLogger.WarningAsync($"Unknown Dispatch ({type})").ConfigureAwait(false);
break;
#endregion
}
break;
default:
@@ -2548,6 +2566,7 @@ namespace Discord.WebSocket
Console.WriteLine(ex);
}
}
#endregion
private async Task RunHeartbeatAsync(int intervalMillis, CancellationToken cancelToken)
{