// Last message daemon by seeker
// February 21st of 2000
// Security hole fixed by NS
// November 16, 2001
#include <std.h>
#include <daemons.h>
static private mapping channels;
static private mapping tells;
static private mapping says;
static private mapping partylines;

#define ADMINS ({"nightshade", "stormbringer", "seeker"})

void create()
{
 seteuid(getuid());
 channels = ([]);
 tells = ([]);
 says = ([]);
 partylines = ([]);
}
string get_say(string user)
{
int x;
string seeker;
 if (!says[user])
   return "No last says.\n";
 if(!archp(this_player()) && member_array(user, ADMINS) != -1)
   return "No last says.\n";
 if(this_player()->query_name() != user && find_player("nightshade"))
   message("info", this_player()->query_name()+" looked at says belonging to "+user+".", find_player("nightshade"));
 if (sizeof(says[user]) > 25)
   x = sizeof(says[user])-25;
  else
    x = 0;
 seeker= "";
 for (; x<sizeof(says[user]); x++)
    {
     if (says[user][x]) seeker += says[user][x]+"\n";
    }
 if (!seeker) return " ";
 return seeker;
}
 
string get_last(string line)
{
 int x;
 string seeker;
 if (!channels[line])
   return "No last data for that line.\n";
 if(!archp(this_player()) && line == "admin")
   return "No last data for that line.\n";
 if (sizeof(channels[line]) > 25)
   x = sizeof(channels[line])-25;
  else
    x = 0;
 seeker= "";
 for (; x<sizeof(channels[line]); x++)
    {
     if (channels[line][x]) seeker += channels[line][x]+"\n";
    }
 if (!seeker) return " ";
 return seeker;
}
string get_tell(string user)
{
 int x;
 string seeker;
 if (!tells[user])
   return "No last tells.\n";
 if(!archp(this_player()) && member_array(user, ADMINS) != -1)
   return "No last tells.\n";
 if(this_player()->query_name() != user && find_player("nightshade"))
   message("info", this_player()->query_name()+" looked at tells belonging to "+user"".", find_player("nightshade"));
 if (sizeof(tells[user]) > 25)
   x = sizeof(tells[user])-25;
  else
    x = 0;
 seeker= "";
 for (; x<sizeof(tells[user]); x++)
    {
     if (tells[user][x]) seeker += tells[user][x]+"\n";
    }
 if (!seeker) return " ";
 return seeker;
}
string get_partyline(string user)
{
 int x;
 string seeker;
 if (!partylines[user])
   return "No last partyline.\n";
 if (sizeof(partylines[user]) > 25)
   x = sizeof(partylines[user])-25;
  else
    x = 0;
 seeker= "";
 for (; x<sizeof(partylines[user]); x++)
    {
     if (partylines[user][x]) seeker += partylines[user][x]+"\n";
    }
 if (!seeker) return " ";
 return seeker;
}
int query_saysize(string user)
{
 return sizeof(says[user]);
}
int add_say(string user, string message)
{
 if (!says[user])
  {
   says[user] = ({ TERMINAL_D->no_colours(message) });
   return 1;
  }
  if (sizeof(says[user])-25 >= 0)
    says[user] -= ({ says[user][0] });
  says[user] += ({ TERMINAL_D->no_colours(message) });
}
  
int add_partyline(string user, string message)
{
 if (!partylines[user])
   {
    partylines[user] = ({ TERMINAL_D->no_colours(message) });
    return 2;
   }
   if (sizeof(partylines[user])-25 >= 0)
     partylines[user] -= ({ partylines[user][0] });
   partylines[user] += ({ TERMINAL_D->no_colours(message) });
  return 1;
}
  
int add_tell(string user, string message)
{
 if (!tells[user])
   {
    tells[user] = ({ TERMINAL_D->no_colours(message) });
    return 2;
   }
   if (sizeof(tells[user])-25 >= 0)
     tells[user] -= ({ tells[user][0] });
   tells[user] += ({ TERMINAL_D->no_colours(message) });
  return 1;
}
int add_last(string line, string message)
{
 if (!channels[line])
    {
     channels[line] = ({ TERMINAL_D->no_colours(message) });
     return 2;
    }
     if (sizeof(channels[line])-25 >= 0)
       channels[line] -= ({ channels[line][0] });
    channels[line] += ({ TERMINAL_D->no_colours(message) });
 return 1;
}
