diff --git a/MinecraftClient/ChatBots/Alerts.cs b/MinecraftClient/ChatBots/Alerts.cs
index 4be3b16c..b60a39ee 100644
--- a/MinecraftClient/ChatBots/Alerts.cs
+++ b/MinecraftClient/ChatBots/Alerts.cs
@@ -2,125 +2,96 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.IO;
namespace MinecraftClient.ChatBots
{
///
/// This bot make the console beep on some specified words. Useful to detect when someone is talking to you, for example.
///
-
public class Alerts : ChatBot
{
private string[] dictionary = new string[0];
private string[] excludelist = new string[0];
- public override void Initialize()
+ ///
+ /// Import alerts from the specified file
+ ///
+ ///
+ ///
+ private static string[] FromFile(string file)
{
- if (System.IO.File.Exists(Settings.Alerts_MatchesFile))
+ if (File.Exists(file))
{
- List tmp_dictionary = new List();
- string[] file_lines = System.IO.File.ReadAllLines(Settings.Alerts_MatchesFile);
- foreach (string line in file_lines)
- if (line.Trim().Length > 0 && !tmp_dictionary.Contains(line.ToLower()))
- tmp_dictionary.Add(line.ToLower());
- dictionary = tmp_dictionary.ToArray();
+ //Read all lines from file, remove lines with no text, convert to lowercase,
+ //remove duplicate entries, convert to a string array, and return the result.
+ return File.ReadAllLines(file)
+ .Where(line => !String.IsNullOrWhiteSpace(line))
+ .Select(line => line.ToLower())
+ .Distinct().ToArray();
}
- else LogToConsole("File not found: " + Settings.Alerts_MatchesFile);
-
- if (System.IO.File.Exists(Settings.Alerts_ExcludesFile))
+ else
{
- List tmp_excludelist = new List();
- string[] file_lines = System.IO.File.ReadAllLines(Settings.Alerts_ExcludesFile);
- foreach (string line in file_lines)
- if (line.Trim().Length > 0 && !tmp_excludelist.Contains(line.Trim().ToLower()))
- tmp_excludelist.Add(line.ToLower());
- excludelist = tmp_excludelist.ToArray();
+ LogToConsole("File not found: " + Settings.Alerts_MatchesFile);
+ return new string[0];
}
- else LogToConsole("File not found : " + Settings.Alerts_ExcludesFile);
}
+ ///
+ /// Intitialize the Alerts bot
+ ///
+ public override void Initialize()
+ {
+ dictionary = FromFile(Settings.Alerts_MatchesFile);
+ excludelist = FromFile(Settings.Alerts_ExcludesFile);
+ }
+
+ ///
+ /// Process text received from the server to display alerts
+ ///
+ /// Received text
public override void GetText(string text)
{
- text = getVerbatim(text);
- string comp = text.ToLower();
- foreach (string alert in dictionary)
+ //Remove color codes and convert to lowercase
+ text = getVerbatim(text).ToLower();
+
+ //Proceed only if no exclusions are found in text
+ if (!excludelist.Any(exclusion => text.Contains(exclusion)))
{
- if (comp.Contains(alert))
+ //Show an alert for each alert item found in text, if any
+ foreach (string alert in dictionary.Where(alert => text.Contains(alert)))
{
- bool ok = true;
+ if (Settings.Alerts_Beep_Enabled)
+ Console.Beep(); //Text found !
- foreach (string exclusion in excludelist)
+ if (ConsoleIO.basicIO) //Using a GUI? Pass text as is.
+ ConsoleIO.WriteLine(text.Replace(alert, "§c" + alert + "§r"));
+
+ else //Using Consome Prompt : Print text with alert highlighted
{
- if (comp.Contains(exclusion))
+ string[] splitted = text.Split(new string[] { alert }, StringSplitOptions.None);
+
+ if (splitted.Length > 0)
{
- ok = false;
- break;
- }
- }
-
- if (ok)
- {
- if (Settings.Alerts_Beep_Enabled) { Console.Beep(); } //Text found !
-
- if (ConsoleIO.basicIO) { ConsoleIO.WriteLine(comp.Replace(alert, "§c" + alert + "§r")); }
- else
- {
-
- #region Displaying the text with the interesting part highlighted
-
Console.BackgroundColor = ConsoleColor.DarkGray;
Console.ForegroundColor = ConsoleColor.White;
+ ConsoleIO.Write(splitted[0]);
- //Will be used for text displaying
- string[] temp = comp.Split(alert.Split(','), StringSplitOptions.None);
- int p = 0;
-
- //Special case : alert in the beginning of the text
- string test = "";
- for (int i = 0; i < alert.Length; i++)
- {
- test += comp[i];
- }
- if (test == alert)
+ for (int i = 1; i < splitted.Length; i++)
{
Console.BackgroundColor = ConsoleColor.Yellow;
Console.ForegroundColor = ConsoleColor.Red;
- for (int i = 0; i < alert.Length; i++)
- {
- ConsoleIO.Write(text[p]);
- p++;
- }
- }
+ ConsoleIO.Write(alert);
- //Displaying the rest of the text
- for (int i = 0; i < temp.Length; i++)
- {
Console.BackgroundColor = ConsoleColor.DarkGray;
Console.ForegroundColor = ConsoleColor.White;
- for (int j = 0; j < temp[i].Length; j++)
- {
- ConsoleIO.Write(text[p]);
- p++;
- }
- Console.BackgroundColor = ConsoleColor.Yellow;
- Console.ForegroundColor = ConsoleColor.Red;
- try
- {
- for (int j = 0; j < alert.Length; j++)
- {
- ConsoleIO.Write(text[p]);
- p++;
- }
- }
- catch (IndexOutOfRangeException) { }
+ ConsoleIO.Write(splitted[i]);
}
- Console.BackgroundColor = ConsoleColor.Black;
- Console.ForegroundColor = ConsoleColor.Gray;
- ConsoleIO.Write('\n');
-
- #endregion
-
}
+
+ Console.BackgroundColor = ConsoleColor.Black;
+ Console.ForegroundColor = ConsoleColor.Gray;
+ ConsoleIO.Write('\n');
}
}
}