From 6781a0f233d8f093dda23889ef8ea4044db9906e Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 7 Oct 2015 14:02:42 -0300 Subject: [PATCH] Added message acknowledgement --- src/Discord.Net/API/Endpoints.cs | 2 +- src/Discord.Net/DiscordAPIClient.cs | 13 ++++++++----- src/Discord.Net/DiscordClient.cs | 14 ++++++++++---- src/Discord.Net/DiscordClientConfig.cs | 3 +++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/Discord.Net/API/Endpoints.cs b/src/Discord.Net/API/Endpoints.cs index 4349781a7..95dedca52 100644 --- a/src/Discord.Net/API/Endpoints.cs +++ b/src/Discord.Net/API/Endpoints.cs @@ -19,6 +19,7 @@ public static string ChannelMessages(string channelId) => $"channels/{channelId}/messages"; public static string ChannelMessages(string channelId, int limit) => $"channels/{channelId}/messages?limit={limit}"; public static string ChannelMessage(string channelId, string msgId) => $"channels/{channelId}/messages/{msgId}"; + public static string ChannelMessageAck(string channelId, string msgId) => $"channels/{channelId}/messages/{msgId}/ack"; public static string ChannelInvites(string channelId) => $"channels/{channelId}/invites"; public static string ChannelPermission(string channelId, string userOrRoleId) => $"channels/{channelId}/permissions/{userOrRoleId}"; @@ -44,7 +45,6 @@ public const string VoiceIce = "voice/ice"; public const string StatusActiveMaintenance = "scheduled-maintenances/active.json"; - public const string StatusUnresolvedMaintenance = "scheduled-maintenances/unresolved.json"; public const string StatusUpcomingMaintenance = "scheduled-maintenances/upcoming.json"; } } diff --git a/src/Discord.Net/DiscordAPIClient.cs b/src/Discord.Net/DiscordAPIClient.cs index 25c106ddb..000392352 100644 --- a/src/Discord.Net/DiscordAPIClient.cs +++ b/src/Discord.Net/DiscordAPIClient.cs @@ -105,10 +105,6 @@ namespace Discord } //Incidents - public Task GetUnresolvedIncidents() - { - return _rest.Get(Endpoints.StatusUnresolvedMaintenance); - } public Task GetActiveIncidents() { return _rest.Get(Endpoints.StatusActiveMaintenance); @@ -207,7 +203,14 @@ namespace Discord var request = new EditMessageRequest { Content = message, Mentions = mentions }; return _rest.Patch(Endpoints.ChannelMessage(channelId, messageId), request); } - public Task SendIsTyping(string channelId) + public Task AckMessage(string messageId, string channelId) + { + if (messageId == null) throw new ArgumentNullException(nameof(messageId)); + if (channelId == null) throw new ArgumentNullException(nameof(channelId)); + + return _rest.Post(Endpoints.ChannelMessageAck(channelId, messageId)); + } + public Task SendIsTyping(string channelId) { if (channelId == null) throw new ArgumentNullException(nameof(channelId)); diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 9d0de5ac3..a2e5c7f40 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -534,15 +534,17 @@ namespace Discord var data = e.Payload.ToObject(_serializer); Message msg = null; - bool wasLocal = _config.UseMessageQueue && data.Author.Id == CurrentUserId && data.Nonce != null; - if (wasLocal) + bool isAuthor = data.Author.Id == CurrentUserId; + bool hasFinishedSending = false; + if (_config.UseMessageQueue && isAuthor && data.Nonce != null) { msg = _messages.Remap("nonce" + data.Nonce, data.Id); if (msg != null) { msg.IsQueued = false; msg.Id = data.Id; - } + hasFinishedSending = true; + } } if (msg == null) @@ -564,7 +566,11 @@ namespace Discord member.UpdateActivity(data.Timestamp); } } - if (wasLocal) + + if (_config.AckMessages && isAuthor) + await _api.AckMessage(data.Id, data.ChannelId); + + if (hasFinishedSending) RaiseMessageSent(msg); RaiseMessageCreated(msg); } diff --git a/src/Discord.Net/DiscordClientConfig.cs b/src/Discord.Net/DiscordClientConfig.cs index 3aca8cc34..21593c905 100644 --- a/src/Discord.Net/DiscordClientConfig.cs +++ b/src/Discord.Net/DiscordClientConfig.cs @@ -63,6 +63,9 @@ namespace Discord /// (Experimental) Maintains the LastActivity property for users, showing when they last made an action (sent message, joined server, typed, etc). public bool TrackActivity { get { return _trackActivity; } set { SetValue(ref _trackActivity, value); } } private bool _trackActivity = true; + /// (Experimental) Acknowledges all incoming messages so that they appear read. + public bool AckMessages { get { return _ackMessages; } set { SetValue(ref _ackMessages, value); } } + private bool _ackMessages = false; //Internals internal bool VoiceOnly { get { return _voiceOnly; } set { SetValue(ref _voiceOnly, value); } }