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); }
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); }