lima-1.0b5/
lima-1.0b5/driver/
lima-1.0b5/driver/ChangeLog.old/
lima-1.0b5/driver/Win32/
lima-1.0b5/driver/compat/
lima-1.0b5/driver/include/
lima-1.0b5/driver/testsuite/
lima-1.0b5/driver/testsuite/clone/
lima-1.0b5/driver/testsuite/command/
lima-1.0b5/driver/testsuite/data/
lima-1.0b5/driver/testsuite/etc/
lima-1.0b5/driver/testsuite/include/
lima-1.0b5/driver/testsuite/inherit/
lima-1.0b5/driver/testsuite/inherit/master/
lima-1.0b5/driver/testsuite/log/
lima-1.0b5/driver/testsuite/single/
lima-1.0b5/driver/testsuite/single/tests/compiler/
lima-1.0b5/driver/testsuite/single/tests/efuns/
lima-1.0b5/driver/testsuite/single/tests/operators/
lima-1.0b5/driver/testsuite/u/
lima-1.0b5/driver/tmp/
lima-1.0b5/etc/
lima-1.0b5/lib/WWW/help/
lima-1.0b5/lib/cmds/
lima-1.0b5/lib/cmds/create/
lima-1.0b5/lib/cmds/player/attic/
lima-1.0b5/lib/contrib/bboard/
lima-1.0b5/lib/contrib/boards/
lima-1.0b5/lib/contrib/marriage/
lima-1.0b5/lib/contrib/roommaker/
lima-1.0b5/lib/contrib/transient_effect/
lima-1.0b5/lib/daemons/channel/
lima-1.0b5/lib/daemons/imud/
lima-1.0b5/lib/data/
lima-1.0b5/lib/data/config/
lima-1.0b5/lib/data/links/
lima-1.0b5/lib/data/news/
lima-1.0b5/lib/data/players/
lima-1.0b5/lib/data/secure/
lima-1.0b5/lib/domains/
lima-1.0b5/lib/domains/std/2.4.5/maze1/
lima-1.0b5/lib/domains/std/2.4.5/npc/
lima-1.0b5/lib/domains/std/2.4.5/post_dir/
lima-1.0b5/lib/domains/std/2.4.5/sub/
lima-1.0b5/lib/domains/std/camera/
lima-1.0b5/lib/domains/std/config/
lima-1.0b5/lib/domains/std/cult/
lima-1.0b5/lib/domains/std/effects/
lima-1.0b5/lib/domains/std/misc/
lima-1.0b5/lib/domains/std/monsters/
lima-1.0b5/lib/domains/std/recorder/
lima-1.0b5/lib/domains/std/rooms/
lima-1.0b5/lib/domains/std/rooms/beach/
lima-1.0b5/lib/domains/std/rooms/labyrinth/
lima-1.0b5/lib/domains/std/school/
lima-1.0b5/lib/domains/std/school/O/
lima-1.0b5/lib/domains/std/spells/
lima-1.0b5/lib/domains/std/spells/stock-mage/
lima-1.0b5/lib/domains/std/spells/stock-priest/
lima-1.0b5/lib/help/
lima-1.0b5/lib/help/admin/
lima-1.0b5/lib/help/hints/General_Questions/
lima-1.0b5/lib/help/hints/Pirate_Quest/
lima-1.0b5/lib/help/player/
lima-1.0b5/lib/help/player/bin/
lima-1.0b5/lib/help/player/quests/
lima-1.0b5/lib/help/wizard/
lima-1.0b5/lib/help/wizard/coding/guilds/
lima-1.0b5/lib/help/wizard/coding/rooms/
lima-1.0b5/lib/help/wizard/lib/daemons/
lima-1.0b5/lib/help/wizard/lib/lfun/
lima-1.0b5/lib/help/wizard/lib/std/
lima-1.0b5/lib/help/wizard/mudos_doc/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/interactive/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/concepts/
lima-1.0b5/lib/help/wizard/mudos_doc/driver/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/arrays/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/buffers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/compile/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/filesystem/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/floats/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/functions/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/general/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mappings/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mixed/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/numbers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/constructs/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/types/
lima-1.0b5/lib/include/driver/
lima-1.0b5/lib/log/
lima-1.0b5/lib/obj/admtool/
lima-1.0b5/lib/obj/admtool/internal/
lima-1.0b5/lib/obj/admtool/mudinfo/
lima-1.0b5/lib/obj/admtool/secure/
lima-1.0b5/lib/obj/secure/
lima-1.0b5/lib/obj/secure/cmd/
lima-1.0b5/lib/obj/secure/mailers/
lima-1.0b5/lib/obj/secure/shell/
lima-1.0b5/lib/obj/secure/shell/classes/
lima-1.0b5/lib/obj/tasktool/
lima-1.0b5/lib/obj/tasktool/internal/
lima-1.0b5/lib/open/
lima-1.0b5/lib/secure/
lima-1.0b5/lib/secure/cgi/
lima-1.0b5/lib/secure/modules/
lima-1.0b5/lib/secure/simul_efun/
lima-1.0b5/lib/std/adversary/
lima-1.0b5/lib/std/adversary/advancement/
lima-1.0b5/lib/std/adversary/armor/
lima-1.0b5/lib/std/adversary/blows/
lima-1.0b5/lib/std/adversary/death/
lima-1.0b5/lib/std/adversary/formula/
lima-1.0b5/lib/std/adversary/health/
lima-1.0b5/lib/std/adversary/pulse/
lima-1.0b5/lib/std/adversary/wield/
lima-1.0b5/lib/std/classes/event_info/
lima-1.0b5/lib/std/container/
lima-1.0b5/lib/std/living/
lima-1.0b5/lib/std/modules/contrib/
lima-1.0b5/lib/std/patterns/
lima-1.0b5/lib/std/race/
lima-1.0b5/lib/std/race/restricted/
lima-1.0b5/lib/std/room/
lima-1.0b5/lib/tmp/
lima-1.0b5/lib/trans/
lima-1.0b5/lib/trans/admincmds/
lima-1.0b5/lib/trans/obj/
lima-1.0b5/lib/wiz/
/* Do not remove the headers from this file! see /USAGE for more info. */

