Add !error command which checks NtStatus, Winerror and hResult.
Added: trunk/irc/TechBot/TechBot.Library/ErrorCommand.cs
Modified: trunk/irc/TechBot/TechBot.Library/HresultCommand.cs
Modified: trunk/irc/TechBot/TechBot.Library/NtStatusCommand.cs
Modified: trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx
Modified: trunk/irc/TechBot/TechBot.Library/TechBotService.cs
Modified: trunk/irc/TechBot/TechBot.Library/WinerrorCommand.cs

Added: trunk/irc/TechBot/TechBot.Library/ErrorCommand.cs
--- trunk/irc/TechBot/TechBot.Library/ErrorCommand.cs	2006-01-05 16:35:08 UTC (rev 20584)
+++ trunk/irc/TechBot/TechBot.Library/ErrorCommand.cs	2006-01-05 17:52:39 UTC (rev 20585)
@@ -0,0 +1,91 @@
+using System;
+using System.Xml;
+
+namespace TechBot.Library
+{
+	public class ErrorCommand : BaseCommand, ICommand
+	{
+		private IServiceOutput serviceOutput;
+		private NtStatusCommand ntStatus;
+		private WinerrorCommand winerror;
+		private HresultCommand hresult;
+
+		public ErrorCommand(IServiceOutput serviceOutput, string ntstatusXml,
+									string winerrorXml, string hresultXml)
+		{
+			this.serviceOutput = serviceOutput;
+			this.ntStatus = new NtStatusCommand(serviceOutput,
+											 ntstatusXml);
+			this.winerror = new WinerrorCommand(serviceOutput,
+											winerrorXml);
+			this.hresult = new HresultCommand(serviceOutput,
+											hresultXml);
+		}
+		
+		public bool CanHandle(string commandName)
+		{
+			return CanHandle(commandName,
+			                 new string[] { "error" });
+		}
+
+		public void Handle(MessageContext context,
+		                   string commandName,
+		                   string parameters)
+		{
+			string errorText = parameters;
+			if (errorText.Equals(String.Empty))
+			{
+				serviceOutput.WriteLine(context,
+				                        "Please provide an Error Code.");
+				return;
+			}
+
+			NumberParser np = new NumberParser();
+			long error = np.Parse(errorText);
+			if (np.Error)
+			{
+				serviceOutput.WriteLine(context,
+				                        String.Format("{0} is not a valid Error Code.",
+													  errorText));
+				return;
+			}
+
+			string description = null;
+			if (winerror.GetWinerrorDescription(error) != null)
+			{
+				description = winerror.GetWinerrorDescription(error);
+				serviceOutput.WriteLine(context,
+				                        String.Format("{0} is {1}.",
+													  error,
+				                                      description));
+			}
+			if (ntStatus.GetNtstatusDescription(error) != null)
+			{
+				description = ntStatus.GetNtstatusDescription(error);
+				serviceOutput.WriteLine(context,
+										String.Format("{0} is {1}.",
+													  errorText,
+													  description));
+			}
+			if (hresult.GetHresultDescription(error) != null)
+			{
+				description = hresult.GetHresultDescription(error);
+				serviceOutput.WriteLine(context,
+										String.Format("{0} is {1}.",
+													  errorText,
+													  description));
+			}
+			if(description == null)
+			{
+				serviceOutput.WriteLine(context,
+										String.Format("I don't know about Error Code {0}.",
+													  errorText));
+			}
+		}
+		
+		public string Help()
+		{
+			return "!error <value>";
+		}
+	}
+}

Modified: trunk/irc/TechBot/TechBot.Library/HresultCommand.cs
--- trunk/irc/TechBot/TechBot.Library/HresultCommand.cs	2006-01-05 16:35:08 UTC (rev 20584)
+++ trunk/irc/TechBot/TechBot.Library/HresultCommand.cs	2006-01-05 17:52:39 UTC (rev 20585)
@@ -67,7 +67,7 @@
 			return "!hresult <value>";
 		}
 		
-		private string GetHresultDescription(long hresult)
+		public string GetHresultDescription(long hresult)
 		{
 			XmlElement root = hresultXmlDocument.DocumentElement;
 			XmlNode node = root.SelectSingleNode(String.Format("Hresult[@value='{0}']",

Modified: trunk/irc/TechBot/TechBot.Library/NtStatusCommand.cs
--- trunk/irc/TechBot/TechBot.Library/NtStatusCommand.cs	2006-01-05 16:35:08 UTC (rev 20584)
+++ trunk/irc/TechBot/TechBot.Library/NtStatusCommand.cs	2006-01-05 17:52:39 UTC (rev 20585)
@@ -67,7 +67,7 @@
 			return "!ntstatus <value>";
 		}
 		
-		private string GetNtstatusDescription(long ntstatus)
+		public string GetNtstatusDescription(long ntstatus)
 		{
 			XmlElement root = ntstatusXmlDocument.DocumentElement;
 			XmlNode node = root.SelectSingleNode(String.Format("Ntstatus[@value='{0}']",

Modified: trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx
--- trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx	2006-01-05 16:35:08 UTC (rev 20584)
+++ trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx	2006-01-05 17:52:39 UTC (rev 20585)
@@ -12,6 +12,7 @@
     <File name=".\NumberParser.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name=".\HresultCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name=".\WinerrorCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
+    <File name=".\ErrorCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name=".\SvnCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name=".\BugCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name=".\WmCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
@@ -39,4 +40,4 @@
       <Output directory="..\bin\Release" assembly="TechBot.Library" executeScript="" executeBeforeBuild="" executeAfterBuild="" executeBeforeBuildArguments="" executeAfterBuildArguments="" />
     </Configuration>
   </Configurations>
-</Project>
\ No newline at end of file
+</Project>

Modified: trunk/irc/TechBot/TechBot.Library/TechBotService.cs
--- trunk/irc/TechBot/TechBot.Library/TechBotService.cs	2006-01-05 16:35:08 UTC (rev 20584)
+++ trunk/irc/TechBot/TechBot.Library/TechBotService.cs	2006-01-05 17:52:39 UTC (rev 20585)
@@ -54,6 +54,10 @@
 			                                 winerrorXml));
 			commands.Add(new HresultCommand(serviceOutput,
 			                                hresultXml));
+			commands.Add(new ErrorCommand(serviceOutput,
+											ntstatusXml,
+											winerrorXml,
+											hresultXml));
 			commands.Add(new WmCommand(serviceOutput,
 			                           wmXml));
 			commands.Add(new SvnCommand(serviceOutput,

Modified: trunk/irc/TechBot/TechBot.Library/WinerrorCommand.cs
--- trunk/irc/TechBot/TechBot.Library/WinerrorCommand.cs	2006-01-05 16:35:08 UTC (rev 20584)
+++ trunk/irc/TechBot/TechBot.Library/WinerrorCommand.cs	2006-01-05 17:52:39 UTC (rev 20585)
@@ -67,7 +67,7 @@
 			return "!winerror <value>";
 		}
 		
-		private string GetWinerrorDescription(long winerror)
+		public string GetWinerrorDescription(long winerror)
 		{
 			XmlElement root = winerrorXmlDocument.DocumentElement;
 			XmlNode node = root.SelectSingleNode(String.Format("Winerror[@value='{0}']",