private void createChatFile(IChatMessagesCollectionPage activity)
        {
            var      fileName = Path.Combine(_env.ContentRootPath, $".\\wwwroot\\chat.txt");
            FileInfo fi       = new FileInfo(fileName);

            // Check if file already exists.
            if (fi.Exists)
            {
                if (!string.IsNullOrEmpty(System.IO.File.ReadAllText(fileName)))
                {
                    System.IO.File.WriteAllText(fileName, string.Empty);
                }
                foreach (var chat in activity)
                {
                    if (chat.MessageType.ToString() == "Message")
                    {
                        using (StreamWriter sw = new StreamWriter(fileName, append: true))
                        {
                            sw.WriteLine("from: {0}", chat.From.User != null ? chat.From.User.DisplayName : "bot");
                            sw.WriteLine("text: {0}", chat.Body.Content.ToString());
                            sw.WriteLine("at: {0}", chat.LastModifiedDateTime);
                        }
                    }
                }
            }
        }
Пример #2
0
        public void GetAllChatReferences()
        {
            IList <Chat>                    chatReferences;
            IList <ChatMessage>             messageReference;
            IList <ConversationMember>      memberReference;
            GraphServiceClient              client   = new GraphServiceClient(Authentication.GetCredentialProvider());
            Task <IUserChatsCollectionPage> chatPage = client.Me.Chats.Request().GetAsync();

            chatPage.Wait();
            while (true)
            {
                IUserChatsCollectionPage chats = chatPage.Result;
                chatReferences = chats.CurrentPage;
                foreach (Chat chat in chatReferences)
                {
                    Task <IChatMessagesCollectionPage> chatMessagePage = client.Chats[chat.Id].Messages.Request().GetAsync();
                    chatMessagePage.Wait();
                    List <MessageDetail> messageDetailList = new List <MessageDetail>();
                    while (true)
                    {
                        IChatMessagesCollectionPage messages = chatMessagePage.Result;
                        messageReference = messages.CurrentPage;
                        foreach (ChatMessage message in messageReference)
                        {
                            MessageDetail detail = new MessageDetail();
                            detail.Body = message.Body.Content;
                            detail.From = message.From.User.DisplayName;
                            messageDetailList.Add(detail);
                        }
                        if (messageReference.Count == 0)
                        {
                            break;
                        }
                        chatMessagePage = messages.NextPageRequest.GetAsync();
                        chatMessagePage.Wait();
                    }

                    Task <IChatMembersCollectionPage> chatMemberPage = client.Chats[chat.Id].Members.Request().GetAsync();
                    chatMemberPage.Wait();
                    IChatMembersCollectionPage members = chatMemberPage.Result;
                    memberReference = members.CurrentPage;
                    List <string> memberList = GetMembers(memberReference);
                    if (memberList.Count > 0 && messageDetailList.Count > 0)
                    {
                        Console.WriteLine("Chat between " + DisplayMembers(memberList));
                        foreach (MessageDetail detail in messageDetailList)
                        {
                            Console.WriteLine(detail.From + ": " + detail.Body);
                        }
                    }
                }
                if (chats.NextPageRequest == null)
                {
                    break;
                }
                chatPage = chats.NextPageRequest.GetAsync();
                chatPage.Wait();
            }
        }
Пример #3
0
        private List <MessageDetail> GetMessages(IChatMessagesCollectionPage messagePage)
        {
            List <MessageDetail> messageList = new List <MessageDetail>();
            IList <ChatMessage>  messageReferences;

            if (messagePage != null)
            {
                messageReferences = messagePage.CurrentPage;
                foreach (ChatMessage message in messageReferences)
                {
                    MessageDetail detail = new MessageDetail();
                    detail.Body = message.Body.Content;
                    detail.From = message.From.User.DisplayName;
                }
            }
            return(messageList);
        }
        private async Task ProcessMessages(Credential creds, Guid sourceId, string topicId, IChatMessagesCollectionPage chatMessagesCollectionPage, string token)
        {
            foreach (var message in chatMessagesCollectionPage)
            {
                await Process(creds, sourceId, message.From.User);

                var received = Events.Message.From(message, sourceId, topicId);
                var existing = _store.GetMessage(sourceId, received.Id);
                if (existing == null)
                {
                    _store.Add(sourceId, received);
                }
                await _events.Sync(creds, sourceId, received, existing, message.LastModifiedDateTime?.ToUnixTimeMilliseconds() ?? message.CreatedDateTime.Value.ToUnixTimeMilliseconds());
            }
        }
        private async Task ProcessMessages(TeamsBackfillCommand request, Credential credential, Chat chat, IChatMessagesCollectionPage messages)
        {
            foreach (var message in messages)
            {
                var images = new ImageProcessor().GetImages(message, Network.Teams);
                foreach (var image in images)
                {
                    try
                    {
                        if (_store.GetImage(request.SourceId, image.FromEntityId, image.Url) == null)
                        {
                            try
                            {
                                await _rest.DownloadImage(credential, request.SourceId, image.Id, image.Url, request.Token, GetImageDirectory(request.SourceId), _tokenUrls);
                            }
                            catch (Exception e)
                            {
                                _logger.LogError(e.Message);
                                var url = image.Url;
                                var hostedContentIds = Regex.Matches(url, @"hostedContents\/(.+)\/\$value").GetGroupMatches();
                                if (hostedContentIds.Length == 1)
                                {
                                    var hostedContent = hostedContentIds.First();
                                    var id            = ExtractUrlFromHostedContent(url, hostedContent);
                                    if (string.IsNullOrEmpty(id.Url))
                                    {
                                        _logger.LogWarning($"hostedContents had no url: {Base64Decode(hostedContent)}");
                                    }
                                    await _rest.DownloadImage(credential, request.SourceId, image.Id, id.Url, request.Token, GetImageDirectory(request.SourceId), _tokenUrls);
                                }
                                else
                                {
                                    _logger.LogError("Unable to find hostedContent");
                                    throw;
                                }
                            }
                            image.Created = message.CreatedDateTime.Value;
                            await _events.Add(credential, request.SourceId, image.FromEntityId, "ImageCreated", image.ToJson(), message.CreatedDateTime.Value.ToUnixTimeMilliseconds());

                            _store.Add(request.SourceId, image);
                            ReplaceMessageContent(message, image);
                        }
                        else
                        {
                            ReplaceMessageContent(message, image);
                        }
                    }
                    catch (Exception e)
                    {
                        _logger.LogError(e, "Could not download image");
                    }
                }
            }
            await _rest.SaveResponse(credential, request.SourceId, null, TeamsRequestTypes.ChatMessages, new TeamsMessageData { Id = chat.Id, Topic = chat.Topic }, messages.ToJson());
        }