Esempio n. 1
0
        private string FindMessageToDeleteTimeStamp(SlackMessage message)
        {
            var attachmentTimeStamp       = message.Attachments.Last().TimeStamp;
            var attachmentToFind          = message.Attachments.Last();
            var messageToDeletesTimeStamp = ExtractMessageToDeleteTimeStamp(attachmentToFind, _cachedMessageListResponse);

            if (messageToDeletesTimeStamp != null)
            {
                return(messageToDeletesTimeStamp);
            }

            var unixTimeStamp   = attachmentTimeStamp.ToUnixTimeSeconds();
            var queryParameters = new Dictionary <string, string>
            {
                // Download 2x the buffer in-case there was chatter in the channel we're posting to.
                ["count"] = (2 * _configuration.MessageBufferSize).ToString(),

                // Oldest should be 1 second less than the timestamp we're looking for to ensure we captuer it.
                ["oldest"]    = (unixTimeStamp - 10).ToString(),
                ["inclusive"] = "1",
                ["channel"]   = _channelId
            };

            var authorizedQuery          = GetAuthorizedQuery(queryParameters);
            var channelMessageHistoryUri = new Uri(_configuration.SlackApiUrl + ChannelMessageHistoryApi + authorizedQuery);
            var result        = _httpClient.PostJsonWithRetry(channelMessageHistoryUri);
            var resultContent = result.Content.ReadAsStringAsync().Result;

            _cachedMessageListResponse = JsonConvert.DeserializeObject <SlackMessageListResponse>(resultContent);

            messageToDeletesTimeStamp = ExtractMessageToDeleteTimeStamp(attachmentToFind, _cachedMessageListResponse);

            return(messageToDeletesTimeStamp);
        }
Esempio n. 2
0
        private string ExtractMessageToDeleteTimeStamp(
            SlackAttachment originalAttachment,
            SlackMessageListResponse messageListResponse)
        {
            if (messageListResponse == null)
            {
                return(null);
            }

            var    originalAttachmentFallback = originalAttachment.Fallback;
            var    guidMarker = originalAttachmentFallback.Substring(originalAttachmentFallback.Length - 36);
            string messageToDeletesTimeStamp = null;

            foreach (var responseMessage in messageListResponse.Messages)
            {
                if (responseMessage.Attachments?.Any(attachment => attachment.Fallback?.EndsWith(guidMarker, StringComparison.Ordinal) == true) == true)
                {
                    messageToDeletesTimeStamp = responseMessage.TimeStamp;
                }
            }

            return(messageToDeletesTimeStamp);
        }