Browse Source

Fix #83

pull/1923/head
quin lynch 4 years ago
parent
commit
3ca4f51278
9 changed files with 39 additions and 29 deletions
  1. +2
    -2
      src/Discord.Net.WebSocket/API/Gateway/GatewayOpCode.cs
  2. +1
    -1
      src/Discord.Net.WebSocket/API/Gateway/IdentifyParams.cs
  3. +5
    -4
      src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs
  4. +5
    -0
      src/Discord.Net.WebSocket/ConnectionManager.cs
  5. +1
    -1
      src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj
  6. +1
    -1
      src/Discord.Net.WebSocket/Discord.Net.WebSocket.xml
  7. +10
    -6
      src/Discord.Net.WebSocket/DiscordSocketApiClient.cs
  8. +1
    -1
      src/Discord.Net.WebSocket/DiscordSocketClient.cs
  9. +13
    -13
      src/Discord.Net/Discord.Net.nuspec

+ 2
- 2
src/Discord.Net.WebSocket/API/Gateway/GatewayOpCode.cs View File

@@ -1,4 +1,4 @@
#pragma warning disable CS1591
#pragma warning disable CS1591
namespace Discord.API.Gateway namespace Discord.API.Gateway
{ {
internal enum GatewayOpCode : byte internal enum GatewayOpCode : byte
@@ -10,7 +10,7 @@ namespace Discord.API.Gateway
/// <summary> C→S - Used to associate a connection with a token and specify configuration. </summary> /// <summary> C→S - Used to associate a connection with a token and specify configuration. </summary>
Identify = 2, Identify = 2,
/// <summary> C→S - Used to update client's status and current game id. </summary> /// <summary> C→S - Used to update client's status and current game id. </summary>
StatusUpdate = 3,
PresenceUpdate = 3,
/// <summary> C→S - Used to join a particular voice channel. </summary> /// <summary> C→S - Used to join a particular voice channel. </summary>
VoiceStateUpdate = 4, VoiceStateUpdate = 4,
/// <summary> C→S - Used to ensure the guild's voice server is alive. </summary> /// <summary> C→S - Used to ensure the guild's voice server is alive. </summary>


+ 1
- 1
src/Discord.Net.WebSocket/API/Gateway/IdentifyParams.cs View File

@@ -16,7 +16,7 @@ namespace Discord.API.Gateway
[JsonProperty("shard")] [JsonProperty("shard")]
public Optional<int[]> ShardingParams { get; set; } public Optional<int[]> ShardingParams { get; set; }
[JsonProperty("presence")] [JsonProperty("presence")]
public Optional<StatusUpdateParams> Presence { get; set; }
public Optional<PresenceUpdateParams> Presence { get; set; }
[JsonProperty("intents")] [JsonProperty("intents")]
public Optional<int> Intents { get; set; } public Optional<int> Intents { get; set; }
} }


+ 5
- 4
src/Discord.Net.WebSocket/API/Gateway/StatusUpdateParams.cs View File

