예제 #1
0
        private Task ClientOnMessageUpdated(Cacheable <IMessage, ulong> arg1, SocketMessage arg2, ISocketMessageChannel arg3)
        {
            if (!(arg2 is SocketUserMessage message))
            {
                return(Task.CompletedTask);
            }
            if (message.Source != MessageSource.User)
            {
                return(Task.CompletedTask);
            }

            if (!Config.Ready)
            {
                return(Task.CompletedTask);
            }

            if (Garden.TreeState.UsersConnecting.Contains(arg2.Author.Id))
            {
                Garden.Tree.OnUserMessageAsync(arg2, arg2.Channel is SocketDMChannel).Forget();
                return(Task.CompletedTask);
            }

            try
            {
                ChatFilter.OnChatAsync(arg2).Forget();
                Garden.LetterMatchGame.OnTextEdit(arg2).Forget();
            }
            catch
            {
            }
            return(Task.CompletedTask);
        }
예제 #2
0
        public bool AddMessageAdmin(ChatMessage chatMessage)
        {
            if (chatMessage == null)
            {
                return(false);
            }

            DateTime now            = DateTime.Now;
            string   compareMessage = ChatFilter.CutOff(chatMessage.Content, " ,.-_():;/\\\'\"");

            //trong vòng 300s=5p không được gửi tin nhắn có nội dung giống nhau
            //List<ChatMessage> lst = new List<ChatMessage>(LastMessages.Where(m => m != null && !string.IsNullOrEmpty(m.Content) && ChatFilter.CutOff(m.Content, " ,.-_():;/\\\'\"").Equals(compareMessage) && m.CreatedDate.AddSeconds(ChatController.DUPLICATE_MESSAGE_DURATION) > now));
            //if (lst.Count > 0)
            //    return false;

            if (LastMessages.Count > ChatController.MAX_MESSAGE_IN_CHANNEL)
            {
                if (Monitor.TryEnter(LastMessages, 500))
                {
                    LastMessages.RemoveRange(0, LastMessages.Count - ChatController.MAX_MESSAGE_IN_CHANNEL);
                    Monitor.Exit(LastMessages);
                }
            }

            LastMessages.Add(chatMessage);
            return(true);
        }
예제 #3
0
 /// <summary>
 /// Creates new chat filter. Returns information about the created chat filter
 /// </summary>
 public static Task <ChatFilterInfo> CreateChatFilterAsync(
     this Client client, ChatFilter filter = default)
 {
     return(client.ExecuteAsync(new CreateChatFilter
     {
         Filter = filter
     }));
 }
예제 #4
0
 /// <summary>
 /// Edits existing chat filter. Returns information about the edited chat filter
 /// </summary>
 public static Task <ChatFilterInfo> EditChatFilterAsync(
     this Client client, int chatFilterId = default, ChatFilter filter = default)
 {
     return(client.ExecuteAsync(new EditChatFilter
     {
         ChatFilterId = chatFilterId, Filter = filter
     }));
 }
예제 #5
0
 /// <summary>
 /// Returns default icon name for a filter. Can be called synchronously
 /// </summary>
 public static Task <Text> GetChatFilterDefaultIconNameAsync(
     this Client client, ChatFilter filter = default)
 {
     return(client.ExecuteAsync(new GetChatFilterDefaultIconName
     {
         Filter = filter
     }));
 }
