Author: mpiulachs Date: Wed Jun 25 08:23:59 2008 New Revision: 34079
URL: http://svn.reactos.org/svn/reactos?rev=34079&view=rev Log: - miscellaneous small fixes - add support for preventing all commands to be run on the channel by default. Now TechBot only answers some of the commands in PM - add back the error Command
Added: trunk/irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs - copied, changed from r33939, trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs Removed: trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs trunk/irc/TechBot/TechBot.Library/ParametersParser.cs Modified: trunk/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs trunk/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj trunk/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs trunk/irc/TechBot/TechBot.Library/Commands/Base/Command.cs trunk/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs trunk/irc/TechBot/TechBot.Library/TechBotService.cs
Modified: trunk/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs URL: http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Commands.Common... ============================================================================== --- trunk/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs [iso-8859-1] (original) +++ trunk/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs [iso-8859-1] Wed Jun 25 08:23:59 2008 @@ -6,11 +6,16 @@ { public abstract class BugCommand : Command { - private string m_BugID = null; +// private string m_BugID = null;
public BugCommand() { } + + public override bool AnswerInPublic + { + get { return true; } + }
public string BugID {
Copied: trunk/irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs (from r33939, trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs) URL: http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Commands.Common... ============================================================================== --- trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs [iso-8859-1] (original) +++ trunk/irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs [iso-8859-1] Wed Jun 25 08:23:59 2008 @@ -2,7 +2,9 @@ using System.Xml; using System.Collections;
-namespace TechBot.Library +using TechBot.Library; + +namespace TechBot.Commands.Common { [Command("error", Help = "!error <value>")] public class ErrorCommand : Command @@ -68,27 +70,24 @@ return code.ToString(); }
- public override void Handle(MessageContext context) - { - if (Text.Equals(String.Empty)) + public override void ExecuteCommand() + { + if (Parameters.Equals(String.Empty)) { - TechBot.ServiceOutput.WriteLine(context, - "Please provide an Error Code."); + Say("Please provide an Error Code."); return; } - string errorText = originalErrorText; + string errorText = Parameters;
retry: NumberParser np = new NumberParser(); long error = np.Parse(errorText); - if (np.Error) - { - TechBot.ServiceOutput.WriteLine(context, - String.Format("{0} is not a valid Error Code.", - originalErrorText)); - return; - } + if (np.Error) + { + Say("{0} is not a valid Error Code.", Parameters); + return; + } ArrayList descriptions = new ArrayList();
@@ -159,27 +158,23 @@ goto retry; }
- TechBot.ServiceOutput.WriteLine(context, - String.Format("I don't know about Error Code {0}.", - originalErrorText)); + Say("I don't know about Error Code {0}.", + Parameters); } - else if (descriptions.Count == 1) - { - string description = (string)descriptions[0]; - TechBot.ServiceOutput.WriteLine(context, - String.Format("{0} is {1}.", - originalErrorText, - description)); - } - else - { - TechBot.ServiceOutput.WriteLine(context, - String.Format("{0} could be:", - originalErrorText)); - - foreach(string description in descriptions) - TechBot.ServiceOutput.WriteLine(context, String.Format("\t{0}", description)); - } + else if (descriptions.Count == 1) + { + string description = (string)descriptions[0]; + Say("{0} is {1}.", + Parameters, + description); + } + else + { + Say("{0} could be:", Parameters); + + foreach (string description in descriptions) + Say("\t{0}", description); + } } } }
Modified: trunk/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj URL: http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Commands.Common... ============================================================================== --- trunk/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj [iso-8859-1] (original) +++ trunk/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj [iso-8859-1] Wed Jun 25 08:23:59 2008 @@ -34,6 +34,7 @@ </ItemGroup> <ItemGroup> <Compile Include="Base\BugCommand.cs" /> + <Compile Include="ErrorCommand.cs" /> <Compile Include="HResultCommand.cs" /> <Compile Include="NtStatusCommand.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
Modified: trunk/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs URL: http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Commands.MSDN/A... ============================================================================== --- trunk/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs [iso-8859-1] (original) +++ trunk/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs [iso-8859-1] Wed Jun 25 08:23:59 2008 @@ -16,11 +16,10 @@ private bool IsVerbose = false;
private HtmlHelpSystem chm; - private string name;
public ApiCommand() { - Run(); + LoadCHM(); }
[CommandParameter("api", "The API name")] @@ -36,7 +35,7 @@ Say(message); }
- private void Run() + private void LoadCHM() { string CHMFilename = Path.Combine(Settings.Default.ChmPath, Settings.Default.MainChm); chm = new HtmlHelpSystem();
Modified: trunk/irc/TechBot/TechBot.Library/Commands/Base/Command.cs URL: http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/Command... ============================================================================== --- trunk/irc/TechBot/TechBot.Library/Commands/Base/Command.cs [iso-8859-1] (original) +++ trunk/irc/TechBot/TechBot.Library/Commands/Base/Command.cs [iso-8859-1] Wed Jun 25 08:23:59 2008 @@ -19,6 +19,11 @@ { get { return m_Context; } set { m_Context = value; } + } + + public virtual bool AnswerInPublic + { + get { return false; } }
public string Name @@ -53,6 +58,25 @@ TechBot.ServiceOutput.WriteLine(Context, String.Format(format, args)); }
+ public void Run() + { + if (Context is ChannelMessageContext) + { + if (AnswerInPublic) + { + ExecuteCommand(); + } + else + { + Say("Sorry, I only respond '{0}' in private , PM me!", Name); + } + } + else + { + ExecuteCommand(); + } + } + public abstract void ExecuteCommand();
public virtual void Initialize()
Modified: trunk/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs URL: http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/Command... ============================================================================== --- trunk/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs [iso-8859-1] (original) +++ trunk/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs [iso-8859-1] Wed Jun 25 08:23:59 2008 @@ -6,8 +6,6 @@ { public abstract class XmlLookupCommand : XmlCommand { - protected string m_Text = null; - public virtual string Text { get { return Parameters; }
Removed: trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs URL: http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/Command... ============================================================================== --- trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs [iso-8859-1] (original) +++ trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs (removed) @@ -1,185 +1,0 @@ -using System; -using System.Xml; -using System.Collections; - -namespace TechBot.Library -{ - [Command("error", Help = "!error <value>")] - public class ErrorCommand : Command - { - private NtStatusCommand ntStatus; - private WinErrorCommand winerror; - private HResultCommand hresult; - - public ErrorCommand() - { - this.ntStatus = new NtStatusCommand(); - this.winerror = new WinErrorCommand(); - this.hresult = new HResultCommand(); - } - - private static int GetSeverity(long error) - { - return (int)((error >> 30) & 0x3); - } - - private static bool IsCustomer(long error) - { - return (error & 0x20000000) != 0; - } - - private static bool IsReserved(long error) - { - return (error & 0x10000000) != 0; - } - - private static int GetFacility(long error) - { - return (int)((error >> 16) & 0xFFF); - } - - private static short GetCode(long error) - { - return (short)((error >> 0) & 0xFFFF); - } - - private static string FormatSeverity(long error) - { - int severity = GetSeverity(error); - switch (severity) - { - case 0: return "SUCCESS"; - case 1: return "INFORMATIONAL"; - case 2: return "WARNING"; - case 3: return "ERROR"; - } - return null; - } - - private static string FormatFacility(long error) - { - int facility = GetFacility(error); - return facility.ToString(); - } - - private static string FormatCode(long error) - { - int code = GetCode(error); - return code.ToString(); - } - - public override void Handle(MessageContext context) - { - if (Text.Equals(String.Empty)) - { - TechBot.ServiceOutput.WriteLine(context, - "Please provide an Error Code."); - return; - } - - string errorText = originalErrorText; - - retry: - NumberParser np = new NumberParser(); - long error = np.Parse(errorText); - if (np.Error) - { - TechBot.ServiceOutput.WriteLine(context, - String.Format("{0} is not a valid Error Code.", - originalErrorText)); - return; - } - - ArrayList descriptions = new ArrayList(); - - // Error is out of bounds - if ((ulong)error > uint.MaxValue) - { - // Do nothing - } - // Error is outside of the range [0, 65535]: it cannot be a plain Win32 error code - else if ((ulong)error > ushort.MaxValue) - { - // Customer bit is set: custom error code - if (IsCustomer(error)) - { - string description = String.Format("[custom, severity {0}, facility {1}, code {2}]", - FormatSeverity(error), - FormatFacility(error), - FormatCode(error)); - descriptions.Add(description); - } - // Reserved bit is set: HRESULT_FROM_NT(ntstatus) - else if (IsReserved(error)) - { - int status = (int)(error & 0xCFFFFFFF); - string description = ntStatus.GetNtstatusDescription(status); - - if (description == null) - description = status.ToString("X"); - - description = String.Format("HRESULT_FROM_NT({0})", description); - descriptions.Add(description); - } - // Win32 facility: HRESULT_FROM_WIN32(winerror) - else if (GetFacility(error) == 7) - { - // Must be an error code - if (GetSeverity(error) == 2) - { - short err = GetCode(error); - string description = winerror.GetWinerrorDescription(err); - - if (description == null) - description = err.ToString("D"); - - description = String.Format("HRESULT_FROM_WIN32({0})", description); - descriptions.Add(description); - } - } - } - - string winerrorDescription = winerror.GetWinerrorDescription(error); - string ntstatusDescription = ntStatus.GetNtstatusDescription(error); - string hresultDescription = hresult.GetHresultDescription(error); - - if (winerrorDescription != null) - descriptions.Add(winerrorDescription); - if (ntstatusDescription != null) - descriptions.Add(ntstatusDescription); - if (hresultDescription != null) - descriptions.Add(hresultDescription); - - if (descriptions.Count == 0) - { - // Last chance heuristics: attempt to parse a 8-digit decimal as hexadecimal - if (errorText.Length == 8) - { - errorText = "0x" + errorText; - goto retry; - } - - TechBot.ServiceOutput.WriteLine(context, - String.Format("I don't know about Error Code {0}.", - originalErrorText)); - } - else if (descriptions.Count == 1) - { - string description = (string)descriptions[0]; - TechBot.ServiceOutput.WriteLine(context, - String.Format("{0} is {1}.", - originalErrorText, - description)); - } - else - { - TechBot.ServiceOutput.WriteLine(context, - String.Format("{0} could be:", - originalErrorText)); - - foreach(string description in descriptions) - TechBot.ServiceOutput.WriteLine(context, String.Format("\t{0}", description)); - } - } - } -}
Removed: trunk/irc/TechBot/TechBot.Library/ParametersParser.cs URL: http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/Paramet... ============================================================================== --- trunk/irc/TechBot/TechBot.Library/ParametersParser.cs [iso-8859-1] (original) +++ trunk/irc/TechBot/TechBot.Library/ParametersParser.cs (removed) @@ -1,537 +1,0 @@ -using System; -using System.Text.RegularExpressions; - -//Code taken from : http://www.codeproject.com/KB/recipes/commandlineparser.aspx - -namespace TechBot.Library -{ - /// <summary>Implementation of a command-line parsing class. Is capable of - /// having switches registered with it directly or can examine a registered - /// class for any properties with the appropriate attributes appended to - /// them.</summary> - public class ParametersParser - { - /// <summary>A simple internal class for passing back to the caller - /// some information about the switch. The internals/implementation - /// of this class has privillaged access to the contents of the - /// SwitchRecord class.</summary> - public class SwitchInfo - { - #region Private Variables - private object m_Switch = null; - #endregion - - #region Public Properties - public string Name { get { return (m_Switch as SwitchRecord).Name; } } - public string Description { get { return (m_Switch as SwitchRecord).Description; } } - public string[] Aliases { get { return (m_Switch as SwitchRecord).Aliases; } } - public System.Type Type { get { return (m_Switch as SwitchRecord).Type; } } - public object Value { get { return (m_Switch as SwitchRecord).Value; } } - public object InternalValue { get { return (m_Switch as SwitchRecord).InternalValue; } } - public bool IsEnum { get { return (m_Switch as SwitchRecord).Type.IsEnum; } } - public string[] Enumerations { get { return (m_Switch as SwitchRecord).Enumerations; } } - #endregion - - /// <summary> - /// Constructor for the SwitchInfo class. Note, in order to hide to the outside world - /// information not necessary to know, the constructor takes a System.Object (aka - /// object) as it's registering type. If the type isn't of the correct type, an exception - /// is thrown. - /// </summary> - /// <param name="rec">The SwitchRecord for which this class store information.</param> - /// <exception cref="ArgumentException">Thrown if the rec parameter is not of - /// the type SwitchRecord.</exception> - public SwitchInfo( object rec ) - { - if ( rec is SwitchRecord ) - m_Switch = rec; - else - throw new ArgumentException(); - } - } - - /// <summary> - /// The SwitchRecord is stored within the parser's collection of registered - /// switches. This class is private to the outside world. - /// </summary> - private class SwitchRecord - { - #region Private Variables - private string m_name = ""; - private string m_description = ""; - private object m_value = null; - private System.Type m_switchType = typeof(bool); - private System.Collections.ArrayList m_Aliases = null; - private string m_Pattern = ""; - - // The following advanced functions allow for callbacks to be - // made to manipulate the associated data type. - private System.Reflection.MethodInfo m_SetMethod = null; - private System.Reflection.MethodInfo m_GetMethod = null; - private object m_PropertyOwner = null; - #endregion - - #region Private Utility Functions - private void Initialize( string name, string description ) - { - m_name = name; - m_description = description; - - BuildPattern(); - } - - private void BuildPattern() - { - string matchString = Name; - - if ( Aliases != null && Aliases.Length > 0 ) - foreach( string s in Aliases ) - matchString += "|" + s; - - string strPatternStart = @"(\s|^)(?<match>(-{1,2}|/)("; - string strPatternEnd; // To be defined below. - - // The common suffix ensures that the switches are followed by - // a white-space OR the end of the string. This will stop - // switches such as /help matching /helpme - // - string strCommonSuffix = @"(?=(\s|$))"; - - if ( Type == typeof(bool) ) - strPatternEnd = @")(?<value>(+|-){0,1}))"; - else if ( Type == typeof(string) ) - strPatternEnd = @")(?::|\s+))((?:"")(?<value>.+)(?:"")|(?<value>\S+))"; - else if ( Type == typeof(int) ) - strPatternEnd = @")(?::|\s+))((?<value>(-|+)[0-9]+)|(?<value>[0-9]+))"; - else if ( Type.IsEnum ) - { - string[] enumNames = Enumerations; - string e_str = enumNames[0]; - for ( int e=1; e<enumNames.Length; e++ ) - e_str += "|" + enumNames[e]; - strPatternEnd = @")(?::|\s+))(?<value>" + e_str + @")"; - } - else - throw new System.ArgumentException(); - - // Set the internal regular expression pattern. - m_Pattern = strPatternStart + matchString + strPatternEnd + strCommonSuffix; - } - #endregion - - #region Public Properties - public object Value - { - get - { - if ( ReadValue != null ) - return ReadValue; - else - return m_value; - } - } - - public object InternalValue - { - get { return m_value; } - } - - public string Name - { - get { return m_name; } - set { m_name = value; } - } - - public string Description - { - get { return m_description; } - set { m_description = value; } - } - - public System.Type Type - { - get { return m_switchType; } - } - - public string[] Aliases - { - get { return (m_Aliases != null) ? (string[])m_Aliases.ToArray(typeof(string)): null; } - } - - public string Pattern - { - get { return m_Pattern; } - } - - public System.Reflection.MethodInfo SetMethod - { - set { m_SetMethod = value; } - } - - public System.Reflection.MethodInfo GetMethod - { - set { m_GetMethod = value; } - } - - public object PropertyOwner - { - set { m_PropertyOwner = value; } - } - - public object ReadValue - { - get - { - object o = null; - if ( m_PropertyOwner != null && m_GetMethod != null ) - o = m_GetMethod.Invoke( m_PropertyOwner, null ); - return o; - } - } - - public string[] Enumerations - { - get - { - if ( m_switchType.IsEnum ) - return System.Enum.GetNames( m_switchType ); - else - return null; - } - } - #endregion - - #region Constructors - public SwitchRecord( string name, string description ) - { - Initialize( name, description ); - } - - public SwitchRecord( string name, string description, System.Type type ) - { - if ( type == typeof(bool) || - type == typeof(string) || - type == typeof(int) || - type.IsEnum ) - { - m_switchType = type; - Initialize( name, description ); - } - else - throw new ArgumentException("Currently only Ints, Bool and Strings are supported"); - } - #endregion - - #region Public Methods - public void AddAlias( string alias ) - { - if ( m_Aliases == null ) - m_Aliases = new System.Collections.ArrayList(); - m_Aliases.Add( alias ); - - BuildPattern(); - } - - public void Notify( object value ) - { - if ( m_PropertyOwner != null && m_SetMethod != null ) - { - object[] parameters = new object[1]; - parameters[0] = value; - m_SetMethod.Invoke( m_PropertyOwner, parameters ); - } - m_value = value; - } - - #endregion - } - - - #region Private Variables - private string m_commandLine = ""; - private string m_workingString = ""; - private string m_applicationName = ""; - private string[] m_splitParameters = null; - private System.Collections.ArrayList m_switches = null; - #endregion - - #region Private Utility Functions - private void ExtractApplicationName() - { - Regex r = new Regex(@"^(?<commandLine>("".+""|(\S)+))(?<remainder>.+)", - RegexOptions.ExplicitCapture); - Match m = r.Match(m_commandLine); - if ( m != null && m.Groups["commandLine"] != null ) - { - m_applicationName = m.Groups["commandLine"].Value; - m_workingString = m.Groups["remainder"].Value; - } - } - - private void SplitParameters() - { - // Populate the split parameters array with the remaining parameters. - // Note that if quotes are used, the quotes are removed. - // e.g. one two three "four five six" - // 0 - one - // 1 - two - // 2 - three - // 3 - four five six - // (e.g. 3 is not in quotes). - Regex r = new Regex(@"((\s*(""(?<param>.+?)""|(?<param>\S+))))", - RegexOptions.ExplicitCapture); - MatchCollection m = r.Matches( m_workingString ); - - if ( m != null ) - { - m_splitParameters = new string[ m.Count ]; - for ( int i=0; i < m.Count; i++ ) - m_splitParameters[i] = m[i].Groups["param"].Value; - } - } - - private void HandleSwitches() - { - if ( m_switches != null ) - { - foreach ( SwitchRecord s in m_switches ) - { - Regex r = new Regex( s.Pattern, - RegexOptions.ExplicitCapture - | RegexOptions.IgnoreCase ); - MatchCollection m = r.Matches( m_workingString ); - if ( m != null ) - { - for ( int i=0; i < m.Count; i++ ) - { - string value = null; - if ( m[i].Groups != null && m[i].Groups["value"] != null ) - value = m[i].Groups["value"].Value; - - if ( s.Type == typeof(bool)) - { - bool state = true; - // The value string may indicate what value we want. - if ( m[i].Groups != null && m[i].Groups["value"] != null ) - { - switch ( value ) - { - case "+": state = true; - break; - case "-": state = false; - break; - case "": if ( s.ReadValue != null ) - state = !(bool)s.ReadValue; - break; - default: break; - } - } - s.Notify( state ); - break; - } - else if ( s.Type == typeof(string) ) - s.Notify( value ); - else if ( s.Type == typeof(int) ) - s.Notify( int.Parse( value ) ); - else if ( s.Type.IsEnum ) - s.Notify( System.Enum.Parse(s.Type,value,true) ); - } - } - - m_workingString = r.Replace(m_workingString, " "); - } - } - } - - #endregion - - #region Public Properties - public string ApplicationName - { - get { return m_applicationName; } - } - - public string[] Parameters - { - get { return m_splitParameters; } - } - - public SwitchInfo[] Switches - { - get - { - if ( m_switches == null ) - return null; - else - { - SwitchInfo[] si = new SwitchInfo[ m_switches.Count ]; - for ( int i=0; i<m_switches.Count; i++ ) - si[i] = new SwitchInfo( m_switches[i] ); - return si; - } - } - } - - public object this[string name] - { - get - { - if ( m_switches != null ) - for ( int i=0; i<m_switches.Count; i++ ) - if ( string.Compare( (m_switches[i] as SwitchRecord).Name, name, true )==0 ) - return (m_switches[i] as SwitchRecord).Value; - return null; - } - } - - /// <summary>This function returns a list of the unhandled switches - /// that the parser has seen, but not processed.</summary> - /// <remark>The unhandled switches are not removed from the remainder - /// of the command-line.</remark> - public string[] UnhandledSwitches - { - get - { - string switchPattern = @"(\s|^)(?<match>(-{1,2}|/)(.+?))(?=(\s|$))"; - Regex r = new Regex( switchPattern, - RegexOptions.ExplicitCapture - | RegexOptions.IgnoreCase ); - MatchCollection m = r.Matches( m_workingString ); - - if ( m != null ) - { - string[] unhandled = new string[ m.Count ]; - for ( int i=0; i < m.Count; i++ ) - unhandled[i] = m[i].Groups["match"].Value; - return unhandled; - } - else - return null; - } - } - #endregion - - #region Public Methods - public void AddSwitch( string name, string description ) - { - if ( m_switches == null ) - m_switches = new System.Collections.ArrayList(); - - SwitchRecord rec = new SwitchRecord( name, description ); - m_switches.Add( rec ); - } - - public void AddSwitch( string[] names, string description ) - { - if ( m_switches == null ) - m_switches = new System.Collections.ArrayList(); - SwitchRecord rec = new SwitchRecord( names[0], description ); - for ( int s=1; s<names.Length; s++ ) - rec.AddAlias( names[s] ); - m_switches.Add( rec ); - } - - public bool Parse() - { - ExtractApplicationName(); - - // Remove switches and associated info. - HandleSwitches(); - - // Split parameters. - SplitParameters(); - - return true; - } - - public object InternalValue(string name) - { - if ( m_switches != null ) - for ( int i=0; i<m_switches.Count; i++ ) - if ( string.Compare( (m_switches[i] as SwitchRecord).Name, name, true )==0 ) - return (m_switches[i] as SwitchRecord).InternalValue; - return null; - } - #endregion - - #region Constructors - public ParametersParser( string commandLine ) - { - m_commandLine = commandLine; - } - - public ParametersParser( string commandLine, - object classForAutoAttributes ) - { - m_commandLine = commandLine; - - Type type = classForAutoAttributes.GetType(); - System.Reflection.MemberInfo[] members = type.GetMembers(); - - for(int i=0; i<members.Length; i++) - { - object[] attributes = members[i].GetCustomAttributes(false); - if(attributes.Length > 0) - { - SwitchRecord rec = null; - - foreach ( Attribute attribute in attributes ) - { - if ( attribute is CommandParameterAttribute ) - { - CommandParameterAttribute switchAttrib = - (CommandParameterAttribute) attribute; - - // Get the property information. We're only handling - // properties at the moment! - if ( members[i] is System.Reflection.PropertyInfo ) - { - System.Reflection.PropertyInfo pi = (System.Reflection.PropertyInfo) members[i]; - - rec = new SwitchRecord( switchAttrib.Name, - switchAttrib.Description, - pi.PropertyType ); - - // Map in the Get/Set methods. - rec.SetMethod = pi.GetSetMethod(); - rec.GetMethod = pi.GetGetMethod(); - rec.PropertyOwner = classForAutoAttributes; - - // Can only handle a single switch for each property - // (otherwise the parsing of aliases gets silly...) - break; - } - } - } - - // See if any aliases are required. We can only do this after - // a switch has been registered and the framework doesn't make - // any guarantees about the order of attributes, so we have to - // walk the collection a second time. - if ( rec != null ) - { - foreach ( Attribute attribute in attributes ) - { - if (attribute is CommandParameterAliasAttribute) - { - CommandParameterAliasAttribute aliasAttrib = - (CommandParameterAliasAttribute)attribute; - rec.AddAlias( aliasAttrib.Alias ); - } - } - } - - // Assuming we have a switch record (that may or may not have - // aliases), add it to the collection of switches. - if ( rec != null ) - { - if ( m_switches == null ) - m_switches = new System.Collections.ArrayList(); - m_switches.Add( rec ); - } - } - } - } - #endregion - } -}
Modified: trunk/irc/TechBot/TechBot.Library/TechBotService.cs URL: http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/TechBot... ============================================================================== --- trunk/irc/TechBot/TechBot.Library/TechBotService.cs [iso-8859-1] (original) +++ trunk/irc/TechBot/TechBot.Library/TechBotService.cs [iso-8859-1] Wed Jun 25 08:23:59 2008 @@ -81,7 +81,7 @@ try { cmd.Initialize(); - cmd.ExecuteCommand(); + cmd.Run(); cmd.DeInitialize(); } catch (Exception e)