@@ -4,15 +4,16 @@ using Newtonsoft.Json;
namespace Discord.API.Gateway namespace Discord.API.Gateway
{ {
[JsonObject(MemberSerialization = MemberSerialization.OptIn)] [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
internal class StatusUpdateParams
internal class PresenceUpdateParams

{ {
[JsonProperty("status")] [JsonProperty("status")]
public UserStatus Status { get; set; } public UserStatus Status { get; set; }
[JsonProperty("since"), Int53]
[JsonProperty("since", NullValueHandling = NullValueHandling.Include), Int53]
public long? IdleSince { get; set; } public long? IdleSince { get; set; }
[JsonProperty("afk")] [JsonProperty("afk")]
public bool IsAFK { get; set; } public bool IsAFK { get; set; }
[JsonProperty("game")]
public Game Game { get; set; }
[JsonProperty("activities")]
public object[] Activities { get; set; } // TODO, change to interface later
} }
} }

+ 5
- 0
src/Discord.Net.WebSocket/ConnectionManager.cs View File

@@ -185,6 +185,11 @@ namespace Discord
_readyPromise.TrySetException(ex); _readyPromise.TrySetException(ex);
_connectionPromise.TrySetException(ex); _connectionPromise.TrySetException(ex);
_connectionCancelToken?.Cancel(); _connectionCancelToken?.Cancel();

_ = Task.Run(async () =>
{
await _logger.ErrorAsync($"Failed to start the connection: {ex}", ex);
});
} }
public void CriticalError(Exception ex) public void CriticalError(Exception ex)
{ {


+ 1
- 1
src/Discord.Net.WebSocket/Discord.Net.WebSocket.csproj View File

@@ -18,7 +18,7 @@
<DocumentationFile>..\Discord.Net.WebSocket\Discord.Net.WebSocket.xml</DocumentationFile> <DocumentationFile>..\Discord.Net.WebSocket\Discord.Net.WebSocket.xml</DocumentationFile>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net461|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net461|AnyCPU'">
<DefineConstants>DEBUG;TRACE;DEBUG_LIMITS</DefineConstants>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Discord.Net.Core\Discord.Net.Core.csproj" /> <ProjectReference Include="..\Discord.Net.Core\Discord.Net.Core.csproj" />


+ 1
- 1
src/Discord.Net.WebSocket/Discord.Net.WebSocket.xml View File

@@ -13,7 +13,7 @@
<member name="F:Discord.API.Gateway.GatewayOpCode.Identify"> <member name="F:Discord.API.Gateway.GatewayOpCode.Identify">
<summary> C→S - Used to associate a connection with a token and specify configuration. </summary> <summary> C→S - Used to associate a connection with a token and specify configuration. </summary>
</member> </member>
<member name="F:Discord.API.Gateway.GatewayOpCode.StatusUpdate">
<member name="F:Discord.API.Gateway.GatewayOpCode.PresenceUpdate">
<summary> C→S - Used to update client's status and current game id. </summary> <summary> C→S - Used to update client's status and current game id. </summary>
</member> </member>
<member name="F:Discord.API.Gateway.GatewayOpCode.VoiceStateUpdate"> <member name="F:Discord.API.Gateway.GatewayOpCode.VoiceStateUpdate">


+ 10
- 6
src/Discord.Net.WebSocket/DiscordSocketApiClient.cs View File

@@ -213,6 +213,10 @@ namespace Discord.API
options.BucketId = GatewayBucket.Get(GatewayBucketType.Unbucketed).Id; options.BucketId = GatewayBucket.Get(GatewayBucketType.Unbucketed).Id;
await RequestQueue.SendAsync(new WebSocketRequest(WebSocketClient, bytes, true, opCode == GatewayOpCode.Heartbeat, options)).ConfigureAwait(false); await RequestQueue.SendAsync(new WebSocketRequest(WebSocketClient, bytes, true, opCode == GatewayOpCode.Heartbeat, options)).ConfigureAwait(false);
await _sentGatewayMessageEvent.InvokeAsync(opCode).ConfigureAwait(false); await _sentGatewayMessageEvent.InvokeAsync(opCode).ConfigureAwait(false);

#if DEBUG
Console.WriteLine($"Sent {opCode}:\n{SerializeJson(payload)}");
#endif
} }


public async Task SendIdentifyAsync(int largeThreshold = 100, int shardID = 0, int totalShards = 1, GatewayIntents gatewayIntents = GatewayIntents.AllUnprivileged, (UserStatus, bool, long?, GameModel)? presence = null, RequestOptions options = null) public async Task SendIdentifyAsync(int largeThreshold = 100, int shardID = 0, int totalShards = 1, GatewayIntents gatewayIntents = GatewayIntents.AllUnprivileged, (UserStatus, bool, long?, GameModel)? presence = null, RequestOptions options = null)
@@ -237,12 +241,12 @@ namespace Discord.API


if (presence.HasValue) if (presence.HasValue)
{ {
msg.Presence = new StatusUpdateParams
msg.Presence = new PresenceUpdateParams
{ {
Status = presence.Value.Item1, Status = presence.Value.Item1,
IsAFK = presence.Value.Item2, IsAFK = presence.Value.Item2,
IdleSince = presence.Value.Item3, IdleSince = presence.Value.Item3,
Game = presence.Value.Item4,
Activities = new object[] { presence.Value.Item4 }
}; };
} }