예제 #6
0
        private bool RunCommand(string message, out string notice)
        {
            string username = AccountSession.AccountName;
            bool   ret      = false;

            notice = null;

            if (ADMINS.Contains(username))
            {
                string[] pars = message.Split(' ');
                if (pars.Length > 1)
                {
                    string cmd  = pars[0];
                    string par  = pars[1];
                    string args = "";
                    if (pars.Length > 2)
                    {
                        for (int i = 2; i < pars.Length; i++)
                        {
                            args += pars[i] + " ";
                        }
                    }

                    if (cmd.Equals("/banuser"))
                    {
                        string reason = "Tài khoản {0} bị treo nick, lí do: tuyên truyền website hack";
                        if (!string.IsNullOrEmpty(args))
                        {
                            reason = args;
                        }

                        ret    = ChatFilter.BanUser(par);
                        notice = string.Format(reason, par);
                    }
                    else if (cmd.Equals("/addbadlink"))
                    {
                        ret = ChatFilter.AddBadLink(par);
                    }
                    else if (cmd.Equals("/addbadword"))
                    {
                        if (pars.Length > 2)
                        {
                            for (int i = 2; i < pars.Length; i++)
                            {
                                par += " " + pars[i];
                            }
                        }
                        ret = ChatFilter.AddBadWord(par);
                    }
                    else if (cmd.Equals("/message"))
                    {
                        notice = par + " " + args;
                        ret    = true;
                    }
                }
            }
            return(ret);
        }
예제 #7
0
 /// <summary>
 /// Adds a new filter to the available filters.
 /// </summary>
 /// <param name="newFilter"></param>
 public void RegisterFilter(ChatFilter newFilter)
 {
     if (newFilter == null)
     {
         return;
     }
     lock (this.availableFilters)
     {
         this.availableFilters.Add(newFilter);
     }
 }
예제 #8
0
 /// <summary>
 /// Tries to remove the given filter from the available filters.
 /// </summary>
 /// <param name="filter"></param>
 public void UnregisterFilter(ChatFilter filter)
 {
     if (filter == null)
     {
         return;
     }
     lock (this.availableFilters)
     {
         this.availableFilters.Remove(filter);
     }
 }
예제 #9
0
        public static async Task MessageReceived(SocketMessage message)
        {
            SocketUser user = message.Author;

            using (VooperContext context = new VooperContext(VoopAI.DBOptions))
            {
                User userData = context.Users.FirstOrDefault(u => u.discord_id == user.Id);

                if (userData != null && userData.Id == "u-be323eec-014a-420c-afd5-cddfe308b8c4")
                {
                    message.AddReactionAsync(yeahok);
                }

                if (!(message.Channel is SocketDMChannel))
                {
                    if (userData != null)
                    {
                        userData.discord_message_count += 1;

                        if (!message.Author.IsBot)
                        {
                            // In this case it's been a minute since the last message
                            if (DateTime.Now.Minute != userData.discord_last_message_minute)
                            {
                                // Give message XP
                                userData.discord_message_xp++;
                                userData.discord_last_message_minute = DateTime.Now.Minute;
                                userData.Discord_Last_Message_Time   = DateTime.UtcNow;
                            }
                        }

                        await context.SaveChangesAsync();
                    }
                }
            }



            if (message.Channel.Id == VoopAI.botChannel.Id)
            {
                //VoopAI.logger.LogInformation("Recieved message in Bot channel.");
                await OnMessageBotChannel(message);
            }
            else if (message.Channel.GetType() == typeof(SocketDMChannel))
            {
                //VoopAI.logger.LogInformation("Recieved message in DM.");
                await OnMessageDM(message);
            }

            await OnMessageChannel(message);

            await ChatFilter.FilterMessage(message);
        }
예제 #10
0
        private Task MessageReceived(SocketMessage rawMessage)
        {
            Task.Run(async() =>
            {
                // Ignore system messages and messages from bots
                if (!(rawMessage is SocketUserMessage message))
                {
                    return;
                }
                if (message.Source != MessageSource.User)
                {
                    return;
                }

                if (!Config.Ready)
                {
                    return;
                }

                if (Garden.TreeState.UsersConnecting.Contains(rawMessage.Author.Id))
                {
                    Garden.Tree.OnUserMessageAsync(rawMessage, rawMessage.Channel is SocketDMChannel).Forget();
                    return;
                }

                if (rawMessage.Channel.Id == 725059963566817372)
                {
                    await Garden.LetterMatchGame.OnText(rawMessage);
                    return;
                }

                int argPos = 0;
                if (await ChatFilter.OnChatAsync(rawMessage))
                {
                    if (message.HasStringPrefix(Config.Prefix, ref argPos))
                    {
                        var context = new SocketCommandContext(_discord, message);

                        var result = await _commands.ExecuteAsync(context, argPos, _provider).ConfigureAwait(false);

                        if (result.Error.HasValue &&
                            result.Error.Value != CommandError.UnknownCommand)
                        {
                            await context.Channel.SendMessageAsync(result.ToString()).ConfigureAwait(false);
                        }
                    }
                }
            });
            return(Task.CompletedTask);
        }
