|
|
@@ -88,10 +88,10 @@ namespace Discord |
|
|
|
} |
|
|
|
internal IReadOnlyCollection<VoiceRegion> VoiceRegions => _voiceRegions.ToReadOnlyCollection(); |
|
|
|
|
|
|
|
/// <summary> Creates a new discord client using the REST and WebSocket APIs. </summary> |
|
|
|
/// <summary> Creates a new REST/WebSocket discord client. </summary> |
|
|
|
public DiscordSocketClient() |
|
|
|
: this(new DiscordSocketConfig()) { } |
|
|
|
/// <summary> Creates a new discord client using the REST and WebSocket APIs. </summary> |
|
|
|
/// <summary> Creates a new REST/WebSocket discord client. </summary> |
|
|
|
public DiscordSocketClient(DiscordSocketConfig config) |
|
|
|
: base(config) |
|
|
|
{ |
|
|
@@ -365,7 +365,7 @@ namespace Discord |
|
|
|
{ |
|
|
|
case GatewayOpCode.Hello: |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Hello").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Hello").ConfigureAwait(false); |
|
|
|
var data = (payload as JToken).ToObject<HelloEvent>(_serializer); |
|
|
|
|
|
|
|
await ApiClient.SendIdentifyAsync().ConfigureAwait(false); |
|
|
@@ -374,10 +374,10 @@ namespace Discord |
|
|
|
break; |
|
|
|
case GatewayOpCode.HeartbeatAck: |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received HeartbeatAck").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received HeartbeatAck").ConfigureAwait(false); |
|
|
|
|
|
|
|
var latency = (int)(Environment.TickCount - _heartbeatTime); |
|
|
|
await _gatewayLogger.DebugAsync($"Latency = {latency} ms").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Latency = {latency} ms").ConfigureAwait(false); |
|
|
|
Latency = latency; |
|
|
|
|
|
|
|
await LatencyUpdated.RaiseAsync(latency).ConfigureAwait(false); |
|
|
@@ -389,7 +389,7 @@ namespace Discord |
|
|
|
//Global |
|
|
|
case "READY": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (READY)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (READY)").ConfigureAwait(false); |
|
|
|
|
|
|
|
//TODO: Make downloading large guilds optional |
|
|
|
var data = (payload as JToken).ToObject<ReadyEvent>(_serializer); |
|
|
@@ -441,7 +441,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "GUILD_UPDATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_UPDATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_UPDATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<API.Guild>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.Id); |
|
|
@@ -479,7 +479,7 @@ namespace Discord |
|
|
|
//Channels |
|
|
|
case "CHANNEL_CREATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (CHANNEL_CREATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (CHANNEL_CREATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<API.Channel>(_serializer); |
|
|
|
ICachedChannel channel = null; |
|
|
@@ -502,7 +502,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "CHANNEL_UPDATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (CHANNEL_UPDATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (CHANNEL_UPDATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<API.Channel>(_serializer); |
|
|
|
var channel = DataStore.GetChannel(data.Id); |
|
|
@@ -518,7 +518,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "CHANNEL_DELETE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (CHANNEL_DELETE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (CHANNEL_DELETE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<API.Channel>(_serializer); |
|
|
|
var channel = RemoveCachedChannel(data.Id); |
|
|
@@ -532,7 +532,7 @@ namespace Discord |
|
|
|
//Members |
|
|
|
case "GUILD_MEMBER_ADD": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_MEMBER_ADD)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_MEMBER_ADD)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<GuildMemberAddEvent>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.GuildId); |
|
|
@@ -547,7 +547,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "GUILD_MEMBER_UPDATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_MEMBER_UPDATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_MEMBER_UPDATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<GuildMemberUpdateEvent>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.GuildId); |
|
|
@@ -569,7 +569,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "GUILD_MEMBER_REMOVE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_MEMBER_REMOVE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_MEMBER_REMOVE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<GuildMemberRemoveEvent>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.GuildId); |
|
|
@@ -590,7 +590,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "GUILD_MEMBERS_CHUNK": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_MEMBERS_CHUNK)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_MEMBERS_CHUNK)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<GuildMembersChunkEvent>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.GuildId); |
|
|
@@ -613,7 +613,7 @@ namespace Discord |
|
|
|
//Roles |
|
|
|
case "GUILD_ROLE_CREATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_ROLE_CREATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_ROLE_CREATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<GuildRoleCreateEvent>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.GuildId); |
|
|
@@ -628,7 +628,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "GUILD_ROLE_UPDATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_ROLE_UPDATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_ROLE_UPDATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<GuildRoleUpdateEvent>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.GuildId); |
|
|
@@ -650,7 +650,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "GUILD_ROLE_DELETE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_ROLE_DELETE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_ROLE_DELETE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<GuildRoleDeleteEvent>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.GuildId); |
|
|
@@ -670,7 +670,7 @@ namespace Discord |
|
|
|
//Bans |
|
|
|
case "GUILD_BAN_ADD": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_BAN_ADD)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_BAN_ADD)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<GuildBanEvent>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.GuildId); |
|
|
@@ -682,7 +682,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "GUILD_BAN_REMOVE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_BAN_REMOVE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (GUILD_BAN_REMOVE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<GuildBanEvent>(_serializer); |
|
|
|
var guild = DataStore.GetGuild(data.GuildId); |
|
|
@@ -696,7 +696,7 @@ namespace Discord |
|
|
|
//Messages |
|
|
|
case "MESSAGE_CREATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (MESSAGE_CREATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_CREATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<API.Message>(_serializer); |
|
|
|
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; |
|
|
@@ -707,7 +707,7 @@ namespace Discord |
|
|
|
if (author != null) |
|
|
|
{ |
|
|
|
var msg = channel.AddCachedMessage(author, data); |
|
|
|
await MessageReceived.RaiseAsync(msg).ConfigureAwait(false).ConfigureAwait(false); |
|
|
|
await MessageReceived.RaiseAsync(msg).ConfigureAwait(false); |
|
|
|
} |
|
|
|
else |
|
|
|
await _gatewayLogger.WarningAsync("MESSAGE_CREATE referenced an unknown user.").ConfigureAwait(false); |
|
|
@@ -718,7 +718,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "MESSAGE_UPDATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (MESSAGE_UPDATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_UPDATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<API.Message>(_serializer); |
|
|
|
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; |
|
|
@@ -735,7 +735,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
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 channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; |
|
|
@@ -752,7 +752,7 @@ namespace Discord |
|
|
|
//Statuses |
|
|
|
case "PRESENCE_UPDATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (PRESENCE_UPDATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (PRESENCE_UPDATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<API.Presence>(_serializer); |
|
|
|
if (data.GuildId == null) |
|
|
@@ -778,7 +778,7 @@ namespace Discord |
|
|
|
break; |
|
|
|
case "TYPING_START": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (TYPING_START)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (TYPING_START)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<TypingStartEvent>(_serializer); |
|
|
|
var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; |
|
|
@@ -796,7 +796,7 @@ namespace Discord |
|
|
|
//Voice |
|
|
|
case "VOICE_STATE_UPDATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (VOICE_STATE_UPDATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (VOICE_STATE_UPDATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<API.VoiceState>(_serializer); |
|
|
|
if (data.GuildId.HasValue) |
|
|
@@ -821,7 +821,7 @@ namespace Discord |
|
|
|
//Settings |
|
|
|
case "USER_UPDATE": |
|
|
|
{ |
|
|
|
await _gatewayLogger.DebugAsync($"Received Dispatch (USER_UPDATE)").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Received Dispatch (USER_UPDATE)").ConfigureAwait(false); |
|
|
|
|
|
|
|
var data = (payload as JToken).ToObject<API.User>(_serializer); |
|
|
|
if (data.Id == CurrentUser.Id) |
|
|
@@ -835,12 +835,22 @@ namespace Discord |
|
|
|
|
|
|
|
//Ignored |
|
|
|
case "USER_SETTINGS_UPDATE": |
|
|
|
await _gatewayLogger.DebugAsync("Ignored Dispatch (USER_SETTINGS_UPDATE)").ConfigureAwait(false); |
|
|
|
return; |
|
|
|
case "MESSAGE_ACK": //TODO: Add (User only) |
|
|
|
await _gatewayLogger.DebugAsync("Ignored Dispatch (MESSAGE_ACK)").ConfigureAwait(false); |
|
|
|
return; |
|
|
|
case "GUILD_EMOJIS_UPDATE": //TODO: Add |
|
|
|
await _gatewayLogger.DebugAsync("Ignored Dispatch (GUILD_EMOJIS_UPDATE)").ConfigureAwait(false); |
|
|
|
return; |
|
|
|
case "GUILD_INTEGRATIONS_UPDATE": //TODO: Add |
|
|
|
await _gatewayLogger.DebugAsync("Ignored Dispatch (GUILD_INTEGRATIONS_UPDATE)").ConfigureAwait(false); |
|
|
|
return; |
|
|
|
case "VOICE_SERVER_UPDATE": //TODO: Add |
|
|
|
await _gatewayLogger.DebugAsync("Ignored Dispatch (VOICE_SERVER_UPDATE)").ConfigureAwait(false); |
|
|
|
return; |
|
|
|
case "RESUMED": //TODO: Add |
|
|
|
await _gatewayLogger.DebugAsync($"Ignored Dispatch ({type})").ConfigureAwait(false); |
|
|
|
await _gatewayLogger.DebugAsync("Ignored Dispatch (RESUMED)").ConfigureAwait(false); |
|
|
|
return; |
|
|
|
|
|
|
|
//Others |
|
|
|