public async Task <List <ChatMessageData> > GetMessages() { var chatData = await _chatMessages.GetValuesAsync(); if (!chatData.Any()) { await _chatMessages.AddRangeAsync(async() => { using (var context = new ApplicationDbContext()) { chatData = await context.ChatMessages .OrderByDescending(x => x.Timestamp) .Where(x => x.IsEnabled) .Take(_historyCount) .OrderBy(x => x.Timestamp) .Select(x => new ChatMessageData { Id = x.Id, IsEnabled = x.IsEnabled, Message = x.Message, Timestamp = x.Timestamp, UserId = x.UserId, ChatHandle = x.User.ChatHandle, Flair = x.User.RoleCss, KarmaTotal = x.User.KarmaTotal, UserName = x.User.UserName }).ToListNoLockAsync(); foreach (var item in chatData) { if (item.UserId == Constant.SYSTEM_USER_CHATBOT.ToString()) { var msgParts = item.Message.Split(':'); if (msgParts.Length != 3) { item.IsEnabled = false; continue; } item.IsBot = msgParts[0] != "Tipbot"; item.IsTipBot = msgParts[0] == "Tipbot"; item.UserName = msgParts[0]; item.ChatHandle = msgParts[1]; item.Message = msgParts[2]; continue; } item.Message = HttpUtility.HtmlEncode(item.Message); item.Avatar = GetAvatar(item.UserName); } return(chatData.ToDictionary(k => k.Id.ToString(), v => v)); } }, true); } return(chatData.Where(x => x.IsEnabled) .OrderByDescending(x => x.Id) .Take(_historyCount) .OrderBy(x => x.Timestamp) .ToList()); }
public async Task <List <ChatUser> > GetOnlineUsers() { return(await _onlineUsers.GetValuesAsync()); }