@@ -264,18 +268,18 @@ namespace Discord.API
options = RequestOptions.CreateOrClone(options); options = RequestOptions.CreateOrClone(options);
await SendGatewayAsync(GatewayOpCode.Heartbeat, lastSeq, options: options).ConfigureAwait(false); await SendGatewayAsync(GatewayOpCode.Heartbeat, lastSeq, options: options).ConfigureAwait(false);
} }
public async Task SendStatusUpdateAsync(UserStatus status, bool isAFK, long? since, GameModel game, RequestOptions options = null)
public async Task SendPresenceUpdateAsync(UserStatus status, bool isAFK, long? since, GameModel game, RequestOptions options = null)
{ {
options = RequestOptions.CreateOrClone(options); options = RequestOptions.CreateOrClone(options);
var args = new StatusUpdateParams
var args = new PresenceUpdateParams
{ {
Status = status, Status = status,
IdleSince = since, IdleSince = since,
IsAFK = isAFK, IsAFK = isAFK,
Game = game
Activities = new object[] { game }
}; };
options.BucketId = GatewayBucket.Get(GatewayBucketType.PresenceUpdate).Id; options.BucketId = GatewayBucket.Get(GatewayBucketType.PresenceUpdate).Id;
await SendGatewayAsync(GatewayOpCode.StatusUpdate, args, options: options).ConfigureAwait(false);
await SendGatewayAsync(GatewayOpCode.PresenceUpdate, args, options: options).ConfigureAwait(false);
} }
public async Task SendRequestMembersAsync(IEnumerable<ulong> guildIds, RequestOptions options = null) public async Task SendRequestMembersAsync(IEnumerable<ulong> guildIds, RequestOptions options = null)
{ {


+ 1
- 1
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -495,7 +495,7 @@ namespace Discord.WebSocket


var presence = BuildCurrentStatus() ?? (UserStatus.Online, false, null, null); var presence = BuildCurrentStatus() ?? (UserStatus.Online, false, null, null);


await ApiClient.SendStatusUpdateAsync(
await ApiClient.SendPresenceUpdateAsync(
status: presence.Item1, status: presence.Item1,
isAFK: presence.Item2, isAFK: presence.Item2,
since: presence.Item3, since: presence.Item3,


+ 13
- 13
src/Discord.Net/Discord.Net.nuspec View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata> <metadata>
<id>Discord.Net.Labs</id> <id>Discord.Net.Labs</id>
<version>3.0.0-pre$suffix$</version>
<version>3.0.1-pre$suffix$</version>
<title>Discord.Net Labs</title> <title>Discord.Net Labs</title>
<authors>Discord.Net Contributors</authors> <authors>Discord.Net Contributors</authors>
<owners>quinchs</owners> <owners>quinchs</owners>
@@ -14,25 +14,25 @@
<iconUrl>https://avatars.githubusercontent.com/u/84047264</iconUrl> <iconUrl>https://avatars.githubusercontent.com/u/84047264</iconUrl>
<dependencies> <dependencies>
<group targetFramework="net461"> <group targetFramework="net461">
<dependency id="Discord.Net.Labs.Core" version="2.4.6$suffix$" />
<dependency id="Discord.Net.Labs.Rest" version="2.4.6$suffix$" />
<dependency id="Discord.Net.Labs.Core" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Rest" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.WebSocket" version="3.0.0-pre$suffix$" /> <dependency id="Discord.Net.Labs.WebSocket" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Commands" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Webhook" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Commands" version="2.3.5$suffix$" />
<dependency id="Discord.Net.Labs.Webhook" version="2.3.4$suffix$" />
</group> </group>
<group targetFramework="netstandard2.0"> <group targetFramework="netstandard2.0">
<dependency id="Discord.Net.Labs.Core" version="2.4.6$suffix$" />
<dependency id="Discord.Net.Labs.Rest" version="2.4.6$suffix$" />
<dependency id="Discord.Net.Labs.Core" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Rest" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.WebSocket" version="3.0.0-pre$suffix$" /> <dependency id="Discord.Net.Labs.WebSocket" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Commands" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Webhook" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Commands" version="2.3.5$suffix$" />
<dependency id="Discord.Net.Labs.Webhook" version="2.3.4$suffix$" />
</group> </group>
<group targetFramework="netstandard2.1"> <group targetFramework="netstandard2.1">
<dependency id="Discord.Net.Labs.Core" version="2.4.6$suffix$" />
<dependency id="Discord.Net.Labs.Rest" version="2.4.6$suffix$" />
<dependency id="Discord.Net.Labs.Core" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Rest" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.WebSocket" version="3.0.0-pre$suffix$" /> <dependency id="Discord.Net.Labs.WebSocket" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Commands" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Webhook" version="3.0.0-pre$suffix$" />
<dependency id="Discord.Net.Labs.Commands" version="2.3.5$suffix$" />
<dependency id="Discord.Net.Labs.Webhook" version="2.3.4$suffix$" />
</group> </group>
</dependencies> </dependencies>
</metadata> </metadata>


Loading…
Cancel
Save