From fdd2c80d2b47c4dcb507ed54352f592f890b9f93 Mon Sep 17 00:00:00 2001 From: Christopher F Date: Sat, 6 Jan 2018 23:20:21 -0500 Subject: [PATCH] Fix outgoing activity sending (#916) This change resolves #916 Discord requires the {"type": 0} payload for all non-streaming activities. This change fixes a bug where name-only games would fail to include this payload, causing the presence change to be discarded by Discord. --- .../DiscordSocketClient.cs | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 35a22edc4..cb3f23c57 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -1,4 +1,4 @@ -#pragma warning disable CS0618 +#pragma warning disable CS0618 using Discord.API; using Discord.API.Gateway; using Discord.Logging; @@ -328,9 +328,9 @@ namespace Discord.WebSocket } public override async Task SetGameAsync(string name, string streamUrl = null, StreamType streamType = StreamType.NotStreaming) { - if (streamUrl != null) + if (!string.IsNullOrEmpty(streamUrl)) Activity = new StreamingGame(name, streamUrl, streamType); - else if (name != null) + else if (!string.IsNullOrEmpty(name)) Activity = new Game(name); else Activity = null; @@ -346,21 +346,24 @@ namespace Discord.WebSocket { if (CurrentUser == null) return; - var activity = Activity; var status = Status; var statusSince = _statusSince; - CurrentUser.Presence = new SocketPresence(status, activity); + CurrentUser.Presence = new SocketPresence(status, Activity); var gameModel = new GameModel(); // Discord only accepts rich presence over RPC, don't even bother building a payload - if (activity is RichGame game) throw new NotSupportedException("Outgoing Rich Presences are not supported"); - if (activity is StreamingGame stream) + if (Activity is RichGame game) + throw new NotSupportedException("Outgoing Rich Presences are not supported"); + else if (Activity is StreamingGame stream) { gameModel.StreamUrl = stream.Url; gameModel.StreamType = stream.StreamType; } - else if (activity != null) - gameModel.Name = activity.Name; + else if (Activity != null) + { + gameModel.Name = Activity.Name; + gameModel.StreamType = StreamType.NotStreaming; + } await ApiClient.SendStatusUpdateAsync( status,