public void Run(string[] command) { if (command.Length != 1 && command.Length != 2) { Console.WriteLine("Invalid ammount of parameters, use help [command]"); return; } if (command.Length == 1) { Console.WriteLine("Aviable commands: "); foreach (var cmd in RegisteredCommands) { Console.WriteLine(cmd.Key); } Help(command); } else { BaseCommand b; if (RegisteredCommands.TryGetValue(command[1], out b)) { List <string> l = command.ToList(); l.RemoveAt(0); Console.WriteLine(command[1] + ":"); b.Help(l.ToArray()); } else { Console.WriteLine("Command not found"); } } }
public ConventionAggregateHandler(T aggregate) { RegisteredCommands = aggregate.RegisteredCommands; if (!RegisteredCommands.Any()) { throw new MissingRegisteredCommandsException(); } }
/// <summary> /// Register commands of service type 1. /// </summary> public void RegisterCommand <T>() where T : class, ICommand { ICommand command = assemblyCommands.FirstOrDefault(c => c is T); if (command == null) { throw new Exception(string.Format("Could not find command of type '{0}'.", typeof(T))); } RegisteredCommands.Add(command); }
/// <summary> /// Unregisters specified commands from CommandsNext. /// </summary> /// <param name="cmds">Commands to unregister.</param> public void UnregisterCommands(params Command[] cmds) { if (cmds.Any(x => x.Parent != null)) { throw new InvalidOperationException("Cannot unregister nested commands."); } var keys = RegisteredCommands.Where(x => cmds.Contains(x.Value)).Select(x => x.Key).ToList(); foreach (var key in keys) { TopLevelCommands.Remove(key); } }
private void Command_OnCommandChange(object sender, CommandChangeEventArgs e) { if (e.IsRemoval) { if (RegisteredCommands.ContainsKey(e.Key)) { RegisteredCommands.Remove(e.Key); } } else { RegisteredCommands.Add(e.Key, e.IsMasterJob); } }
public static void Register(string commandName, params Trigger[] commandTriggers) { if (string.IsNullOrEmpty(commandName)) { throw new ArgumentNullException("commandName"); } if (commandTriggers == null || commandTriggers.Length == 0) { throw new UnableToRegisterCommandWithoutTriggers(commandName); } if (RegisteredCommands.ContainsKey(commandName)) { RegisteredCommands[commandName] = commandTriggers; } else { RegisteredCommands.Add(commandName, commandTriggers); } }
/// <summary> /// Executes Immediate commands and enqueues unsafe commands. /// </summary> /// <param name="session">session that sent the command</param> /// <param name="requestInfo">request that tells us which command to execute</param> /// <seealso cref="Whisper.Daemon.Shard.Net.ShardServer.ExecuteQueuedCommand"/> protected override void ExecuteCommand(ShardSession session, ShardRequest requestInfo) { IWhisperCommand <ShardSession, ShardRequest> command; if (RegisteredCommands.TryGetValue(requestInfo.Key, out command)) { // best to assume the worst, right? CommandThreadSafety safety = CommandThreadSafety.NotThreadSafe; if (command is IThreadAwareCommand) { safety = (command as IThreadAwareCommand).ThreadSafety; } if (safety == CommandThreadSafety.Immediate) { // execute Immediate commands immediately base.ExecuteCommand(session, requestInfo); } else { // split remaining commands by thread safety. thread-safe commands are executed on a thread owned by the session that received them; thread-unsafe commands are executed on the server update thread CommandClosure closure = () => base.ExecuteCommand(session, requestInfo); if (safety == CommandThreadSafety.ThreadSafe) { session.EnqueueCommand(closure); } else { EnqueueCommand(closure); } } } // no need to log the 'else' case here. unknown packet notifications are handled by the Composer }
private void HandleMessage(IrcMessage message) { // scope in switch...case is stupid in C# string raw, channelName, reason; IrcChannel channel; switch (message.Command) { case "001": if (ConnectionComplete != null) { ConnectionComplete(this, null); } break; case "PRIVMSG": IrcCommand command = null; IrcUserMessage userMessage = new IrcUserMessage(message); if (UserMessageRecieved != null) { UserMessageRecieved(this, new UserMessageEventArgs(userMessage)); } string messagePrepend = "", destination = userMessage.Target; string sourceNick = userMessage.Source.Nick; if (userMessage.Message.Contains("@")) { sourceNick = userMessage.Message.Substring(userMessage.Message.IndexOf("@") + 1).Trim(); userMessage.Message = userMessage.Message.Remove(userMessage.Message.IndexOf("@")); } if (message.Payload.StartsWith("#")) // channel message { messagePrepend = sourceNick + ": \u000f"; } if (userMessage.Message.StartsWith(ControlCharacter)) { command = new IrcCommand(userMessage.Source, userMessage.Message.Trim(), messagePrepend); command.Destination = destination; if (RegisteredCommands.ContainsKey(command.Command.ToLower())) { Thread tempThread = new Thread(() => { try { if (PreCommand != null) { var eventArgs = new CommandEventArgs(command); PreCommand(this, eventArgs); command = eventArgs.Command; } string response = RegisteredCommands[command.Command.ToLower()](command); if (response != null) { SendMessage(destination, messagePrepend + response); } if (PostCommand != null) { PostCommand(this, new CommandEventArgs(command)); } } catch (Exception e) { SendMessage(destination, messagePrepend + "Error: " + e.ToString().Haste()); } }); tempThread.Start(); } } break; case "PING": SendRawMessage("PONG " + message.Payload); ServerPingAddress = message.Payload; LastPingRecieved = DateTime.Now; break; case "PONG": LastPongRecieved = DateTime.Now; break; case "332": // Channel topic raw = message.Payload.Substring(message.Payload.IndexOf(' ') + 1); channelName = raw.Remove(raw.IndexOf(' ')); raw = raw.Substring(raw.IndexOf(' ') + 1).Substring(1); channel = GetChannel(channelName); channel.Topic = raw; break; case "353": raw = message.Payload.Substring(message.Payload.IndexOf(' ') + 3); channelName = raw.Remove(raw.IndexOf(' ')); raw = raw.Substring(raw.IndexOf(':') + 1); string[] names = raw.Split(' '); channel = GetChannel(channelName); foreach (var user in names) { if (user.StartsWith("+")) { channel.Users.Add(user.Substring(1)); } else if (user.StartsWith("@")) { channel.Users.Add(user.Substring(1)); } else { channel.Users.Add(user); } } break; case "366": // End of names raw = message.Payload.Substring(message.Payload.IndexOf(' ') + 1); channelName = raw.Remove(raw.IndexOf(' ')); if (ChannelListRecieved != null) { ChannelListRecieved(this, new ChannelListEventArgs(GetChannel(channelName))); } break; case "MODE": if (message.Payload.StartsWith("#")) { ChannelModeChangeEventArgs eventArgs = new ChannelModeChangeEventArgs(); eventArgs.Source = new IrcUser(message.Prefix); eventArgs.Channel = GetChannel(message.Payload.Remove(message.Payload.IndexOf(' '))); eventArgs.ModeChange = message.Payload.Substring(message.Payload.IndexOf(' ') + 1); if (ChannelModeChanged != null) { ChannelModeChanged(this, eventArgs); } } break; case "NOTICE": if (NoticeRecieved != null) { NoticeRecieved(this, new NoticeEventArgs(new IrcNotice(message))); } break; case "PART": // #IAmABotAMA :\"hello world\" channelName = message.Parameters[0]; channel = GetChannel(channelName); reason = message.Payload.Substring(message.Payload.IndexOf(':') + 1); if (new IrcUser(message.Prefix).Nick != User.Nick) { channel.Users.Remove(new IrcUser(message.Prefix).Nick); if (UserPartedChannel != null) { UserPartedChannel(this, new UserPartEventArgs(new IrcUser(message.Prefix), channel, reason)); } } break; case "JOIN": channelName = message.Parameters[0]; channel = GetChannel(channelName); channel.Users.Add(new IrcUser(message.Prefix).Nick); if (UserJoinedChannel != null) { UserJoinedChannel(this, new UserJoinEventArgs(new IrcUser(message.Prefix), channel)); } break; case "QUIT": reason = message.Payload.Substring(message.Payload.IndexOf(':') + 1); if (new IrcUser(message.Prefix).Nick != User.Nick) { foreach (var c in Channels) { if (c.Users.Contains(new IrcUser(message.Prefix).Nick)) { c.Users.Remove(new IrcUser(message.Prefix).Nick); } } if (UserQuit != null) { UserQuit(this, new UserQuitEventArgs(new IrcUser(message.Prefix), reason)); } } else { if (ServerQuit != null) { ServerQuit(this, null); } // Reconnect if (IrcConnection.Connected) { IrcConnection.Disconnect(false); } IrcConnection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ReadBuffer = new byte[1024]; ReadBufferIndex = 0; IrcConnection.BeginConnect(ServerHostname, ServerPort, ConnectComplete, null); } break; case "311": // WHOIS response string[] whois = message.Payload.Split(' '); var result = new IrcUser(whois[1], whois[2].Substring(1)); result.Hostname = whois[3]; if (WhoIsCallback != null) { WhoIsCallback(result); WhoIsCallback = null; } break; case "TOPIC": if (TopicCallback != null) { TopicCallback(message.Payload.Substring(message.Payload.IndexOf(":") + 1)); TopicCallback = null; } break; case "NICK": if (NickChanged != null) { NickChanged(this, new NickChangedEventArgs(new IrcUser(message.Prefix), message.Payload)); } break; } }
/// <summary> /// Finds a specified command by its qualified name, then separates arguments. /// </summary> /// <param name="commandString">Qualified name of the command, optionally with arguments.</param> /// <param name="rawArguments">Separated arguments.</param> /// <returns>Found command or null if none was found.</returns> public Command FindCommand(string commandString, out string rawArguments) { rawArguments = null; var ignoreCase = !Config.CaseSensitive; var pos = 0; var next = commandString.ExtractNextArgument(ref pos); if (next == null) { return(null); } if (!RegisteredCommands.TryGetValue(next, out var cmd)) { if (!ignoreCase) { return(null); } next = next.ToLowerInvariant(); var cmdKvp = RegisteredCommands.FirstOrDefault(x => x.Key.ToLowerInvariant() == next); if (cmdKvp.Value == null) { return(null); } cmd = cmdKvp.Value; } if (!(cmd is CommandGroup)) { rawArguments = commandString.Substring(pos).Trim(); return(cmd); } while (cmd is CommandGroup) { var cm2 = cmd as CommandGroup; var oldPos = pos; next = commandString.ExtractNextArgument(ref pos); if (next == null) { break; } if (ignoreCase) { next = next.ToLowerInvariant(); cmd = cm2.Children.FirstOrDefault(x => x.Name.ToLowerInvariant() == next || x.Aliases?.Any(xx => xx.ToLowerInvariant() == next) == true); } else { cmd = cm2.Children.FirstOrDefault(x => x.Name == next || x.Aliases?.Contains(next) == true); } if (cmd == null) { cmd = cm2; pos = oldPos; break; } } rawArguments = commandString.Substring(pos).Trim(); return(cmd); }
public void UnregisterPhrase(string phrase) { _speechRecognizer.UnregisterPhrase(phrase); RegisteredCommands.Remove(phrase); }
public void RegisterPhrase(string phrase, ScriptCommandList command) { RegisteredCommands.Add(phrase, command); _speechRecognizer.RegisterPhrase(phrase); }