/** * mailtool.c * The Mail Control Tool * for the Admtool * Shaydz 02 Apr '00 * @changed Made most of it work - Sandoz, 21/07/2002. */ #include <colors.h> #include <mail.h> inherit COMMAND_BASE; private mapping return_mapping = ([ ]); private string main_menu_template = @END ------------------------------------------------------------------------- %s ------------------------------------------------------------------------- %sCommand Status%s [1] Add Player(s) to a Mailing List %s [2] Remove Player(s) from a Mailing List %s [3] Add Controller to a Mailing List %s [4] Remove Controller from a Mailing List %s [5] Create a NEW Mailing List %s [6] Delete a Mailing List %s [7] Display Current Mailing Lists %s END; private string main_prompt = "Enter your command [1-7], or [Q] to quit: "; private string main_prompt2 = "Enter your command [1-7], [B] to go back, or [Q] to quit: "; // Function prototypes. int cmd( string str ); private void get_command( string str ); private void add_player(); private void add_player2( string str ); private void add_player3( string str, string list ); private void del_player(); private void del_player2( string str ); private void del_player3( string str, string list ); private void add_controller(); private void add_controller2( string str ); private void add_controller3( string str, string list ); private void del_controller(); private void del_controller2( string str ); private void del_controller3( string str, string list ); private void new_list(); private void new_list2( string str ); private void new_list3( string str, string list ); private void del_list(); private void del_list2( string str ); private void del_list3( string str, string list ); private void list_lists(); private void list_lists2( string str ); private void display_menu() { string title, s1, s2, s3, s4, s5, s6, s7; title = sprintf("%s%|72s%s", YELLOW, mud_name()+" Mailer Control " "Tool v1.5", RESET ); s1 = s2 = s3 = s4 = s5 = s6 = s7 = RED+"Unavailable"+RESET; if( creatorp(TP) ) s7 = GREEN+"Available"+RESET; if( lordp(TP) ) s1 = s2 = s5 = GREEN+"Available"+RESET; if( adminp(TP) ) s3 = s4 = s6 = GREEN+"Available"+RESET; tell_object( TP, sprintf( main_menu_template, title, BOLD, RESET, s1, s2, s3, s4, s5, s6, s7 ) ); } /* display_menu() */ private void do_prompt() { tell_object( TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2 ); input_to( (: get_command :) ); } /* do_prompt() */ private void add_player() { if( !lordp(TP) ) { tell_object( TP, RED+"\nYou don't have the power to do that.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the mailing list to add a player to: "); input_to( (: add_player2 :) ); } /* add_player()*/ private void add_player2( string str ) { if( !str || str == "") return do_prompt(); str = lower_case(str); if( !MAIL_TRACK->query_list(str) ) { tell_object( TP, RED+"The mailing list "+CAP(str)+" does NOT " "exist!\n\n"+RESET); return do_prompt(); } if( !MAIL_TRACK->query_controlled_list(str) ) { tell_object( TP, RED+"You can't add members to "+ CAP(str)+" because it isn't a controlled list.\n\n"+RESET ); return do_prompt(); } tell_object( TP, "Enter the player's name or a comma separated list if " "more than one: "); input_to( (: add_player3( $1, $(str) ) :) ); } /* add_player2() */ private void add_player3( string str, string list ) { string *names, name; if( !str || str == "") return do_prompt(); if( !MAIL_TRACK->query_controller( list, TP->query_name() ) && !adminp(TP) ) { tell_object( TP, RED+"You must be the controller of the list to add " "members to it!\n\n"+RESET ); return do_prompt(); } names = explode( replace( lower_case(str), " ", ","), ",") - ({""}); if( !sizeof(names) ) { tell_object( TP, RED+"You need to specify the name(s) to " "add.\n\n"+RESET); return do_prompt(); } foreach( name in names ) { name = lower_case( TP->expand_nickname(name) ); if( !PLAYER_H->test_user(name) && !MAIL_TRACK->query_list(name) ) write(RED+"The player "+CAP(name)+" does not exist.\n"+RESET); else if( MAIL_TRACK->query_member( list, name ) ) write(RED+CAP(name)+" is already a member of "+CAP(list)+".\n"+ RESET); else if( MAIL_TRACK->add_member( list, name ) ) write(GREEN+"Added "+CAP(name)+" to "+CAP(list)+".\n"+RESET); else write(RED+"Failed to add "+CAP(name)+" to "+CAP(list)+".\n"+ RESET); } return do_prompt(); } /* add_player3() */ private void del_player() { if( !lordp(TP) ) { tell_object( TP, RED+"\nYou don't have the power to do that.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the mailing list to remove a member " "from: "); input_to( (: del_player2 :) ); } /* del_player() */ private void del_player2( string str ) { if( !str || str == "") return do_prompt(); str = lower_case(str); if( !MAIL_TRACK->query_list(str) ) { tell_object( TP, RED+"The mailing list "+CAP(str)+" does NOT " "exist!\n\n"+RESET); return do_prompt(); } if( !MAIL_TRACK->query_controlled_list(str) ) { tell_object( TP, RED+"You can't remove members from "+ CAP(str)+" because it isn't a controlled list.\n\n"+RESET ); return do_prompt(); } tell_object( TP, "Enter the player's name or a comma separated list if " "more than one: "); input_to( (: del_player3( $1, $(str) ) :) ); } /* del_player2() */ private void del_player3( string str, string list ) { string *names, name; if( !str || str == "") return do_prompt(); if( !MAIL_TRACK->query_controller( list, TP->query_name() ) && !adminp(TP) ) { tell_object( TP, RED+"You must be the controller of the list to " "remove members from it!\n\n"+RESET ); return do_prompt(); } names = explode( replace( lower_case(str), " ", ","), ",") - ({""}); if( !sizeof(names) ) { tell_object( TP, RED+"You need to specify the name(s) to " "remove.\n\n"+RESET); return do_prompt(); } foreach( name in names ) { name = lower_case( TP->expand_nickname(name) ); if( MAIL_TRACK->query_controller( list, name ) ) write(RED+CAP(name)+" is a controller of "+CAP(list)+", please " "remove them as a controller first.\n"+RESET); else if( MAIL_TRACK->remove_member( list, name ) ) write(GREEN+"Removed "+CAP(name)+" from "+CAP(list)+".\n"+RESET); else write("Failed to remove "+CAP(name)+" from "+ CAP(list)+".\n"+RESET); } return do_prompt(); } /* del_player3() */ private void add_controller() { if( !adminp(TP) ) { tell_object( TP, RED+"\nYou don't have the power to do that.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the mailing list to add a controller " "to: "); input_to( (: add_controller2 :) ); } /* add_controller()*/ private void add_controller2( string str ) { if( !str || str == "") return do_prompt(); str = lower_case(str); if( !MAIL_TRACK->query_list(str) ) { tell_object( TP, RED+"The mailing list "+CAP(str)+" does NOT " "exist!\n\n"+RESET); return do_prompt(); } if( !MAIL_TRACK->query_controlled_list(str) ) { tell_object( TP, RED+"You can't add controllers to "+ CAP(str)+" because it isn't a controlled list.\n\n"+RESET ); return do_prompt(); } tell_object( TP, "Enter the player's name to add as a controller: "); input_to( (: add_controller3( $1, $(str) ) :) ); } /* add_controller2() */ private void add_controller3( string name, string list ) { if( !name || name == "") return do_prompt(); if( !adminp(TP) ) { tell_object( TP, RED+"You must be an admin to add controllers to " "mailing lists!\n\n"+RESET ); return do_prompt(); } name = lower_case( TP->expand_nickname(name) ); if( MAIL_TRACK->query_controller( list, name ) ) write(RED+CAP(name)+" is already a controller of "+ CAP(list)+".\n\n"+RESET); else if( !PLAYER_H->test_user(name) ) write(RED+"The player "+CAP(name)+" does not exist.\n\n"+RESET); else if( MAIL_TRACK->add_controller( list, name ) ) write(GREEN+"Added "+CAP(name)+" as a controller to "+ CAP(list)+".\n\n"+RESET); else write(RED+"Failed to add "+CAP(name)+" as a controller to "+ CAP(list)+".\n\n"+RESET); return do_prompt(); } /* add_controller3() */ private void del_controller() { if( !adminp(TP) ) { tell_object( TP, RED+"\nYou don't have the power to do that.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the mailing list to remove a " "controller from: "); input_to( (: del_controller2 :) ); } /* del_controller() */ private void del_controller2( string str ) { if( !str || str == "") return do_prompt(); str = lower_case(str); if( !MAIL_TRACK->query_list(str) ) { tell_object( TP, RED+"The mailing list "+CAP(str)+" does NOT " "exist!\n\n"+RESET); return do_prompt(); } if( !MAIL_TRACK->query_controlled_list(str) ) { tell_object( TP, RED+"You can't remove controllers from "+ CAP(str)+" because it isn't a controlled list.\n\n"+RESET ); return do_prompt(); } tell_object( TP, "Enter the player's name to remove as a controller: "); input_to( (: del_controller3( $1, $(str) ) :) ); } /* del_controller2() */ private void del_controller3( string name, string list ) { if( !name || name == "") return do_prompt(); if( !adminp(TP) ) { tell_object( TP, RED+"You must be an admin to remove controllers " "from mailing lists!\n\n"+RESET ); return do_prompt(); } name = lower_case( TP->expand_nickname(name) ); if( !MAIL_TRACK->query_controller( list, name ) ) write(RED+CAP(name)+" is not a controller of "+ CAP(list)+".\n\n"+RESET); else if( MAIL_TRACK->remove_controller( list, name ) ) write(GREEN+"Removed "+CAP(name)+" as a controller from "+ CAP(list)+".\n"+RESET); else write("Failed to remove "+CAP(name)+" as a controller from "+ CAP(list)+".\n"+RESET); return do_prompt(); } /* del_controller3() */ private int check_valid_name( string str ) { int i; for( i = 0; i < strlen(str); i++ ) if( str[i] < 'a' || str[i] > 'z') return i; return -1; } /* check_valid_name() */ private void new_list() { if( !lordp(TP) ) { tell_object( TP, RED+"\nYou don't have the power to do that.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the new mailing list: "); input_to( (: new_list2 :) ); } /* new_list() */ private void new_list2( string str ) { int i; if( !str || str == "") return do_prompt(); str = lower_case(str); if( MAIL_TRACK->query_list(str) ) { tell_object( TP, RED+"The mailing list "+CAP(str)+" already " "exists!\n\n"+RESET); return do_prompt(); } if( ( i = check_valid_name(str) ) != -1 ) { tell_object( TP, RED+"Invalid character '"+str[i..i]+"' in the " "proposed list name ("+str+").\n\n"+RESET); return do_prompt(); } tell_object( TP, "Are you sure you want to create a new mailing list " "called '"+CAP(str)+"'? [Y|N] :"); input_to( (: new_list3( $1, $(str) ) :) ); } /* new_list2() */ private void new_list3( string str, string list ) { if( !str || str == "" || lower_case(str) != "y") return do_prompt(); if( !MAIL_TRACK->create_list( list, TP->query_name() ) ) { tell_object( TP, RED+"Failed to create the list "+ CAP(list)+"!\n\n"+RESET); return do_prompt(); } tell_object( TP, GREEN+"Successfully created the mailing list.\n\n"+ RESET); return do_prompt(); } /* new_list3() */ private void del_list() { if( !adminp(TP) ) { tell_object( TP, RED+"\nYou don't have the power to do that.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the mailing list to delete: "); input_to( (: del_list2 :) ); } /* del_list() */ private void del_list2( string str ) { if( !str || str == "") return do_prompt(); str = lower_case(str); if( !MAIL_TRACK->query_list(str) ) { tell_object( TP, RED+"The mailing list "+CAP(str)+" doesn't " "exist!\n\n"+RESET); return do_prompt(); } if( !MAIL_TRACK->query_controlled_list(str) ) { tell_object( TP, RED+"The mailing list "+CAP(str)+" isn't a " "controlled list and cannot be deleted!\n\n"+RESET); return do_prompt(); } tell_object( TP, "Are you sure you want to delete the mailing " "list '"+CAP(str)+"'? [Y|N] :"); input_to( (: del_list3( $1, $(str) ) :) ); } /* del_list2() */ private void del_list3( string str, string list ) { if( !str || str == "" || lower_case(str) != "y") return do_prompt(); if( !MAIL_TRACK->delete_list( list ) ) { tell_object( TP, RED+"Failed to delete the list "+ CAP(list)+"!\n\n"+RESET); return do_prompt(); } tell_object( TP, GREEN+"Successfully deleted the mailing list.\n\n"+ RESET); return do_prompt(); } /* del_list3() */ private void list_lists() { tell_object( TP, "Enter the name of a mailing list for info or return " "for a list of lists: "); input_to( (: list_lists2 :) ); } /* list_lists() */ private void list_lists2( string str ) { string *members, *controllers; if( !str || str == "") { tell_object( TP, "\n"+create_table( ({"Mailing Lists", "mailing list"}), map( MAIL_TRACK->query_mailing_lists(), (: CAP($1)+( MAIL_TRACK->query_controlled_list($1) ? "(*)" : "") :) ), 0 ) ); return do_prompt(); } if( !MAIL_TRACK->query_list(str) ) { tell_object( TP, RED+"The mailing list "+CAP(str)+" does " "not exist!\n\n"+RESET); return do_prompt(); } controllers = MAIL_TRACK->query_controllers(str); members = map( MAIL_TRACK->query_members(str) - controllers, (: CAP($1) :) ); controllers = map( controllers, (: CAP($1)+"(*)" :) ); tell_object( TP, "\n"+create_table( ({"Members of "+ CAP(str)+" mailing list", "member" }), controllers + members, 0 ) ); return do_prompt(); } /* list_lists2() */ private void get_command( string str ) { if( !str ) { display_menu(); return do_prompt(); } switch( str ) { case "1": if( !lordp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this " "option.\n"+RESET); return do_prompt(); } add_player(); break; case "2": if( !lordp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this " "option.\n"+RESET); return do_prompt(); } del_player(); break; case "3": if( !adminp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this " "option.\n"+RESET); return do_prompt(); } add_controller(); break; case "4": if( !adminp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this " "option.\n"+RESET); return do_prompt(); } del_controller(); break; case "5": if( !lordp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this " "option.\n"+RESET); return do_prompt(); } new_list(); break; case "6": if( !adminp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this " "option.\n"+RESET); return do_prompt(); } del_list(); break; case "7": list_lists(); break; case "B": case "b": if( !return_mapping[TP] ) { display_menu(); return do_prompt(); } return_mapping[TP]->cmd(""); map_delete( return_mapping, TP ); break; case "Q": case "q": break; default: display_menu(); return do_prompt(); } } /* get_command() */ /** @ignore yes */ int cmd( string str ) { if( file_name(PO) == "/secure/cmds/creator/admtools") return_mapping[TP] = PO; display_menu(); do_prompt(); return 1; } /* cmd() */