using System; using System.Linq; using System.Text; using System.Data; using System.Collections.Generic; using System.Text.RegularExpressions; using Plus.Database.Interfaces; using Plus.Communication.Packets.Outgoing.Moderation; namespace Plus.HabboHotel.Rooms.Chat.Filter { public sealed class WordFilterManager { private List _filteredWords; private List _adWords; public WordFilterManager() { this._filteredWords = new List(); this._adWords = new List(); } public void Init() { if (this._filteredWords.Count > 0) this._filteredWords.Clear(); DataTable Data = null; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("SELECT * FROM `wordfilter`"); Data = dbClient.getTable(); if (Data != null) { foreach (DataRow Row in Data.Rows) { this._filteredWords.Add(new WordFilter(Convert.ToString(Row["word"]), Convert.ToString(Row["replacement"]), PlusEnvironment.EnumToBool(Row["strict"].ToString()), PlusEnvironment.EnumToBool(Row["bannable"].ToString()))); } } } DataTable Data = null; using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.SetQuery("SELECT * FROM wordfilter_blackwords"); Data = dbClient.getTable(); if(Data != null) { foreach(DataRow Row in Data.Rows) { this._adWords.Add(new AdWords(Convert.ToString(Row["word"]))); } } } } public string CheckMessage(string Message) { foreach (WordFilter Filter in this._filteredWords.ToList()) { if (Message.ToLower().Contains(Filter.Word) && Filter.IsStrict || Message == Filter.Word) { Message = Regex.Replace(Message, Filter.Word, Filter.Replacement, RegexOptions.IgnoreCase); } else if (Message.ToLower().Contains(Filter.Word) && !Filter.IsStrict || Message == Filter.Word) { string[] Words = Message.Split(' '); Message = ""; foreach (string Word in Words.ToList()) { if (Word.ToLower() == Filter.Word) Message += Filter.Replacement + " "; else Message += Word + " "; } } } return Message.TrimEnd(' '); } public bool CheckReclame(string Message) { foreach (AdWords Ad in this._adWords.ToList()) { if (Message.ToLower().Contains(Ad.Word) || Message == Ad.Word) { Message = Regex.Replace(Message, Ad.Word, "Reclame", RegexOptions.IgnoreCase); return true; } } return false; } public bool CheckBannedWords(string Message) { Message = Message.Replace(" ", "").Replace(".", "").Replace("_", "").ToLower(); foreach (WordFilter Filter in this._filteredWords.ToList()) { if (!Filter.IsBannable) continue; if (Message.Contains(Filter.Word)) return true; } return false; } public bool IsFiltered(string Message) { foreach (WordFilter Filter in this._filteredWords.ToList()) { if (Message.Contains(Filter.Word)) return true; } return false; } } }