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<WordFilter> _filteredWords;
private List<AdWords> _adWords;
public WordFilterManager()
{
this._filteredWords = new List<WordFilter>();
this._adWords = new List<AdWords>();
}
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;
}
}
}