diff --git a/MinecraftClient/config/Modules/Mail.cs b/MinecraftClient/config/Modules/Mail.cs index d1547d0a..093f47ff 100644 --- a/MinecraftClient/config/Modules/Mail.cs +++ b/MinecraftClient/config/Modules/Mail.cs @@ -1,17 +1,13 @@ -using System; -using System.Collections.Generic; +using System; using System.Linq; using System.Data; -using System.Data.SqlClient; -using System.Text; -using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace MinecraftClient.ChatBots { - /// - /// All saved options. + /// + /// All saved options. /// [Serializable] class Options @@ -24,29 +20,27 @@ namespace MinecraftClient.ChatBots public int maxSavedMails_Player { get; set; } public int daysTosaveMsg { get; set; } public bool debug_msg { get; set; } - public string[] moderator = new string[1]; + public string[] moderator = new string[0]; public DateTime lastReset { get; set; } public int timevar_100ms { get; set; } public Options() { - path_mail = Path.GetFullPath(@"\mails.txt"); // Path where the mail file is saved. You can also apply a normal path like @"C:\Users\SampleUser\Desktop" - path_setting = Path.GetFullPath(@"\options.txt"); // Path where the settings are saved - botname = "Chatie"; // Ingamename of the bot - moderator[0] = "daenges"; // Enter your own MC name. !!! CAUTION !!! Who you give mod previliges! - interval_sendmail = 100; // Intervall atempting to send mails / do a respawn [in 100 ms] -> eg. 100 * 100ms = 10 sec - maxSavedMails = 2000; // How many mails you want to safe - maxSavedMails_Player = 3; // How many mails can be sent per player - daysTosaveMsg = 30; // After how many days the message should get deleted - debug_msg = true; // Disable debug Messages for a cleaner console + path_mail = AppDomain.CurrentDomain.BaseDirectory + "mails.txt"; // Path where the mail file is saved. You can also apply a normal path like @"C:\Users\SampleUser\Desktop" + path_setting = AppDomain.CurrentDomain.BaseDirectory + "options.txt"; // Path where the settings are saved + interval_sendmail = 100; // Intervall atempting to send mails / do a respawn [in 100 ms] -> eg. 100 * 100ms = 10 sec + maxSavedMails = 2000; // How many mails you want to safe + maxSavedMails_Player = 3; // How many mails can be sent per player + daysTosaveMsg = 30; // After how many days the message should get deleted + debug_msg = true; // Disable debug Messages for a cleaner console timevar_100ms = 0; lastReset = DateTime.UtcNow; } } - /// - /// The Way every mail is safed. + /// + /// The Way every mail is safed. /// [Serializable] class Message @@ -103,8 +97,8 @@ namespace MinecraftClient.ChatBots Message[] logged_msg; Options options; - /// - /// Sets the message an option cache + /// + /// Sets the message an option cache /// public override void Initialize() { @@ -113,8 +107,8 @@ namespace MinecraftClient.ChatBots } - /// - /// Standard settings for the bot. + /// + /// Standard settings for the bot. /// public override void AfterGameJoined() { @@ -134,17 +128,18 @@ namespace MinecraftClient.ChatBots deleteOldMails(); options.lastReset = DateTime.UtcNow; + options.botname = GetUsername(); } - /// - /// Timer for autorespawn and the message deliverer + /// + /// Timer for autorespawn and the message deliverer /// public override void Update() { if (options.timevar_100ms == options.interval_sendmail) { DeliverMail(); - PerformInternalCommand("/respawn"); + PerformInternalCommand("respawn"); if ((DateTime.Now - options.lastReset).TotalDays > options.daysTosaveMsg) { @@ -157,30 +152,29 @@ namespace MinecraftClient.ChatBots options.timevar_100ms++; } - /// - /// Listening for Messages. + /// + /// Listening for Messages. /// public override void GetText(string text) { string message = ""; string username = ""; - - text = GetVerbatim(text); - - - if (IsPrivateMessage(text, ref message, ref username) && username.ToLower() != options.botname) + if (IsPrivateMessage(text, ref message, ref username)) { - message = message.ToLower(); - cmd_reader(message, username, isMessageFromMod(username)); + if(username.ToLower() != options.botname.ToLower()) + { + message = message.ToLower(); + cmd_reader(message, username, isMessageFromMod(username)); + } } } - /// - /// Interprets command. + /// + /// Interprets command. /// public void cmd_reader(string message, string sender, bool isMod) { @@ -209,10 +203,14 @@ namespace MinecraftClient.ChatBots } } - if (sender != string.Empty && destination != string.Empty && content != string.Empty) + if (IsValidName(sender) && IsValidName(destination) && content != string.Empty) { AddMail(sender, destination, content); } + else + { + SendPrivateMessage(sender, "Something went wrong!"); + } } else { @@ -221,122 +219,296 @@ namespace MinecraftClient.ChatBots clearLogged_msg(); } - if (isMod) + if (isMod || options.moderator.Length == 0) // Delete the safe file of the bot to reset all mods || 2. otion to get the owner as a moderator. { - - // These commands can be exploited easily and may cause huge damage. - - - if (message.Contains("getmails")) - { - if (options.debug_msg) - { - LogToConsole("Listing all Messages. \n Performed by: " + sender); - } - GetMailsFromFile(); - foreach (Message m in logged_msg) - { - LogToConsole(m.GetSender() + " " + m.GetDestination() + " " + m.GetContent() + " " + Convert.ToString(m.GetTimeStamp())); - } - - clearLogged_msg(); - } - - /* - // Only uncomment for testing reasons - - if (message.Contains("clearmails")) - { - if (debug_msg) - { - LogToConsole("Clearing Messages."); - } - clearSavedMails(); - } - */ - - - - if (message.Contains("respawn")) - { - if (options.debug_msg) - { - LogToConsole("Respawning! \n Performed by: " + sender); - } - PerformInternalCommand("/respawn"); - } - - if (message.Contains("deliver")) - { - if (options.debug_msg) - { - LogToConsole("Sending Mails! \n Performed by: " + sender); - } - DeliverMail(); - } - - if (message.Contains("reconnect")) - { - if (options.debug_msg) - { - LogToConsole("Reconnecting! \n Performed by: " + sender); - } - ReconnectToTheServer(); - } - - if (message.Contains("addmod")) - { - string name = ""; - - for (int i = message.IndexOf("addMod") + 7; i < message.Length; i++) - { - if (message[i] != Convert.ToChar(" ")) - { - name += message[i]; - } - else - { - break; - } - } - - addMod(name); - - if (options.debug_msg) - { - LogToConsole("Added " + name + " as moderator! \n Performed by: " + sender); - } - } - - if (message.Contains("removemod")) - { - string name = ""; - - - for (int i = message.IndexOf("addMod") + 7; i < message.Length; i++) - { - if (message[i] != Convert.ToChar(" ")) - { - name += message[i]; - } - else - { - break; - } - } - - removeMod(name); - - if (options.debug_msg) - { - LogToConsole("Removed " + name + " as moderator! \n Performed by: " + sender); - } - } + mod_Commands(message, sender); } } - /// - /// Clear the safe File. + private void mod_Commands(string message, string sender) + { + + + // These commands can be exploited easily and may cause huge damage. + + + if (message.Contains("getmails")) + { + if (options.debug_msg) + { + LogToConsole("Listing all Messages. \n Performed by: " + sender); + } + GetMailsFromFile(); + foreach (Message m in logged_msg) + { + LogToConsole(m.GetSender() + " " + m.GetDestination() + " " + m.GetContent() + " " + Convert.ToString(m.GetTimeStamp())); + } + + clearLogged_msg(); + } + + /* + // Only uncomment for testing reasons + + if (message.Contains("clearmails")) + { + if (debug_msg) + { + LogToConsole("Clearing Messages."); + } + clearSavedMails(); + } + */ + + + + if (message.Contains("respawn")) + { + if (options.debug_msg) + { + LogToConsole("Respawning! \n Performed by: " + sender); + } + PerformInternalCommand("respawn"); + } + + if (message.Contains("deliver")) + { + if (options.debug_msg) + { + LogToConsole("Sending Mails! \n Performed by: " + sender); + } + DeliverMail(); + } + + if (message.Contains("reconnect")) + { + if (options.debug_msg) + { + LogToConsole("Reconnecting! \n Performed by: " + sender); + } + SaveMailsToFile(); + SaveOptionsToFile(); + ReconnectToTheServer(); + } + + if (message.Contains("deleteoldmails")) + { + if (options.debug_msg) + { + LogToConsole("Deleting old mails! \n Performed by: " + sender); + } + deleteOldMails(); + SaveMailsToFile(); + } + + if (message.Contains("addmod")) + { + string name = ""; + + for (int i = message.IndexOf("addMod") + 7; i < message.Length; i++) + { + if (message[i] != Convert.ToChar(" ")) + { + name += message[i]; + } + else + { + break; + } + } + + addMod(name); + SendPrivateMessage(sender, name + "is now Moderator."); + SaveOptionsToFile(); + + if (options.debug_msg) + { + LogToConsole("Added " + name + " as moderator! \n Performed by: " + sender); + } + } + + if (message.Contains("removemod")) + { + string name = ""; + + + for (int i = message.IndexOf("addMod") + 7; i < message.Length; i++) + { + if (message[i] != Convert.ToChar(" ")) + { + name += message[i]; + } + else + { + break; + } + } + + removeMod(name); + SendPrivateMessage(sender, name + "is no Moderator anymmore."); + SaveOptionsToFile(); + + if (options.debug_msg) + { + LogToConsole("Removed " + name + " as moderator! \n Performed by: " + sender); + } + } + + ////////////////////////////// + // Change options through mc chat + ////////////////////////////// + + if (message.Contains("toggledebug")) + { + if (options.debug_msg) + { + options.debug_msg = false; + if (options.debug_msg) + { + LogToConsole(sender + ": Turned Console Log off!"); + } + } + else + { + options.debug_msg = true; + if (options.debug_msg) + { + LogToConsole(sender + ": Turned Console Log off!"); + } + } + SendPrivateMessage(sender, "Settings changed! Rejoin to apply!"); + SaveOptionsToFile(); + } + + if (message.Contains("daystosavemsg")) + { + options.daysTosaveMsg = getIntInCommand(message, "daystosavemsg"); + SaveOptionsToFile(); + SendPrivateMessage(sender, "Settings changed! Rejoin to apply!"); + + if (options.debug_msg) + { + LogToConsole(sender + " changed daystosavemsg to: " + Convert.ToString(options.daysTosaveMsg)); + } + } + + if (message.Contains("intervalsendmail")) + { + options.interval_sendmail = getIntInCommand(message, "intervalsendmail"); + SaveOptionsToFile(); + SendPrivateMessage(sender, "Settings changed! Rejoin to apply!"); + + if (options.debug_msg) + { + LogToConsole(sender + " changed intervalsendmail to: " + Convert.ToString(options.interval_sendmail)); + } + } + + if (message.Contains("maxsavedmails")) + { + options.maxSavedMails = getIntInCommand(message, "maxsavedmails"); + SaveOptionsToFile(); + SendPrivateMessage(sender, "Settings changed! Rejoin to apply!"); + + if (options.debug_msg) + { + LogToConsole(sender + " changed maxsavedmails to: " + Convert.ToString(options.maxSavedMails)); + } + } + + if (message.Contains("maxmailsperplayer")) + { + options.maxSavedMails_Player = getIntInCommand(message, "maxmailsperplayer"); + SaveOptionsToFile(); + SendPrivateMessage(sender, "Settings changed! Rejoin to apply!"); + + if (options.debug_msg) + { + LogToConsole(sender + " changed maxmailsperplayer to: " + Convert.ToString(options.maxSavedMails_Player)); + } + } + + if (message.Contains("changemailpath")) + { + string path = ""; + for (int i = message.IndexOf("changemailpath") + "changemailpath".Length + 1; i < message.Length; i++) + { + if (message[i] != Convert.ToChar(" ")) + { + path += message[i]; + } + else + { + break; + } + } + options.path_mail = AppDomain.CurrentDomain.BaseDirectory + path; + SendPrivateMessage(sender, "Settings changed!"); + SaveOptionsToFile(); + GetOptionsFromFile(); + + if (options.debug_msg) + { + LogToConsole(sender + " changed mailpath to: " + Convert.ToString(options.path_mail)); + } + + } + + if (message.Contains("changesettingspath")) + { + string path = ""; + for (int i = message.IndexOf("changesettingspath") + "changesettingspath".Length + 1; i < message.Length; i++) + { + if (message[i] != Convert.ToChar(" ")) + { + path += message[i]; + } + else + { + break; + } + } + options.path_setting = AppDomain.CurrentDomain.BaseDirectory + path; + SendPrivateMessage(sender, "Settings changed!"); + SaveOptionsToFile(); + GetOptionsFromFile(); + + if(options.debug_msg) + { + LogToConsole(sender + " changed settingsspath to: " + Convert.ToString(options.path_setting)); + } + + } + + if (message.Contains("listsettings")) + { + SendPrivateMessage(sender, "debugmsg: " + Convert.ToString(options.debug_msg) + "; daystosavemsg: " + Convert.ToString(options.daysTosaveMsg) + "; intervalsendmail: " + Convert.ToString(options.interval_sendmail) + "; maxsavedmails: " + Convert.ToString(options.maxSavedMails) + "; maxsavedmails_player: " + Convert.ToString(options.maxSavedMails_Player + "; messagepath: " + options.path_mail + "; settingspath: " + options.path_setting)); + } + } + + + /// + /// Get the number after a certain word in the message. + /// + public int getIntInCommand(string message, string searched) + { + string num = ""; + for (int i = message.IndexOf(searched) + searched.Length + 1; i < message.Length; i++) + { + if (message[i] != Convert.ToChar(" ")) + { + num += message[i]; + } + else + { + return Int32.Parse(num); + } + } + return Int32.Parse(num); + } + + /// + /// Clear the safe File. /// public void clearSavedMails() { @@ -344,16 +516,16 @@ namespace MinecraftClient.ChatBots SaveMailsToFile(); } - /// - /// Clear the messages in ram. + /// + /// Clear the messages in ram. /// public void clearLogged_msg() { logged_msg = new Message[0]; } - /// - /// Add a player who can moderate the bot. + /// + /// Add a player who can moderate the bot. /// public void addMod(string name) { @@ -367,8 +539,8 @@ namespace MinecraftClient.ChatBots options.moderator[options.moderator.Length - 1] = name; } - /// - /// Remove a player from the moderator list. + /// + /// Remove a player from the moderator list. /// public void removeMod(string name) { @@ -383,12 +555,11 @@ namespace MinecraftClient.ChatBots options.moderator = options.moderator.Where(x => !string.IsNullOrEmpty(x)).ToArray(); } - /// - /// Serialize mails to binary file. + /// + /// Serialize mails to binary file. /// public void SaveMailsToFile() { - BinaryFormatter formatter = new BinaryFormatter(); FileStream stream = new FileStream(options.path_mail, FileMode.Create, FileAccess.Write); @@ -397,16 +568,15 @@ namespace MinecraftClient.ChatBots if (options.debug_msg) { - LogToConsole("Saved mails to File! \n" + "Location: " + options.path_mail + "\n Time: " + Convert.ToString(DateTime.UtcNow)); + LogToConsole("Saved mails to File!" + " Location: " + options.path_mail + " Time: " + Convert.ToString(DateTime.UtcNow)); } } - /// - /// Get mails from save file. + /// + /// Get mails from save file. /// public void GetMailsFromFile() { - BinaryFormatter formatter = new BinaryFormatter(); FileStream stream = new FileStream(options.path_mail, FileMode.Open, FileAccess.Read); @@ -415,16 +585,15 @@ namespace MinecraftClient.ChatBots if (options.debug_msg) { - LogToConsole("Loaded mails from File! \n" + "Location: " + options.path_mail + "\n Time: " + Convert.ToString(DateTime.UtcNow)); + LogToConsole("Loaded mails from File!" + " Location: " + options.path_mail + " Time: " + Convert.ToString(DateTime.UtcNow)); } } - /// - /// Serialize settings to binary file. + /// + /// Serialize settings to binary file. /// public void SaveOptionsToFile() { - BinaryFormatter formatter = new BinaryFormatter(); FileStream stream = new FileStream(options.path_setting, FileMode.Create, FileAccess.Write); @@ -433,12 +602,12 @@ namespace MinecraftClient.ChatBots if (options.debug_msg) { - LogToConsole("Saved options to File! \n" + "Location: " + options.path_setting + "\n Time: " + Convert.ToString(DateTime.UtcNow)); + LogToConsole("Saved options to File! " + "Location: " + options.path_setting + " Time: " + Convert.ToString(DateTime.UtcNow)); } } - /// - /// Get settings from save file. + /// + /// Get settings from save file. /// public void GetOptionsFromFile() { @@ -451,12 +620,12 @@ namespace MinecraftClient.ChatBots if (options.debug_msg) { - LogToConsole("Loaded options from File! \n" + "Location: " + options.path_setting + "\n Time: " + Convert.ToString(DateTime.UtcNow)); + LogToConsole("Loaded options from File! " + "Location: " + options.path_setting + " Time: " + Convert.ToString(DateTime.UtcNow)); } } - /// - /// Add a message to the list. + /// + /// Add a message to the list. /// public void AddMail(string sender, string destination, string content) { @@ -476,12 +645,12 @@ namespace MinecraftClient.ChatBots SendPrivateMessage(sender, "Message saved!"); } - /// - /// Try to send all messages. + /// + /// Try to send all messages. /// public void DeliverMail() { - LogToConsole("Looking for mails to send:"); + LogToConsole("Looking for mails to send: " + DateTime.UtcNow); // Can not be disabled to indicate, that the script is still running. GetMailsFromFile(); foreach(string Player in GetOnlinePlayers()) @@ -506,8 +675,8 @@ namespace MinecraftClient.ChatBots clearLogged_msg(); } - /// - /// See how many messages of a user are saved. + /// + /// See how many messages of a user are saved. /// public int getSentMessagesByUser(string player) { @@ -523,8 +692,8 @@ namespace MinecraftClient.ChatBots return mailcount; } - /// - /// Test if the sender is in the moderator list. + /// + /// Test if the sender is in the moderator list. /// public bool isMessageFromMod(string player) { @@ -538,8 +707,8 @@ namespace MinecraftClient.ChatBots return false; } - /// - /// Deleting mails older than a month. + /// + /// Deleting mails older than a month. /// public void deleteOldMails() {