2014-05-31 01:59:03 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
2014-06-16 14:23:56 +02:00
|
|
|
|
using System.IO;
|
2014-05-31 01:59:03 +02:00
|
|
|
|
|
|
|
|
|
|
namespace MinecraftClient.ChatBots
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// This bot saves the received messages in a text file.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
|
|
|
|
public class ChatLog : ChatBot
|
|
|
|
|
|
{
|
2020-05-03 10:55:55 -05:00
|
|
|
|
public enum MessageFilter { AllText, AllMessages, OnlyChat, OnlyWhispers, OnlyInternalCommands };
|
2014-05-31 01:59:03 +02:00
|
|
|
|
private bool dateandtime;
|
|
|
|
|
|
private bool saveOther = true;
|
|
|
|
|
|
private bool saveChat = true;
|
|
|
|
|
|
private bool savePrivate = true;
|
2020-05-01 09:37:15 -05:00
|
|
|
|
private bool saveInternal = true;
|
2014-05-31 01:59:03 +02:00
|
|
|
|
private string logfile;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// This bot saves the messages received in the specified file, with some filters and date/time tagging.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="file">The file to save the log in</param>
|
|
|
|
|
|
/// <param name="filter">The kind of messages to save</param>
|
|
|
|
|
|
/// <param name="AddDateAndTime">Add a date and time before each message</param>
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
2020-05-03 10:55:55 -05:00
|
|
|
|
case MessageFilter.OnlyInternalCommands:
|
2020-05-01 09:37:15 -05:00
|
|
|
|
saveOther = false;
|
|
|
|
|
|
savePrivate = false;
|
|
|
|
|
|
saveChat = false;
|
|
|
|
|
|
saveInternal = true;
|
|
|
|
|
|
break;
|
2014-05-31 01:59:03 +02:00
|
|
|
|
}
|
2016-05-15 14:37:06 +02:00
|
|
|
|
if (String.IsNullOrEmpty(file) || file.IndexOfAny(Path.GetInvalidPathChars()) >= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
LogToConsole("Path '" + file + "' contains invalid characters.");
|
|
|
|
|
|
UnloadBot();
|
|
|
|
|
|
}
|
2014-05-31 01:59:03 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
2020-05-03 10:55:55 -05:00
|
|
|
|
case "internal": return MessageFilter.OnlyInternalCommands;
|
2014-05-31 01:59:03 +02:00
|
|
|
|
default: return MessageFilter.AllText;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void GetText(string text)
|
|
|
|
|
|
{
|
2015-06-20 22:58:18 +02:00
|
|
|
|
text = GetVerbatim(text);
|
2014-05-31 01:59:03 +02:00
|
|
|
|
string sender = "";
|
|
|
|
|
|
string message = "";
|
|
|
|
|
|
|
2015-06-20 22:58:18 +02:00
|
|
|
|
if (saveChat && IsChatMessage(text, ref message, ref sender))
|
2014-05-31 01:59:03 +02:00
|
|
|
|
{
|
|
|
|
|
|
save("Chat " + sender + ": " + message);
|
|
|
|
|
|
}
|
2015-06-20 22:58:18 +02:00
|
|
|
|
else if (savePrivate && IsPrivateMessage(text, ref message, ref sender))
|
2014-05-31 01:59:03 +02:00
|
|
|
|
{
|
|
|
|
|
|
save("Private " + sender + ": " + message);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (saveOther)
|
|
|
|
|
|
{
|
|
|
|
|
|
save("Other: " + text);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-05-03 11:18:18 -05:00
|
|
|
|
public override void OnInternalCommand(string commandName,string commandParams, string result)
|
2020-05-01 09:37:15 -05:00
|
|
|
|
{
|
|
|
|
|
|
if (saveInternal)
|
|
|
|
|
|
{
|
2020-05-03 11:18:18 -05:00
|
|
|
|
save(string.Format("Internal {0}({1}): {2}", commandName, commandParams, result));
|
2020-05-01 09:37:15 -05:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-05-31 01:59:03 +02:00
|
|
|
|
private void save(string tosave)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (dateandtime)
|
2015-06-20 22:58:18 +02:00
|
|
|
|
tosave = GetTimestamp() + ' ' + tosave;
|
2014-05-31 01:59:03 +02:00
|
|
|
|
|
2015-02-26 12:19:35 +01:00
|
|
|
|
string directory = Path.GetDirectoryName(logfile);
|
|
|
|
|
|
if (!String.IsNullOrEmpty(directory) && !Directory.Exists(directory))
|
|
|
|
|
|
Directory.CreateDirectory(directory);
|
2014-06-16 14:23:56 +02:00
|
|
|
|
FileStream stream = new FileStream(logfile, FileMode.OpenOrCreate);
|
|
|
|
|
|
StreamWriter writer = new StreamWriter(stream);
|
|
|
|
|
|
stream.Seek(0, SeekOrigin.End);
|
2014-05-31 01:59:03 +02:00
|
|
|
|
writer.WriteLine(tosave);
|
|
|
|
|
|
writer.Dispose();
|
|
|
|
|
|
stream.Close();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|