예제 #11
0
    public void Start()
    {
        // subscribe to input fields update
        InputFieldChat.onValueChanged.AddListener(OnInputFieldChatValueChanged);

        // Create all the required channel toggles
        InitToggles();

        // Make sure the window and channel panel start disabled
        chatInputWindow.SetActive(false);
        //channelPanel.gameObject.SetActive(false);
        EventManager.AddHandler(Event.UpdateChatChannels, OnUpdateChatChannels);
        chatFilter = GetComponent <ChatFilter>();
    }
예제 #12
0
        public void Configuration(IAppBuilder app)
        {
            // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888
            var hubConfiguration = new HubConfiguration
            {
                // You can enable JSONP by uncommenting line below.
                // JSONP requests are insecure but some older browsers (and some
                // versions of IE) require JSONP to work cross domain
                EnableJSONP = true
            };

            app.MapSignalR(hubConfiguration);
            ChatFilter.Init();
            GameManager.Init();
        }
예제 #13
0
        public static ChatFilterIcon ParseFilter(ChatFilter filter)
        {
            var iconName = filter.IconName;

            if (string.IsNullOrEmpty(iconName))
            {
                var text = Client.Execute(new GetChatFilterDefaultIconName(filter)) as Text;
                if (text != null)
                {
                    iconName = text.TextValue;
                }
            }

            return(ParseFilter(iconName));
        }
예제 #14
0
        public bool AddMessage(string channelId, ChatMessage chatMessage)
        {
            DateTime now = DateTime.Now;

            if (LastMessages.Count > 0)
            {
                if (DateTime.Compare(LastMessageSentTime.AddSeconds(ChatController.TWO_MESSAGE_DURATION), now) > 0)
                {
                    return(false);
                }

                if (LastMessages.Count > 100)
                {
                    int pos = LastMessages.Count - 100;
                    if (LastMessages.ElementAt(pos).CreatedDate.AddSeconds(ChatController.TEN_MESSAGE_DURATION) > now)
                    {
                        return(false);
                    }
                }

                string             compareMessage = ChatFilter.CutOff(chatMessage.Content, " ,.-_():;/\\\'\"");
                List <ChatMessage> lst            = new List <ChatMessage>(LastMessages.Where(m => m != null && !string.IsNullOrEmpty(m.Content) && ChatFilter.CutOff(m.Content, " ,.-_():;/\\\'\"").Equals(compareMessage) && m.CreatedDate.AddSeconds(ChatController.GLOBAL_TEN_SAME_MESSAGE_DURATION) > now));
                if (lst.Count > 120)
                {
                    return(false);
                }

                if (LastMessages.Count > 1200)
                {
                    if (Monitor.TryEnter(LastMessages, 50000))
                    {
                        LastMessages.RemoveRange(0, LastMessages.Count - 1200);
                        Monitor.Exit(LastMessages);
                    }
                }
            }

            LastActivity        = now;
            LastMessageSentTime = now;
            LastMessages.Add(chatMessage);
            return(true);
        }
