Example #1
0
  /** {@inheritDoc} */
  @Override
  public void execute(
      final FrameContainer origin, final CommandArguments args, final CommandContext context) {
    final Server server = ((ServerCommandContext) context).getServer();
    if (args.getArguments().length < 2) {
      showUsage(origin, args.isSilent(), "msg", "<target> <message>");
    } else {
      final String target = args.getArguments()[0];
      final String message = args.getArgumentsAsString(1);
      sendLine(origin, args.isSilent(), "selfMessage", target, message);

      // If this is a known server or channel, and this is not a silent
      // invokation, use sendLine, else send it raw to the parser.
      if (!args.isSilent() && server.hasChannel(target)) {
        server.getChannel(target).sendLine(message);
      } else if (!args.isSilent() && server.hasQuery(target)) {
        server.getQuery(target).sendLine(message, target);
      } else {
        final Parser parser = server.getParser();

        if (parser == null) {
          // This can happen if the server gets disconnected after
          // the command manager has checked the @CommandOptions
          // annotation. Yay for concurrency.
          sendLine(
              origin, args.isSilent(), FORMAT_ERROR, "You must be connected to use this command");
        } else {
          parser.sendMessage(target, message);
        }
      }
    }
  }