Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- # SDF-COMMODE AUTO MODARATOR
- use Net::Telnet;
- #use strict;
- use warnings;
- # allowed masters
- my @masters = ( 'pi','i0n','smj');
- # BAD GUYS
- my @enemys= ( '' );
- # Varible Declarations
- my $server = "";
- my $buffer ="";
- #Authentication info
- my $host = 'sdf.lonestar.org';
- my $username = 'comzor';
- my $password = 'comzor2008';
- # Function for checking username against list of masters
- sub enemy_check {
- my $name = shift;
- # if submited with server, strip it out (warning: this is sloppy :P
- if ($name =~ m/@/) { $name =~ s/@.*$//; }
- foreach $enemy (@enemys) {
- if ($enemy =~ $name) {
- return 1;
- }
- }
- return 0;
- }
- sub master_check {
- my $name = shift;
- # #loop through array and compare
- # # return 1 if master, 0 if not
- foreach my $mast (@masters) {
- if ($mast eq $name) {
- return 1;
- }
- }
- return 0;
- }
- # usage: psh_login($user,$pass)
- sub psh_login {
- my $user= shift;
- my $pass = shift;
- #login to sdf, conect to a preval shell, and start com
- $server = new Net::Telnet (Prompt => '/(.){1,4}/');
- $server->open($host) or die "connect:[ $! ]";
- $server->waitfor('/login:.*$/') or die "waiting for login...";
- $server->print("$user");
- $server->waitfor('/Password:.*$/') or die "waiting for pass...";
- $server->print("$pass");
- $server->waitfor('/Please\spress\syour\sBACKSPACE\skey:.*$/') or die "waiting for backspace prompt...";
- $server->print("\b");
- $server->waitfor('/\[CONTINUE\].*$/');
- $server->print("");
- $server->waitfor('/sdf/') or die "waiting for shell prompt...";
- $server->print("com");
- $server->waitfor('/COMMODE/');
- }
- psh_login($username, $password, $host) or die "login: $1 ";
- # function for returning users in a room
- sub who_in {
- my $room = shift;
- #my $who_buffer = "";
- #my $buf = "";
- my @who;
- # set the timeout to 5 seconds
- $server->timeout(5);
- # Ask COMMODE whos in the room
- $server->print("W$room");#$my_cap = 0;
- # read a line from the input buffer untill it finds 3 blank lines
- do {
- $buf = $server->getline();
- if ($buf eq "") { $my_cap++;} else {
- $who_buffer = $who_buffer . $buf;
- }
- } until ( $my_cap = 4 );
- # replace spaces or newlines to a single space
- $who_buffer =~ s/(\s|\n)+?/\s/m;
- #split $who_buffer by spaces into the @who array
- @who = split(/\s/, $who_bufer);
- #set the timeout back to endless
- $server->timeout(undef);
- $server->print("@who");
- }
- print "WARNING: Endlessloop...\n\n";
- #Set the server not to time-out on an endless read
- $server->timeout(undef);
- #DONT SPAM LOBBY
- $server->print("gbotlab");
- #Empty input buffer to save processing time
- $server->buffer_empty;
- # Start a loop while $server exists
- do {
- #read input buffer one line at a time
- $buffer = $server->getline();
- # strip esc chars
- $buffer =~ s/\e\[[\d+\;?]+m//;
- $buffer =~ s/\e\[\d+m//;
- ### Command Function Parsing ###
- # test funtion 1 pm enabled
- if ($buffer =~ m/\!poke/) {
- $server->print("vROAR!!!! ");
- }
- # Goto function (master protected) Pm enabled
- elsif ($buffer =~ m/^[\[|\*](.{1,8})[\]|\*]\s{1,8}!g\s(.*)/ ) {
- if ((master_check($1)) == 1) {
- $server->print("v yes, $1");
- $server->print("g$2");
- } else { $server->print("vYour not my master."); };
- }
- # PM Bomb (master protected) pm enabled
- elsif ($buffer =~ m/^[\[|\*](.{1,8})[\]|\*]\s{1,8}!b\s(.*)\-\-(.*)/) {
- if ((master_check($1)) == 1) {
- for (1 .. 20) {
- $server->print("s$2");
- $server->print("$3");
- }
- } else { $server->print("vYou're not my master."); };
- }
- #Dump this code (master enabled)
- elsif ($buffer =~ m/^[\[|\*](.{1,8})[\]|\*]\s{1,8}!dump/) {
- if ((master_check($1)) == 1) {
- # open itself and print contents to com
- open (ME, $0) or $server->("vERROR: [ $! ]");
- while (<ME>) {
- #if string contains password, replace with set amount of x's
- s/$password/XXXXXXXXXXXXXXXXXX/;
- $server->put("v$_");
- sleep 1;
- }
- close ME;
- } else { $server->print("vYou're not my master."); };
- }
- # Auto Zap (enemy aware)
- elsif ($buffer =~ m/^\[\d{2}:\d{2}:\d{2}\]\s(.*)\shas\sjoined\s/ ) {
- if ((enemy_check($1)) == 1) {
- $server->print("Z$1");
- $server->print("accessdenied");
- } else { #$server->print("v$1 clear");
- }
- }
- #Netris Cheat (master protected) pm enabled --STILL UNDER DEVOLPMENT--
- elsif ($buffer =~ m/^[\[|\*](.{1,8})[\]|\*]\s{1,8}!n\s(.*)/) {
- if ((master_check($1)) == 1) {
- $server->print("n$2");
- sleep 1;
- for (1 .. 5) {
- $buffer = $buffer . $server->getline();
- }
- $buffer = $server->getline ;
- if ($buffer =~ m/you\sare\sin/) {
- $server->print("vnotvalidplayer");
- } else {
- $server->waitfor('/Netris/');
- $server->print("<drop>") x 20;
- #flush netris game from input buffer
- $server->buffer_empty;
- }
- } else { $server->print("vYou're not my master."); };
- }
- # who test
- elsif ($buffer =~ m/^[\[|\*](.{1,8})[\]|\*]\s{1,8}!w\s(.*)/) {
- my @test = who_in($2);
- $server->print("v@test");
- }
- # exit command (master checked) pm enabled
- elsif ($buffer =~ m/^[\[|\*](.{1,8})[\]|\*]\s{1,8}!q/) {
- if ((master_check($1)) == 1) {
- $server->print("vBye, Bye!");
- sleep 1;
- $server->put("q");
- $server->print("logout");
- die;
- } else { $server->print("vYou're not my master."); };
- }
- #elsif ($THIS_SHOULD_NOT_HAPPEN) {
- #die "huh?";
- #}
- else {
- #$server->print("a error: command not reconized");
- }
- ################################
- print "$buffer";
- $buffer = "";
- } while ($server);
- #this last newline must be here for !dump ThAnks for reading
Add Comment
Please, Sign In to add comment