예제 #15
0
        public void Text(string message)
        {
            if (string.IsNullOrEmpty(message))
            {
                return;
            }
            bool        flag = false;
            var         msg  = ChatFilter.RemoveBadWords(message, out flag);
            ChatMessage msgChat;
            var         account = Lddb.Instance.GetAccountInfo(AccountSession.AccountID);
            int         result  = GameManager.CheckEnableChat(account.AccountID, account.DisplayName, AccountSession.UserType, msg, out msgChat);

            NLogManager.LogMessage($"{account.AccountID}|{ account.DisplayName}|{AccountSession.UserType} => {JsonConvert.SerializeObject(msgChat)}");
            if (result == -1)
            {
                msgChat = new ChatMessage
                {
                    T = 1,
                    //M = "Tổng đặt trong 5 ngày ít nhất 50.000 vàng mới có thể chat", Chanh
                    M = "Tổng tiền đặt trong 5 ngày của bạn phải tối thiểu 20.000 vàng chat",
                    U = "System Admin"
                };
                Clients.Caller.Msg(msgChat);
            }
            else if (result == -2)
            {
                msgChat = new ChatMessage
                {
                    T = 1,
                    M = "Bạn đã bị chặn chat, vui lòng liên hệ admin",
                    U = "System Admin"
                };
                Clients.Caller.Msg(msgChat);
            }
            else if (result == 0)
            {
                Lddb.Instance._userNameChatReal[account.AccountID] = account.DisplayName;
                Clients.All.Msg(msgChat);
            }
        }
예제 #16
0
        public async Task <PagedResult <List <PersonalizedChat>, PersonalizedChat> > RetrievePersonalizedPage(Guid userId, ChatFilter <ChatUserFilter, MessageFilter> filter, PagingOptions pagingOptions)
        {
            await Task.Yield();

            IEnumerable <PersonalizedChat> query = Store.Chats
                                                   .Select(r => Store.Personalize(r.Value, userId))
                                                   .Where(r => filter.Search == null || r.Name.Contains(filter.Search) || filter.SearchInDescription && r.Description.Contains(filter.Search))
                                                   .Where(r => r.Participants.Any(p => filter.UserFiltersList.Any(uFilter =>
                                                                                                                  (uFilter.UserId == null || uFilter.UserId == p.UserId) &&
                                                                                                                  (uFilter.ChatPrivacyMode == null || uFilter.ChatPrivacyMode == r.PrivacyMode) &&
                                                                                                                  (uFilter.ParticipantStatus == null || uFilter.ParticipantStatus == p.ChatParticipantStatus) &&
                                                                                                                  (uFilter.ParticipantType == null || uFilter.ParticipantType == p.ChatParticipantType))))
                                                   .OrderByDescending(r => r.LastTimestamp);

            if (!int.TryParse(pagingOptions?.Cursor, out var skip))
            {
                skip = 0;
            }
            var take = pagingOptions?.Limit ?? ServicesConfiguration.DefaultChatsPageSize;

            query = query.Skip(skip).Take(take);
            var prev = Math.Max(skip - take, 0);

            return(new PagedResult <List <PersonalizedChat>, PersonalizedChat>(query.ToList(), skip == 0 ? null : prev.ToString(), $"{skip + take}"));
        }
