Implement "!bug <number>" command.
Modified: trunk/irc/TechBot/TechBot/App.config
Modified: trunk/irc/TechBot/TechBot/ServiceThread.cs
Modified: trunk/irc/TechBot/TechBot.Console/App.config
Modified: trunk/irc/TechBot/TechBot.Console/Main.cs
Added: trunk/irc/TechBot/TechBot.Library/BugCommand.cs
Modified: trunk/irc/TechBot/TechBot.Library/IrcService.cs
Modified: trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx
Modified: trunk/irc/TechBot/TechBot.Library/TechBotService.cs

Modified: trunk/irc/TechBot/TechBot/App.config
--- trunk/irc/TechBot/TechBot/App.config	2005-12-14 17:34:00 UTC (rev 20164)
+++ trunk/irc/TechBot/TechBot/App.config	2005-12-14 18:13:05 UTC (rev 20165)
@@ -12,5 +12,6 @@
 		<add key="HresultXml" value="C:\IRC\TechBot\hresult.xml" />
 		<add key="WmXml" value="C:\IRC\TechBot\wm.xml" />
 		<add key="SvnCommand" value="svn co svn://svn.reactos.com/trunk/reactos" />
+		<add key="BugUrl" value="www.reactos.org/bugzilla/show_bug.cgi?id={0}" />
 	</appSettings>
 </configuration>

Modified: trunk/irc/TechBot/TechBot/ServiceThread.cs
--- trunk/irc/TechBot/TechBot/ServiceThread.cs	2005-12-14 17:34:00 UTC (rev 20164)
+++ trunk/irc/TechBot/TechBot/ServiceThread.cs	2005-12-14 18:13:05 UTC (rev 20165)
@@ -18,6 +18,7 @@
 		private string WmXml;
 		private string WinerrorXml;
 		private string SvnCommand;
+		private string BugUrl;
 		private EventLog eventLog;
 		
 		public ServiceThread(EventLog eventLog)
@@ -38,6 +39,7 @@
 			WmXml = ConfigurationSettings.AppSettings["WmXml"];
 			WinerrorXml = ConfigurationSettings.AppSettings["WinerrorXml"];
 			SvnCommand = ConfigurationSettings.AppSettings["SvnCommand"];
+			BugUrl = ConfigurationSettings.AppSettings["BugUrl"];
 		}
 		
 		public void Run()
@@ -55,7 +57,8 @@
 			                                       WinerrorXml,
 			                                       HresultXml,
 			                                       WmXml,
-			                                       SvnCommand);
+			                                       SvnCommand,
+			                                       BugUrl);
 			ircService.Run();
 		}
 		

Modified: trunk/irc/TechBot/TechBot.Console/App.config
--- trunk/irc/TechBot/TechBot.Console/App.config	2005-12-14 17:34:00 UTC (rev 20164)
+++ trunk/irc/TechBot/TechBot.Console/App.config	2005-12-14 18:13:05 UTC (rev 20165)
@@ -12,5 +12,6 @@
 		<add key="HresultXml" value="C:\IRC\TechBot\hresult.xml" />
 		<add key="WmXml" value="C:\IRC\TechBot\wm.xml" />
 		<add key="SvnCommand" value="svn co svn://svn.reactos.com/trunk/reactos" />
+		<add key="BugUrl" value="www.reactos.org/bugzilla/show_bug.cgi?id={0}" />
 	</appSettings>
 </configuration>

Modified: trunk/irc/TechBot/TechBot.Console/Main.cs
--- trunk/irc/TechBot/TechBot.Console/Main.cs	2005-12-14 17:34:00 UTC (rev 20164)
+++ trunk/irc/TechBot/TechBot.Console/Main.cs	2005-12-14 18:13:05 UTC (rev 20165)
@@ -158,6 +158,18 @@
 			}
 		}
 
+		private static string BugUrl
+		{
+			get
+			{
+				string optionName = "BugUrl";
+				string s = ConfigurationSettings.AppSettings[optionName];
+				VerifyRequiredOption(optionName,
+				                     s);
+				return s;
+			}
+		}
+
 		private static void RunIrcService()
 		{
 			IrcService ircService = new IrcService(IRCServerHostName,
@@ -170,7 +182,8 @@
 			                                       WinerrorXml,
 			                                       HresultXml,
 			                                       WmXml,
-			                                       SvnCommand);
+			                                       SvnCommand,
+			                                       BugUrl);
 			ircService.Run();
 		}
 		
@@ -190,7 +203,8 @@
 			                                            WinerrorXml,
 			                                            HresultXml,
 			                                            WmXml,
