Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
 public async Task <List <ChatUser> > GetOnlineUsers()
 {
     return(await _onlineUsers.GetValuesAsync());
 }