예제 #17
0
        public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary <string, object> state)
        {
            ChatFilter filter = null;

            if (parameter is int id)
            {
                var response = await ProtoService.SendAsync(new GetChatFilter(id));

                if (response is ChatFilter result)
                {
                    Id     = id;
                    Filter = result;
                    filter = result;
                }
                else
                {
                    // TODO
                }
            }
            else
            {
                Id     = null;
                Filter = null;
                filter = new ChatFilter();
                filter.PinnedChatIds   = new List <long>();
                filter.IncludedChatIds = new List <long>();
                filter.ExcludedChatIds = new List <long>();
            }

            if (filter == null)
            {
                return;
            }

            if (state != null && state.TryGet("included_chat_id", out long includedChatId))
            {
                filter.IncludedChatIds.Add(includedChatId);
            }

            _pinnedChatIds = filter.PinnedChatIds ?? new List <long>();

            _iconPicked = !string.IsNullOrEmpty(filter.IconName);

            Title = filter.Title;
            Icon  = Icons.ParseFilter(filter);

            Include.Clear();
            Exclude.Clear();

            if (filter.IncludeContacts)
            {
                Include.Add(new FilterFlag {
                    Flag = ChatListFilterFlags.IncludeContacts
                });
            }
            if (filter.IncludeNonContacts)
            {
                Include.Add(new FilterFlag {
                    Flag = ChatListFilterFlags.IncludeNonContacts
                });
            }
            if (filter.IncludeGroups)
            {
                Include.Add(new FilterFlag {
                    Flag = ChatListFilterFlags.IncludeGroups
                });
            }
            if (filter.IncludeChannels)
            {
                Include.Add(new FilterFlag {
                    Flag = ChatListFilterFlags.IncludeChannels
                });
            }
            if (filter.IncludeBots)
            {
                Include.Add(new FilterFlag {
                    Flag = ChatListFilterFlags.IncludeBots
                });
            }

            if (filter.ExcludeMuted)
            {
                Exclude.Add(new FilterFlag {
                    Flag = ChatListFilterFlags.ExcludeMuted
                });
            }
            if (filter.ExcludeRead)
            {
                Exclude.Add(new FilterFlag {
                    Flag = ChatListFilterFlags.ExcludeRead
                });
            }
            if (filter.ExcludeArchived)
            {
                Exclude.Add(new FilterFlag {
                    Flag = ChatListFilterFlags.ExcludeArchived
                });
            }

            foreach (var chatId in filter.PinnedChatIds.Union(filter.IncludedChatIds))
            {
                var chat = CacheService.GetChat(chatId);
                if (chat == null)
                {
                    continue;
                }

                Include.Add(new FilterChat {
                    Chat = chat
                });
            }

            foreach (var chatId in filter.ExcludedChatIds)
            {
                var chat = CacheService.GetChat(chatId);
                if (chat == null)
                {
                    continue;
                }

                Exclude.Add(new FilterChat {
                    Chat = chat
                });
            }

            UpdateIcon();
        }
예제 #18
0
        /// <summary>
        /// Write a Minecraft-Like formatted string to the standard output, using §c color codes
        /// See minecraft.gamepedia.com/Classic_server_protocol#Color_Codes for more info
        /// </summary>
        /// <param name="str">String to write</param>
        /// <param name="acceptnewlines">If false, space are printed instead of newlines</param>
        /// <param name="displayTimestamps">
        /// If false, no timestamp is prepended.
        /// If true, "hh-mm-ss" timestamp will be prepended.
        /// If unspecified, value is retrieved from EnableTimestamps.
        /// </param>
        public static void WriteLineFormatted(string str, bool acceptnewlines = true, bool?displayTimestamp = null)
        {
            if (ChatFilter.chatFilter(str))
            {
                return;
            }
            if (!String.IsNullOrEmpty(str))
            {
                if (!acceptnewlines)
                {
                    str = str.Replace('\n', ' ');
                }
                if (displayTimestamp == null)
                {
                    displayTimestamp = EnableTimestamps;
                }
                if (displayTimestamp.Value)
                {
                    int hour = DateTime.Now.Hour, minute = DateTime.Now.Minute, second = DateTime.Now.Second;
                    ConsoleIO.Write(String.Format("{0}:{1}:{2} ", hour.ToString("00"), minute.ToString("00"), second.ToString("00")));
                }
                if (BasicIO)
                {
                    Console.WriteLine(str);
                    return;
                }
                string[] parts = str.Split(new char[] { '§' });
                if (parts[0].Length > 0)
                {
                    ConsoleIO.Write(parts[0]);
                }
                for (int i = 1; i < parts.Length; i++)
                {
                    if (parts[i].Length > 0)
                    {
                        switch (parts[i][0])
                        {
                        case '0': Console.ForegroundColor = ConsoleColor.Gray; break;     //Should be Black but Black is non-readable on a black background

                        case '1': Console.ForegroundColor = ConsoleColor.DarkBlue; break;

                        case '2': Console.ForegroundColor = ConsoleColor.DarkGreen; break;

                        case '3': Console.ForegroundColor = ConsoleColor.DarkCyan; break;

                        case '4': Console.ForegroundColor = ConsoleColor.DarkRed; break;

                        case '5': Console.ForegroundColor = ConsoleColor.DarkMagenta; break;

                        case '6': Console.ForegroundColor = ConsoleColor.DarkYellow; break;

                        case '7': Console.ForegroundColor = ConsoleColor.Gray; break;

                        case '8': Console.ForegroundColor = ConsoleColor.DarkGray; break;

                        case '9': Console.ForegroundColor = ConsoleColor.Blue; break;

                        case 'a': Console.ForegroundColor = ConsoleColor.Green; break;

                        case 'b': Console.ForegroundColor = ConsoleColor.Cyan; break;

                        case 'c': Console.ForegroundColor = ConsoleColor.Red; break;

                        case 'd': Console.ForegroundColor = ConsoleColor.Magenta; break;

                        case 'e': Console.ForegroundColor = ConsoleColor.Yellow; break;

                        case 'f': Console.ForegroundColor = ConsoleColor.White; break;

                        case 'r': Console.ForegroundColor = ConsoleColor.Gray; break;
                        }

                        if (parts[i].Length > 1)
                        {
                            ConsoleIO.Write(parts[i].Substring(1, parts[i].Length - 1));
                        }
                    }
                }
                Console.ForegroundColor = ConsoleColor.Gray;
            }
            ConsoleIO.Write('\n');
        }
