code: public void deliverTell (UserMessage message, Name target, TellListener listener)
          throws InvocationException
      {
          // make sure the target user is online
          BodyObject tobj = _locator.lookupBody(target);
          if (tobj == null) {
              // if we have a forwarder configured, try forwarding the tell
              if (_chatForwarder != null && _chatForwarder.forwardTell(message, target, listener)) {
                  return;
              }
              throw new InvocationException(ChatCodes.USER_NOT_ONLINE);
          }
  
          if (tobj.status == OccupantInfo.DISCONNECTED) {
              String errmsg = MessageBundle.compose(
                  ChatCodes.USER_DISCONNECTED, TimeUtil.getTimeOrderString(
                      System.currentTimeMillis() - tobj.getLocal(BodyLocal.class).statusTime,
                      TimeUtil.SECOND));
              throw new InvocationException(errmsg);
          }
  
          // deliver a tell notification to the target player
          deliverTell(tobj, message);
  
          // let the teller know it went ok
          long idle = 0L;
          if (tobj.status == OccupantInfo.IDLE) {
              idle = System.currentTimeMillis() - tobj.getLocal(BodyLocal.class).statusTime;
          }
          String awayMessage = null;
          if (!StringUtil.isBlank(tobj.awayMessage)) {
              awayMessage = tobj.awayMessage;
          }
          listener.tellSucceeded(idle, awayMessage);
      }
docs: Delivers a tell message to the specified target and notifies the supplied listener of the
  result. It is assumed that the teller has already been permissions checked.