/** {@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); } } } }