inherit "/obj/admtool/internal/base.c";
inherit M_ANSI;

nomask string module_name() {
    return "I3 channels";
}

nomask string module_key() {
    return "i";
}

nomask string module_user() {
    return "[Mudlib:daemons]";
}

nomask string module_priv() {
    return "Mudlib:daemons";
}

private nomask void detail_list_channels()
{
  mapping chanlist = IMUD_D->query_chanlist();

  write("All Channels:\n");
  if ( sizeof(chanlist) == 0 )
  {
    write("    <none>\n");
    return;
  }

  write(implode(({ "" }) + sort_array(keys(chanlist),1),
      (: $1 + sprintf("    %-20s %-20s %s\n", $2,
      $(chanlist)[$2][0],
      $(({"unrestricted", "restricted", "filtered"}))[$(chanlist)[$2][1]],
      )
      :)));
}

private nomask void list_channels()
{
    mapping chanlist = IMUD_D->query_chanlist();

    chanlist = filter_mapping(chanlist,
			      (: $(chanlist)[$1][0] == mud_name() :));

    write("Owned Channels:");
    if ( sizeof(chanlist) == 0 )
    {
	write("    <none>\n");
	return;
    }

    write(implode(({ "" }) + sort_array(keys(chanlist),1),
		  (: $1 + sprintf("    %s/%s\n", $2,
				  $(({"unrestricted",
					  "restricted",
					  "filtered"}))[$(chanlist)[$2][1]])
		   :)));
}

private nomask void rcv_add_channel(string channel_name, int type)
{
  channel_name = lower_case(trim_spaces(channel_name));
  if ( channel_name == "" )
    return;

  if ( IMUD_D->query_chanlist()[channel_name] )
  {
    write("** That channel already exists.\n");
    return;
  }

  IMUD_D->add_channel(channel_name, to_int(type));
}

private nomask void rcv_remove_channel(string channel_name)
{
  mapping chanlist = IMUD_D->query_chanlist();

  channel_name = lower_case(channel_name);
  if ( undefinedp(chanlist[channel_name]) )
  {
    write("** That channel does not exist.\n");
    return;
  }

  IMUD_D->remove_channel(channel_name);
}

private nomask void rcv_listen_channel(string channel_name)
{
  mapping chanlist = IMUD_D->query_chanlist();

  channel_name = lower_case(channel_name);
  if (undefinedp(chanlist[channel_name]))
  {
     write("** That channel does not exist.\n");
     return;
  }
  IMUD_D->listen_to_channel(channel_name);
  write("Receiving channel: "+channel_name+"\n");
}

private nomask void rcv_ignore_channel(string channel_name)
{
  mapping chanlist = IMUD_D->query_chanlist();

  channel_name = lower_case(channel_name);
  if (undefinedp(chanlist[channel_name]))
  {
     write("** That channel does not exist.\n");
     return;
  }
  IMUD_D->ignore_channel(channel_name);
  write("Ignoring channel: "+channel_name+"\n");
}

private nomask void list_all_channels()
{
  mapping chanlist = IMUD_D->query_chanlist();

  write(colour_table(sort_array(keys(chanlist),1), this_user()->query_screen_width(), 4)+"\n");
}