-			                                            SvnCommand);
+			                                            SvnCommand,
+			                                            BugUrl);
 			service.Run();
 			while (true)
 			{

Added: trunk/irc/TechBot/TechBot.Library/BugCommand.cs
--- trunk/irc/TechBot/TechBot.Library/BugCommand.cs	2005-12-14 17:34:00 UTC (rev 20164)
+++ trunk/irc/TechBot/TechBot.Library/BugCommand.cs	2005-12-14 18:13:05 UTC (rev 20165)
@@ -0,0 +1,54 @@
+using System;
+
+namespace TechBot.Library
+{
+	public class BugCommand : BaseCommand, ICommand
+	{
+		private IServiceOutput serviceOutput;
+		private string bugUrl;
+
+		public BugCommand(IServiceOutput serviceOutput,
+		                  string bugUrl)
+		{
+			this.serviceOutput = serviceOutput;
+			this.bugUrl = bugUrl;
+		}
+		
+		public bool CanHandle(string commandName)
+		{
+			return CanHandle(commandName,
+			                 new string[] { "bug" });
+		}
+
+		public void Handle(MessageContext context,
+		                   string commandName,
+		                   string parameters)
+		{
+			string bugText = parameters;
+			if (bugText.Equals(String.Empty))
+			{
+				serviceOutput.WriteLine(context,
+				                        "Please provide a valid bug number.");
+				return;
+			}
+
+			NumberParser np = new NumberParser();
+			long bug = np.Parse(bugText);
+			if (np.Error)
+			{
+				serviceOutput.WriteLine(context,
+				                        String.Format("{0} is not a valid bug number.",
+				                                      bugText));
+				return;
+			}
+
+			serviceOutput.WriteLine(context,
+			                        String.Format(bugUrl, bug));
+		}
+		
+		public string Help()
+		{
+			return "!bug <number>";
+		}
+	}
+}

Modified: trunk/irc/TechBot/TechBot.Library/IrcService.cs
--- trunk/irc/TechBot/TechBot.Library/IrcService.cs	2005-12-14 17:34:00 UTC (rev 20164)
+++ trunk/irc/TechBot/TechBot.Library/IrcService.cs	2005-12-14 18:13:05 UTC (rev 20165)
@@ -18,6 +18,7 @@
 		private string hresultXml;
 		private string wmXml;
 		private string svnCommand;
+		private string bugUrl;
 		private IrcClient client;
 		private ArrayList channels = new ArrayList(); /* IrcChannel */
 		private TechBotService service;
@@ -33,7 +34,8 @@
 		                  string winerrorXml,
 		                  string hresultXml,
 		                  string wmXml,
-		                  string svnCommand)
+		                  string svnCommand,
+		                  string bugUrl)
 		{
 			this.hostname = hostname;
 			this.port = port;
@@ -46,6 +48,7 @@
 			this.hresultXml = hresultXml;
 			this.wmXml = wmXml;
 			this.svnCommand = svnCommand;
+			this.bugUrl = bugUrl;
 		}
 
 		public void Run()
@@ -57,7 +60,8 @@
 			                             winerrorXml,
 			                             hresultXml,
 			                             wmXml,
-			                             svnCommand);
+			                             svnCommand,
+			                             bugUrl);
 			service.Run();
 
 			client = new IrcClient();

Modified: trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx
--- trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx	2005-12-14 17:34:00 UTC (rev 20164)
+++ trunk/irc/TechBot/TechBot.Library/TechBot.Library.prjx	2005-12-14 18:13:05 UTC (rev 20165)
@@ -13,6 +13,7 @@
     <File name=".\HresultCommand.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
     <File name=".\WinerrorCommand.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="" />
     <File name=".\MessageContext.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
   </Contents>

Modified: trunk/irc/TechBot/TechBot.Library/TechBotService.cs
--- trunk/irc/TechBot/TechBot.Library/TechBotService.cs	2005-12-14 17:34:00 UTC (rev 20164)
+++ trunk/irc/TechBot/TechBot.Library/TechBotService.cs	2005-12-14 18:13:05 UTC (rev 20165)
@@ -17,6 +17,7 @@
 		private string hresultXml;
 		private string wmXml;
 		private string svnCommand;
+		private string bugUrl;
 		private ArrayList commands = new ArrayList();
 		
 		public TechBotService(IServiceOutput serviceOutput,
@@ -26,7 +27,8 @@
 		                      string winerrorXml,
 		                      string hresultXml,
 		                      string wmXml,
-		                      string svnCommand)
+		                      string svnCommand,
+		                      string bugUrl)
 		{
 			this.serviceOutput = serviceOutput;
 			this.chmPath = chmPath;
@@ -36,6 +38,7 @@
 			this.hresultXml = hresultXml;
 			this.wmXml = wmXml;
 			this.svnCommand = svnCommand;
+			this.bugUrl = bugUrl;
 		}
 		
 		public void Run()
@@ -55,6 +58,8 @@
 			                           wmXml));
 			commands.Add(new SvnCommand(serviceOutput,
 			                            svnCommand));
+			commands.Add(new BugCommand(serviceOutput,
+			                            bugUrl));
 		}
 		
 		public void InjectMessage(MessageContext context,