From 308427e6621729867eafde218079af10a74695ec Mon Sep 17 00:00:00 2001 From: RaidMax Date: Thu, 2 Nov 2017 17:20:10 -0500 Subject: [PATCH] added chat history stuff --- Admin/Application.csproj | 3 + Admin/lib/SharedLibrary.dll | Bin 102400 -> 110592 bytes Admin/webfront/chat.html | 1 + Plugins/SimpleStats/Chat/ChatDatabase.cs | 95 ++++++++++++++++++++ Plugins/SimpleStats/Chat/ChatHistory.cs | 16 ++++ Plugins/SimpleStats/Chat/ChatHistoryPage.cs | 82 +++++++++++++++++ Plugins/SimpleStats/Plugin.cs | 11 +++ Plugins/SimpleStats/StatsPlugin.csproj | 3 + Plugins/Tests/Plugin.cs | 4 + SharedLibrary/Database.cs | 6 +- 10 files changed, 219 insertions(+), 2 deletions(-) create mode 100644 Admin/webfront/chat.html create mode 100644 Plugins/SimpleStats/Chat/ChatDatabase.cs create mode 100644 Plugins/SimpleStats/Chat/ChatHistory.cs create mode 100644 Plugins/SimpleStats/Chat/ChatHistoryPage.cs diff --git a/Admin/Application.csproj b/Admin/Application.csproj index b87ac4376..bc9bc9ed2 100644 --- a/Admin/Application.csproj +++ b/Admin/Application.csproj @@ -156,6 +156,9 @@ + + PreserveNewest + PreserveNewest diff --git a/Admin/lib/SharedLibrary.dll b/Admin/lib/SharedLibrary.dll index 46224361112e6a0a6a4edd6712d44f86edb3c988..df9a7c6887ceed7784ac28412c6055aa3b524971 100644 GIT binary patch literal 110592 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 GetChatHistoryFromQuery(DataTable dt) + { + return dt.Select().Select(q => new ChatHistory() + { + ClientID = Convert.ToInt32(q["ClientID"].ToString()), + Message = q["Message"].ToString(), + ServerID = Convert.ToInt32(q["ServerID"].ToString()), + TimeSent = DateTime.Parse(q["TimeSent"].ToString()) + }) + .ToList(); + } + + public List GetChatForPlayer(int clientID) + { + var queryResult = GetDataTable("CHATHISTORY", new KeyValuePair("ClientID", clientID)); + return GetChatHistoryFromQuery(queryResult); + } + + public List GetChatForServer(int serverID) + { + var queryResult = GetDataTable("CHATHISTORY", new KeyValuePair("ServerID", serverID)); + return GetChatHistoryFromQuery(queryResult); + } + + public void AddChatHistory(int clientID, int serverID, string message) + { + var chat = new Dictionary() + { + { "ClientID", clientID }, + { "ServerID", serverID }, + { "Message", message}, + { "TimeSent", DateTime.UtcNow } + }; + + Insert("CHATHISTORY", chat); + + message.Split(' ').Where(word => word.Length >= 3).Any(word => + { + word = word.ToLower(); + Insert("WORDSTATS", new Dictionary() { { "Word", word } }, true); + // shush :^) + ExecuteNonQuery($"UPDATE WORDSTATS SET Count = Count + 1 WHERE Word='{word.CleanChars()}'"); + return true; + } + ); + } + + public KeyValuePair[] GetWords() + { + var result = GetDataTable("SELECT * FROM WORDSTATS ORDER BY Count desc LIMIT 100"); + return result.Select().Select(w => new KeyValuePair(w["Word"].ToString(), Convert.ToInt32(w["Count"].ToString()))).ToArray(); + } + } +} diff --git a/Plugins/SimpleStats/Chat/ChatHistory.cs b/Plugins/SimpleStats/Chat/ChatHistory.cs new file mode 100644 index 000000000..46563b003 --- /dev/null +++ b/Plugins/SimpleStats/Chat/ChatHistory.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StatsPlugin +{ + public class ChatHistory + { + public int ClientID { get; set; } + public string Message { get; set; } + public int ServerID { get; set; } + public DateTime TimeSent { get; set; } + } +} diff --git a/Plugins/SimpleStats/Chat/ChatHistoryPage.cs b/Plugins/SimpleStats/Chat/ChatHistoryPage.cs new file mode 100644 index 000000000..1d44ee0c6 --- /dev/null +++ b/Plugins/SimpleStats/Chat/ChatHistoryPage.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using SharedLibrary; +using System.Collections.Specialized; + +namespace StatsPlugin.Chat +{ + public class ChatPage : HTMLPage + { + public ChatPage() : base(false) { } + + public override string GetContent(NameValueCollection querySet, IDictionary headers) + { + StringBuilder S = new StringBuilder(); + S.Append(LoadHeader()); + + IFile chat = new IFile("webfront\\chat.html"); + S.Append(chat.GetText()); + chat.Close(); + + S.Append(LoadFooter()); + + return S.ToString(); + } + + public override string GetName() => "Chat Stats"; + public override string GetPath() => "/chat"; + } + + public class WordCloudJSON : IPage + { + public string GetName() => "Word Cloud JSON"; + public string GetPath() => "/_words"; + public string GetContentType() => "application/json"; + public bool Visible() => false; + + public HttpResponse GetPage(NameValueCollection querySet, IDictionary headers) + { + + HttpResponse resp = new HttpResponse() + { + contentType = GetContentType(), + content = Stats.ChatDB.GetWords().Select(w => new + { + Word = w.Key, + Count = w.Value + }) + .OrderByDescending(x => x.Count) + .ToArray(), + + additionalHeaders = new Dictionary() + }; + + return resp; + } + } + + public class ClientChatJSON : IPage + { + public string GetName() => "Client Chat JSON"; + public string GetPath() => "/_clientchat"; + public string GetContentType() => "application/json"; + public bool Visible() => false; + + public HttpResponse GetPage(NameValueCollection querySet, IDictionary headers) + { + + HttpResponse resp = new HttpResponse() + { + contentType = GetContentType(), + content = Stats.ChatDB.GetChatForPlayer(Convert.ToInt32(querySet["clientid"])).ToArray(), + additionalHeaders = new Dictionary() + }; + + return resp; + } + } +} diff --git a/Plugins/SimpleStats/Plugin.cs b/Plugins/SimpleStats/Plugin.cs index 243fb5085..d454ffb8b 100644 --- a/Plugins/SimpleStats/Plugin.cs +++ b/Plugins/SimpleStats/Plugin.cs @@ -99,6 +99,7 @@ namespace StatsPlugin public static SharedLibrary.Interfaces.IManager ManagerInstance; public static int MAX_KILLEVENTS = 1000; public static Dictionary ServerStats { get; private set; } + public static ChatDatabase ChatDB { get; private set; } public class ServerStatInfo { @@ -197,10 +198,15 @@ namespace StatsPlugin WebService.PageList.Add(new StatsPage()); WebService.PageList.Add(new KillStatsJSON()); + WebService.PageList.Add(new Chat.WordCloudJSON()); + WebService.PageList.Add(new Chat.ClientChatJSON()); + WebService.PageList.Add(new Chat.ChatPage()); ManagerInstance.GetMessageTokens().Add(new MessageToken("TOTALKILLS", GetTotalKills)); ManagerInstance.GetMessageTokens().Add(new MessageToken("TOTALPLAYTIME", GetTotalPlaytime)); + ChatDB = new ChatDatabase("Database/ChatHistory.rm"); + try { var minimapConfig = MinimapConfig.Read("Config/minimaps.cfg"); @@ -354,6 +360,11 @@ namespace StatsPlugin await Victim.Tell(MessageOnStreak(curServer.killStreaks[Victim.ClientID], curServer.deathStreaks[Victim.ClientID])); } + + if (E.Type == Event.GType.Say) + { + ChatDB.AddChatHistory(E.Origin.DatabaseID, E.Owner.GetPort(), E.Data); + } } public static string GetTotalKills() diff --git a/Plugins/SimpleStats/StatsPlugin.csproj b/Plugins/SimpleStats/StatsPlugin.csproj index ef206e123..2d884f400 100644 --- a/Plugins/SimpleStats/StatsPlugin.csproj +++ b/Plugins/SimpleStats/StatsPlugin.csproj @@ -69,6 +69,9 @@ + + + diff --git a/Plugins/Tests/Plugin.cs b/Plugins/Tests/Plugin.cs index 0d72b4151..3327dbc0b 100644 --- a/Plugins/Tests/Plugin.cs +++ b/Plugins/Tests/Plugin.cs @@ -65,13 +65,17 @@ namespace IW4MAdmin.Plugins await S.RemovePlayer(index); await S.AddPlayer(p); + Interval = DateTime.Now; if (S.ClientNum > 0) { + //"K;26d2f66b95184934;1;allies;egor;5c56fef676b3818d;0;axis;1_din;m21_heartbeat_mp;98;MOD_RIFLE_BULLET;torso_lower"; var victimPlayer = S.Players.Where(pl => pl != null).ToList()[rand.Next(0, S.ClientNum - 1)]; var attackerPlayer = S.Players.Where(pl => pl != null).ToList()[rand.Next(0, S.ClientNum - 1)]; + await S.ExecuteEvent(new Event(Event.GType.Say, $"test_{attackerPlayer.ClientID}", victimPlayer, attackerPlayer, S)); + string[] eventLine = null; for (int i = 0; i < 1; i++) diff --git a/SharedLibrary/Database.cs b/SharedLibrary/Database.cs index 6ae9b9f03..2eca9f9b5 100644 --- a/SharedLibrary/Database.cs +++ b/SharedLibrary/Database.cs @@ -22,7 +22,7 @@ namespace SharedLibrary abstract public void Init(); - protected bool Insert(String tableName, Dictionary data) + protected bool Insert(String tableName, Dictionary data, bool ignore = false) { string names = ""; string parameters = ""; @@ -36,10 +36,12 @@ namespace SharedLibrary var Con = GetNewConnection(); + string ignoreCmd = ignore ? " OR IGNORE " : " "; + SQLiteCommand insertcmd = new SQLiteCommand() { Connection = Con, - CommandText = String.Format("INSERT INTO `{0}` ({1}) VALUES ({2});", tableName, names, parameters) + CommandText = String.Format("INSERT{0}INTO `{1}` ({2}) VALUES ({3});", ignoreCmd, tableName, names, parameters) }; foreach (string key in data.Keys) {