예제 #19
0
        /// <summary>
        /// Gửi message chat
        /// </summary>
        /// <param name="hubCallerContext"></param>
        /// <param name="message"></param>
        /// <param name="channelId"></param>
        /// <returns></returns>
        public bool SendMessage(HubCallerContext hubCallerContext, string message, string channelId)
        {
            NLogManager.LogMessage(">>Start SendMessage");
            try
            {
                if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["CloseChatServer"].ToString()))
                {
                    return(false);
                }

                if (MAX_MESSAGE_LENGTH < message.Length)
                {
                    broadcastMessage(hubCallerContext.ConnectionId, string.Format("Nội dung chát không quá {0} kí tự!", MAX_MESSAGE_LENGTH));
                    return(false);
                }

                //NLogManager.LogMessage(string.Format(">>Statr chat:{0}", channelId));
                LoadListAdmin();
                LoadTimeSendMessage();
                long accountId = GetAccountId(hubCallerContext);
                if (accountId < 1)
                {
                    NLogManager.LogMessage(string.Format("Sending message: not authenticated accountId: {0} - channel: {1} - content={2}", accountId, channelId, message));
                    return(false);
                }
                ChatChannel chatChannel = GetChannel(channelId);
                if (chatChannel == null)
                {
                    NLogManager.LogMessage(string.Format("Sending message: accountId: {0} - not has channel: {1} - content={2}", accountId, channelId, message));
                    return(false);
                }
                if (message.IndexOf('/') == 0)
                {
                    string notice;
                    bool   ret = RunCommand(message, out notice);

                    if (!string.IsNullOrEmpty(notice))
                    {
                        Instance.ClientSystemMessage(channelId, notice, 0);
                    }

                    if (ret)
                    {
                        NLogManager.LogMessage(string.Format("Account: {0} - run command: {1}", accountId, message));
                        return(true);
                    }
                }
                ChatUser chatUser = GetUser(accountId);
                if (chatUser == null)
                {
                    NLogManager.LogMessage(string.Format("Sending message: not chat user: {0} in channel={1} - content={2}", accountId, channelId, message));
                    return(false);
                }
                if (CMSAllGame != "1")
                {
                    if (!ADMINS.Contains(chatUser.UserName))
                    {
                        try
                        {
                            object level = CacheHandler.Get(chatUser.UserName + "_" + channelId);
                            if (level == null)
                            {
                                SetCacheLevel(chatUser.UserName, (int)chatUser.AccountID, channelId);
                            }
                            else if (int.Parse(level.ToString()) == 0)
                            {
                                NLogManager.LogMessage(string.Format("Tổng đặt trong 7 ngày của bạn chưa đủ 2.000.000 Sao để tham gia chat!: {0} ", chatUser.UserName));
                                broadcastMessage(hubCallerContext.ConnectionId, string.Format("Tổng đặt trong 7 ngày của bạn chưa đủ 2.000.000 Sao để tham gia chat!"));
                                return(false);
                            }
                        }
                        catch (Exception ex)
                        {
                            NLogManager.LogMessage(string.Format("{0} Null Cache level", chatUser.UserName));
                            SetCacheLevel(chatUser.UserName, (int)chatUser.AccountID, channelId);
                        }
                    }
                }

                string filteredMessage     = message;
                string tempFilteredMessage = message;
                bool   flag = false;

                //WaitCallback callBack = new WaitCallback(InsertChat);
                //var chatchat = new Insert_Chat();
                //chatchat.AccountID = int.Parse(chatUser.AccountID.ToString());
                //chatchat.UserName = string.Format("{0}({1})", chatUser.UserName, chatUser.NickName);
                //chatchat.channelId = channelId;
                //chatchat.filteredMessage = filteredMessage;
                //ThreadPool.QueueUserWorkItem(callBack, chatchat);

                //khong phai admin thi loc bad link
                if (!ADMINS.Contains(chatUser.UserName))
                {
                    ChatFilter.RemoveBadLinks(tempFilteredMessage, out flag);
                }
                //Check thời gian chát theo quy định

                if (!ADMINS.Contains(chatUser.UserName))
                {
                    try
                    {
                        object value = CacheHandler.Get(chatUser.UserName);
                        if (value == null)
                        {
                            CacheHandler.Add(chatUser.UserName, DateTime.Now.ToString());
                        }
                        else
                        {
                            if (DateTime.Now != DateTime.Parse(value.ToString()))
                            {
                                var lastTime = (DateTime.Now - DateTime.Parse(value.ToString())).TotalSeconds;
                                var a        = MIN_MESSAGE_TIME_SECOND;
                                if (lastTime < int.Parse(MIN_MESSAGE_TIME_SECOND))
                                {
                                    broadcastMessage(hubCallerContext.ConnectionId, string.Format("Chưa hết thời gian chờ {0}s, t/g chờ còn {1}s", MIN_MESSAGE_TIME_SECOND, System.Math.Round((int.Parse(MIN_MESSAGE_TIME_SECOND) - lastTime), 2)));
                                    return(false);
                                }
                            }
                            CacheHandler.Add(chatUser.UserName, DateTime.Now.ToString());
                        }
                    }
                    catch (Exception ex)
                    {
                        NLogManager.LogMessage(string.Format("{0} Null Cache TimeChat", chatUser.UserName));
                        CacheHandler.Add(chatUser.UserName, DateTime.Now.ToString());
                    }
                }



                if (CheckBanUsers(chatUser.UserName))
                {
                    NLogManager.LogMessage(string.Format(">> {0} - Tài khoản đang bị Block! ", chatUser.UserName));
                    broadcastMessage(hubCallerContext.ConnectionId, ReturnCheckBanUsers(chatUser.UserName));
                    return(false);
                }

                //nếu nội dung chat có bad links thì block gói tin và ghi log
                if (flag)
                {
                    chatUser.CountBadLinks += 1;
                    filteredMessage         = "***";
                    if (chatUser.CountBadLinks > 5)
                    {
                        ChatFilter.BanUser(chatUser.UserName);
                    }

                    NLogManager.LogMessage(string.Format("User sent bad link: accountId={0}, username={1} - channelId={2} - content={3} - \n\rAgent: {4}", chatUser.AccountID, chatUser.UserName, channelId, message, chatUser.UserAgent));
                }
                else
                {
                    //khong phai admin thi loc bad word
                    if (!ADMINS.Contains(chatUser.UserName))
                    {
                        filteredMessage = ChatFilter.RemoveBadWords(message, out flag);
                    }

                    NLogManager.LogMessage(flag
                        ? string.Format(
                                               "User sent bad word: accountId={0}, username={1} - channelId={2} - content={3}",
                                               chatUser.AccountID, chatUser.UserName, channelId, message)
                        : string.Format("User sent message: accountId={0}, username={1} - channelId={2} - content={3}",
                                        chatUser.AccountID, chatUser.UserName, channelId, message));
                }

                //khong phai admin thi loc bad word
                if (!ADMINS.Contains(chatUser.UserName))
                {
                    filteredMessage = RemoveBadWords(message, out flag);
                }

                //Thay thế từ khóa
                if (!ADMINS.Contains(chatUser.UserName))
                {
                    filteredMessage = ReplaceKeyword(filteredMessage);
                }


                //admin thì text chat màu đỏ
                ChatMessage chatMessage = new ChatMessage(channelId, chatUser.AccountID, !ADMINS.Contains(chatUser.UserName) ? chatUser.NickName : string.Format("<span style='color:red; font-weight:bold'>ADMIN ({0})</span>", chatUser.NickName), !ADMINS.Contains(chatUser.UserName) ? filteredMessage : string.Format("{0}", filteredMessage));
                bool        canSend;
                if (!ADMINS.Contains(chatUser.UserName))
                {
                    canSend = chatChannel.AddMessage(chatMessage);
                }
                else
                {
                    canSend = chatChannel.AddMessageAdmin(chatMessage);
                }

                if (canSend)
                {
                    canSend = chatUser.AddMessage(channelId, chatMessage);
                }

                if (canSend)
                {
                    ClientReceiveMessage(chatMessage);
                    return(true);
                }
            }
            catch (Exception ex)
            {
                NLogManager.PublishException(ex);
            }

            NLogManager.LogMessage(string.Format(">>Gửi tin nhắn không thành công! "));
            return(false);
        }
