Пример #1
0
        public async Task <IActionResult> OnGetAsync()
        {
            var hexId = ((string)RouteData.Values["chatId"]).Trim();

            if (hexId.Length == 16)
            {
                ChatId = Convert.ToInt64(hexId, 16);
                var chatGroup = await _telegramService.GetGroup(ChatId);

                Title = chatGroup.Title;

                var messages = new Dictionary <long, TelegramMessage>();

                // Load messages already logged.
                foreach (var messageFromAudit in _messageAuditService.ReadLog(ChatId))
                {
                    // Use Try Add to avoid errors if we managed to record the same message.
                    messages.TryAdd(messageFromAudit.MessageId, messageFromAudit);
                }

                // Build up a list of new messages to log as they should be logged in reverse time order.
                var toAudit = new List <TelegramMessage>();
                await foreach (var messageFromTelegram in _telegramService.GetMessageHistory(ChatId))
                {
                    // Check if we already audited this message
                    if (!messages.ContainsKey(messageFromTelegram.MessageId))
                    {
                        // The message is new so we add it to the output and plan to log it
                        messages.Add(messageFromTelegram.MessageId, messageFromTelegram);
                        toAudit.Add(messageFromTelegram);
                    }
                }

                if (toAudit.Any())
                {
                    _messageAuditService.LogMessage(toAudit.OrderBy(m => m.Sent).ToList());
                }

                Messages = messages.Values.OrderByDescending(m => m.Sent);
            }

            return(Page());
        }