using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace MinecraftClient.ChatBots { /// /// This bot saves the received messages in a text file. /// public class ChatLog : ChatBot { public enum MessageFilter { AllText, AllMessages, OnlyChat, OnlyWhispers }; private bool dateandtime; private bool saveOther = true; private bool saveChat = true; private bool savePrivate = true; private string logfile; /// /// This bot saves the messages received in the specified file, with some filters and date/time tagging. /// /// The file to save the log in /// The kind of messages to save /// Add a date and time before each message public ChatLog(string file, MessageFilter filter, bool AddDateAndTime) { dateandtime = AddDateAndTime; logfile = file; switch (filter) { case MessageFilter.AllText: saveOther = true; savePrivate = true; saveChat = true; break; case MessageFilter.AllMessages: saveOther = false; savePrivate = true; saveChat = true; break; case MessageFilter.OnlyChat: saveOther = false; savePrivate = false; saveChat = true; break; case MessageFilter.OnlyWhispers: saveOther = false; savePrivate = true; saveChat = false; break; } } public static MessageFilter str2filter(string filtername) { switch (filtername.ToLower()) { case "all": return MessageFilter.AllText; case "messages": return MessageFilter.AllMessages; case "chat": return MessageFilter.OnlyChat; case "private": return MessageFilter.OnlyWhispers; default: return MessageFilter.AllText; } } public override void GetText(string text) { text = getVerbatim(text); string sender = ""; string message = ""; if (saveChat && isChatMessage(text, ref message, ref sender)) { save("Chat " + sender + ": " + message); } else if (savePrivate && isPrivateMessage(text, ref message, ref sender)) { save("Private " + sender + ": " + message); } else if (saveOther) { save("Other: " + text); } } private void save(string tosave) { if (dateandtime) tosave = getTimestamp() + ' ' + tosave; string directory = Path.GetDirectoryName(logfile); if (!String.IsNullOrEmpty(directory) && !Directory.Exists(directory)) Directory.CreateDirectory(directory); FileStream stream = new FileStream(logfile, FileMode.OpenOrCreate); StreamWriter writer = new StreamWriter(stream); stream.Seek(0, SeekOrigin.End); writer.WriteLine(tosave); writer.Dispose(); stream.Close(); } } }