private nomask void listened_channels()
{
  string *chanlist = sort_array(IMUD_D->query_listened_channels(),1);
  write(colour_table(chanlist, this_user()->query_screen_width(), 4)+"\n");
}

private nomask void allow_mud_on_our_channel(string channel_name, string allowed_mud_name)
{
  mapping chanlist = IMUD_D->query_chanlist();

  channel_name = lower_case(channel_name);
  if (undefinedp(chanlist[channel_name]))
  {
    write("** That channel does not exist.\n");
    return;
  }
  IMUD_D->allow_mud_on_our_channel(channel_name, allowed_mud_name);
}

private nomask void disallow_mud_on_our_channel(string channel_name, string  disallowed_mud_name)
{
  mapping chanlist = IMUD_D->query_chanlist();

  channel_name = lower_case(channel_name);
  if (undefinedp(chanlist[channel_name]))
  {
    write("** That channel does not exist.\n");
    return;
  }
  IMUD_D->disallow_mud_on_our_channel(channel_name, disallowed_mud_name);
}

private nomask void rcv_block_mud(string mudname)
{
  string array muds = IMUD_D->query_barred();

  mudname = IMUD_D->canon_mudname(mudname);
  if ( !mudname )
  {
    write("** That mud does not appear to exist.\n");
    return;
  }

  IMUD_D->add_barred(mudname);
}

private nomask void rcv_unblock_mud(string mudname)
{
  string array muds = IMUD_D->query_barred();

  mudname = IMUD_D->canon_mudname(mudname);
  if ( !mudname )
  {
    write("** That mud does not appear to exist.\n");
    return;
  }
  if (member_array(mudname, IMUD_D->query_barred())<0 )
  {
    write("** That mud does not appear to be barred.\n");
    return;
  }

  IMUD_D->remove_barred(mudname);
}

private nomask void list_blocked_muds()
{
  string array muds = IMUD_D->query_barred();

  write(colour_table(sort_array(muds,1), this_user()->query_screen_width(), 4)+"\n");
}

nomask class command_info array module_commands()
{
  return ({
    new(class command_info,
	    key : "O",
	    desc : "list owned channels",
	    action : (: list_channels :)),

    new(class command_info,
      key : "l",
      desc : "list channels which are being listened to",
      action : (: listened_channels :)),

    new(class command_info,
      key : "C",
      desc : "list all channels",
      action : (: list_all_channels :)),

    new(class command_info,
      key : "D",
      desc : "Detailed list of channels",
      action : (: detail_list_channels :)),

    new(class command_info,
	    key : "a",
	    proto : "[name] [type 0-2]",
	    desc : "add owned channel",
	    args : ({ "New channel name? ", "Add type (0 = unrestricted, 1 = restricted, 2 = filtered)" }),
	    action : (: rcv_add_channel :)),

   new(class command_info,
	    key : "r",
	    proto : "[name]",
	    desc : "remove owned channel",
	    args : ({ "Channel name to remove? " }),
	    action : (: rcv_remove_channel :)),

    new(class command_info,
      key : "A",
      proto : "[name]",
      desc : "allow mud to our owned channel",
      args : ({ "Channel name? ", "Allowed mud? " }),
      priv : "Mudlib:daemons",
      action : (: allow_mud_on_our_channel :)),

    new(class command_info,
      key : "D",
      proto : "[name]",
      desc : "disallow mud from our owned channel",
      args : ({ "Channel name? ", "Disallowed mud name? " }),
      priv : "Mudlib:daemons",
      action : (: disallow_mud_on_our_channel :)),

    new(class command_info,
      key: "L",
      proto : "[name]",
      desc  : "listen to an intermud channel",
      args  : ({ "Channel name to listen to? " }),
      action : (: rcv_listen_channel :)),

    new(class command_info,
      key: "I",
      proto : "[name]",
      desc  : "ignore an intermud channel",
      args  : ({ "Channel name to ignore? " }),
      action : (: rcv_ignore_channel :)),
      new(class command_info,

      key: "b",
      proto : "[name]",
      desc  : "block a mud from intermud queries",
      args  : ({ "Mud name to block? " }),
      priv : "Mudlib:daemons",
      action : (: rcv_block_mud :)),

      new(class command_info,
      key: "u",
      proto : "[name]",
      desc  : "unblock a mud from intermud queries",
      args  : ({ "Mud name to unblock? " }),
      priv : "Mudlib:daemons",
      action : (: rcv_unblock_mud :)),

      new(class command_info,
      key: "B",
      desc  : "list muds blocked from intermud queries",
      priv : "Mudlib:daemons",
      action : (: list_blocked_muds :)),

    });
}