#include <commands.h>
#include <net/i3.h>
 
void send_tell(string from, string visname, string mud, string to, string message){
    if(base_name(previous_object()) != CMD_TELL) return;
    I3_DAEMON->send_packet(PRT_TELL, from, mud, to, ({ visname, message }));
}
 
void process_tell(mixed *info){
    object ob;
    int i;    
    mixed *data;
    string *ignore, mud_from, who_from,msg,idlemsg;
 
    if(base_name(previous_object()) != I3_DAEMON) return;
    if(sizeof(info) != SIZ_TELL) return
      I3_DAEMON->send_error(info[2] , info[3], "bad-pkt", MUD_NAME+": incorrect tell request received, notify your Mud administrator.\n" ,info );
    if( (!(ob = find_living(info[5]))) || (ob->query("invisible") ) || 
        (ob->query("hide") ) ) return
      I3_DAEMON->send_error(info[2] , info[3],"unk-user", capitalize(info[5]) 
        +" is nog logged on.\n" ,"");
    if (!interactive(ob)) return
      I3_DAEMON->send_error(info[2] , info[3], "unk-user", capitalize(info[5])+ " is currently net-dead.\n" ,"");
    mud_from = lower_case(info[2]);
    who_from = lower_case(info[6]);
    ignore = ob->query("ignore");
     if( pointerp( ignore ) )
      {
       if( ( member_array( "@" + mud_from, ignore ) != -1 ) )
   {
    I3_DAEMON->send_error(info[2],info[3],"unk-user",
      ob->query("cap_name") + " is ignoring everyone@" + info[2]+".\n","" );
    return;
   }
   if ( member_array(who_from+ "@"+ mud_from,ignore) != -1 )
   {
    I3_DAEMON->send_error(info[2],info[3], "unk-user",
     ob->query("cap_name")+ " is ignoring you.\n","" );
    return;
   }
 } //ignore
    if (ob->query("busy"))
   {
I3_DAEMON->send_error(info[2],info[3],"unk-user", ob->query("cap_name") +
  " is busy and can't be disturbed.\n","");
    return;
   }
// For Tmi-2 only
#if 1
    // Hmm, inactive seems obsolete with idlemsg
    if (ob->query("inactive"))
    I3_DAEMON->send_error(info[2],info[3], "unk-user",
     ob->query("cap_name")+ " is inactive right now, and might not respond.\n" ,"");
#endif
    if (ob->query("ghost")) 
    I3_DAEMON->send_error(info[2],info[3],"unk-user", 
     ob->query("cap_name")+ " is a ghost and cannot answer right now.\n" ,"");
    if (query_idle(ob) > 60) {
#if 1
   // This is the standard Tmi-2 stuff for idlemsg (they use getenv) 
    idlemsg = (string) ob -> getenv( "idlemsg" );
    msg = sprintf("%s has been idle for %s.\n%s",ob->query("cap_name"),
	      format_time(query_idle(ob)) ,
    ( (idlemsg && idlemsg != "") ? "Idlemsg: " + idlemsg + "\n" : "" )) ;
   
#else
   // This is our Earth stuff, we don't use env  ;)   Leto
     idlemsg = (string)ob->query("idlemsg");
     if (!idlemsg) 
      msg = sprintf("%s has been idle for %s, but %s left you no message.\n",
      ob->query("cap_name"), format_time(query_idle(ob)) ,
      subjective(ob->query("gender")) );
     else 
      msg = sprintf("%s has been idle for %s. %s idle message is:\n%s",
      ob->query("cap_name"), format_time(query_idle(ob)) ,
      capitalize(possessive(ob->query("gender"))),idlemsg );
#endif        
    I3_DAEMON->send_error(info[2],info[3], "unk-user",msg,"" );
}
    message("tell",sprintf("%s@%s tells you: %s\n",info[6], info[2], info[7]), ob);
 // convert some spaces in mudnames to dots
    ob->set("reply",info[3]+"@"+replace_string(info[2]," ","."));
}