예제 #20
0
 private string ConvertTitle(ChatFilter filter)
 {
     return(filter == null ? Strings.Resources.FilterNew : filter.Title);
 }
예제 #21
0
 public OnPrivateMessageEvent(PresenceService ps, ChatFilter filter)
 {
     _ps     = ps;
     _filter = filter;
 }
예제 #22
0
        public int CheckEnableChat(long accountId, string accountName, string message, int userType, out ChatMessage msg)
        {
            ChatUser user;

            msg = null;

            if (_users.TryGetValue(accountId, out user))
            {
                //if (user.TotalRecentBetting < _chatGoldLimit)
                //    return -1;

                if (ChatFilter.CheckBanned(accountName))
                {
                    return(-2);
                }

                if (TimeSpan.FromTicks(DateTime.Now.Ticks - user.LastSpamTime).TotalMinutes <= 5)
                {
                    return(-3);
                }

                if (user.DetectSpam(message))
                {
                    return(-4);
                }
            }
            else
            {
                //long recentBetting = Lddb.Instance.GetRecentBetting(accountId);

                //if (recentBetting < 0)
                //    return -1;

                user = new ChatUser
                {
                    AccountId   = accountId,
                    AccountName = accountName,
                    //TotalRecentBetting = recentBetting,
                    LastActiveTime = DateTime.Now.Ticks,
                };

                _users.AddOrUpdate(accountId, user, (k, v) => v = user);

                //if (recentBetting < _chatGoldLimit)
                //    return -1;

                if (ChatFilter.CheckBanned(accountName))
                {
                    return(-2);
                }

                if (TimeSpan.FromTicks(DateTime.Now.Ticks - user.LastSpamTime).TotalMinutes <= 5)
                {
                    return(-3);
                }

                if (user.DetectSpam(message))
                {
                    return(-4);
                }
            }

            int uType = 4;

            if (userType >= 3)
            {
                uType = 3;
            }

            if (Monitor.TryEnter(_lockmsg, 5000))
            {
                try
                {
                    msg = new ChatMessage {
                        T = uType, M = message, U = accountName
                    };
                    _msgs.Add(msg);
                    if (_msgs.Count > 100)
                    {
                        _msgs.RemoveAt(0);
                    }
                }
                finally
                {
                    Monitor.Exit(_lockmsg);
                }
            }

            return(0);
        }
예제 #23
0
 public OnPublicMessageEvent(ChannelService cs, ChatFilter filter)
 {
     _cs     = cs;
     _filter = filter;
 }