#!/usr/bin/perl -w use CGI; # CGI-Modul laden $q = new CGI; require config; # config.pm in Dokument laden print $q->header(); # HTTP-Header erzeugen ##################################### ##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## ##################################### if ($var eq "input_html") { &input_html; } elsif ($var eq "post_msg") { &post_msg; } elsif ($var eq "change_room") { &change_room; } else { &error("Parameter fehlt"); } sub input_html { # Eingabemaske für den Chat. my ($reload,$action,$whisper,$lastmsg) = @_; $action = $q->param('action') if ($action eq ""); if ($tmp eq "away") { &zeit; &post("($hours:$min:$sec) $alias meldet sich zurück ... "); } elsif ($tmp eq "login") { &remove_rooms; &zeit; &post("($hours:$min:$sec) $alias hat den Chat betreten ..."); &log("logins","\"login_ok\""); } if ($action ne "" && $action ne "whisper" && $action ne "away") { print ""; } else { print ""; } print "
"; print "" if ($action eq "away"); print <
END if ($reload eq "true") { print < END } print $q->end_html; } sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde. $| = 1; # Cache von Perl ausschalten $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren $msg =~ s#kilahu#yChat#g; $msg =~ s#ooperle#per!#g; if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht $msg = "$alias: ".$msg.""; $msg =~ s#"#'#g; # " in ' umtauschen für den befehl "//" &input_html("true","",$id,$msg); # -> Reload=true, Action=none, Whisper=$id &secure_checkip($alias,1); &post($msg); } else { &secure_checkip($alias,2); &cmd($msg); } } sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können. $_[0] = $_[0]." "; $_[0] = substr($_[0], 1, length($_[0])-1); my @cmd = split(/ /, $_[0]); my $cmd = substr($_[0],0 , index($_[0], " ")); my ($reload,$action,$whisper) = ("true","",$id); #############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< #############>- DER LETZTEN ZUGEFLÜSTERTEN PERSON NOCHEINMAL FLÜSTERN -< if ($cmd eq "/") { &post($q->param('lastmsg')); #############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< } elsif ($cmd eq "about") { &post_prv("$alias","Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k."); #############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< } elsif ($cmd eq "away") { if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde $tmp = ""; } for ($i=1; $i <= $#cmd; $i++) { $tmp = $tmp." ".$cmd[$i]; } &zeit; &post("($hours:$min:$sec) $alias meldet sich ab ($tmp ) ..."); $action = "away"; #############>- EIGENEN CHATBILDSCHIRM LÖSCHEN -< } elsif ($cmd eq "clear") { &post_prv("$alias",""); #############>- FARBEN WECHSELN -< } elsif ($cmd eq "col") { $col = $cmd[1]; my $tmpsecol = $cmd[2]; if ($tmpsecol eq "") { $secol = $col } else { $secol = $tmpsecol; } &read_file("data/user/options/$alias"); my @pro = ; close DATEI; &write_file_new("data/user/options/$alias"); print DATEI $pro[0]."".$col."\n".$secol; close DATEI; &log("system","\"edit_colors_ok\""); &zeit; &post("($hours:$min:$sec) $alias hat die Farbe gewechselt ..."); $action = "change_colors"; #############>- AKTUELLES DATUM UND URZEIT AUSGEBEN -< } elsif ($cmd eq "date") { &zeit; &post_prv("$alias","Heute ist der $day.$month. Jahr $year. Es ist genau $hours:$min Uhr und $sec Sekunden."); #############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< } elsif ($cmd eq "j") { &change_room("j",$cmd[1],$room); $action = "change_room"; #############>- HANDELN -< } elsif ($cmd eq "me" || $cmd eq "m") { for ($i=1; $i <= $#cmd; $i++) { $me_msg = $me_msg." ".$cmd[$i]; } if ($cmd eq "m") { &post("$alias $me_msg"); } else { &post("$alias $me_msg"); } #############>- FLÜSTERN ( Auch mit '/' ) -< } elsif ($cmd eq "msg" || $cmd eq "") { my ($alias2post,$msg2post) = ($cmd[1],""); if ($cmd eq "msg") { for ($i=2; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } } else { $alias2post = $id; for ($i=1; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } } &list_dir("data/online/users"); foreach(@dir) { if ($_ eq $alias2post) { &write_file("data/msgs/$alias2post"); print DATEI "$alias flüstert =>$msg2post
\n"; close DATEI; &write_file("data/msgs/$alias"); print DATEI "Zu $alias2post geflüstert =>$msg2post
\n"; close DATEI; &input_html($reload,"",$alias2post); exit; } } &post_prv("$alias","$alias2post ist momentan nicht anwesend !"); #############>- DAS SYSTEM VERLASSEN -< } elsif ($cmd eq "q") { &post_prv("$alias",""); sleep 1; &remove_online($alias,$room); &secure_removeip($alias); unlink("data/msgs/$alias"); exit; #############>- SCHREIEN -< } elsif ($cmd eq "s") { my ($msg2scream,$msg2post); for ($i=1; $i <= $#cmd; $i++) { $msg2scream = $msg2scream." ".$cmd[$i]; } $msg2post = "\U$msg2scream"; &post("$alias schreit: ".$msg2post.""); #############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< } elsif ($cmd eq "w") { &list_dir("data/online/rooms/$room"); my ($is,$nr) = ("t",0); foreach(@dir) { if (-f "data/online/rooms/$room/$_") { $personen = $personen." ".$_; $nr++; } } if ($nr != 1) { $nrs = "en"; $is = "n"; } &post_prv("$alias","$nr Person$nrs befinde$is sich im aktuellen Raum (\"$room\"): $personen"); #############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< } elsif ($cmd eq "wc" || $cmd eq "wc/") { $raum = $cmd[1]; if ($raum eq "" && $cmd eq "wc") { &list_dir("data/online/users"); foreach(@dir) { $personen = $personen." ".$_ if (-f "data/online/users/$_"); } my $nr = ($#dir-1); my ($nrs,$is) = ("","ist"); if ($nr != 1) { $nrs = "en"; $is = "sind"; } &post_prv("$alias","$nr Person$nrs $is insgesamt eingelogt: $personen"); } elsif ($raum eq "" && $cmd eq "wc/") { my $msg2post; &list_dir("data/online/rooms"); foreach(@dir) { if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { &list_dir("data/online/rooms/$_",2); my $nr = $#dir2-1; $msg2post = $msg2post."$_ ($nr)"; foreach $chatter (@dir2) { if (-f "data/online/rooms/$_/$chatter") { $msg2post = $msg2post."$chatter "; } } print ""; } } &post_prv("$alias","Folgende Räume sind offen:$msg2post
"); } elsif ($raum ne "") { my $personen; &list_dir("data/online/rooms/$raum"); foreach(@dir) { $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_"); } my ($nr,$is) = (($#dir-1),"t"); if ($nr != 1) { $nrs = "en"; $is = "n"; } &post_prv("$alias"," $nr Person$nrs befinde$is sich im Raum \"$raum\": $personen"); } #############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< } elsif ($cmd eq "wj" || $cmd eq "ju") { my $alias2search = $cmd[1]; &list_dir("data/online/rooms"); foreach $raum (@dir) { &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum"); foreach $user (@dir2) { if (-f "data/online/rooms/$raum/$user") { if ($user eq $alias2search) { if ($cmd eq "wj") { &post_prv("$alias","$alias2search befindet sich im Raum \"$raum\" !"); } else { $action = "change_room"; &change_room("ju",$raum,$room,$alias2search); } &input_html($reload,$action,$whisper); exit; } } } } &post_prv("$alias","$alias2search ist nicht eingelogt !"); #############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< #############>- ALIAS VERBANNEN BZW. ENTBANNEN -< } elsif ($cmd eq "ban" || $cmd eq "rban") { &hirachie($alias); if ($hirachie eq "ow") { my ($alias2handle,$registriert) = $cmd[1]; &list_dir("data/user/options"); foreach(@dir) { $registriert = "true" if ($_ eq $alias2handle); } if ($registriert ne "true") { if ($cmd eq "ban") { if ($alias2handle ne "") { &post_prv("$alias","$alias2handle existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !"); } else { &read_file("data/ban"); my @banned = ; my ($benutzer); my $nr = $#banned+1; close DATEI; foreach(@banned) { $benutzer = $benutzer." ".$_; } &post_prv("$alias","Folgende Benutzer sind verbannt [$nr]: $benutzer"); } } else { &post_prv("$alias","$alias2handle existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !"); } &input_html("true"); exit; } &read_file("data/ban"); my @banlist = ; close DATEI; foreach(@banlist) { if ($_ eq "$alias2handle\n") { if ($cmd eq "ban") { &post_prv("$alias","$alias2handle ist bereits verbannt worden !"); } else { my $banned = "false"; foreach(@banlist) { $banned = "true" if ($_ eq "$alias2handle\n"); } if ($banned eq "true") { my @newbanlist; foreach(@banlist) { push @newbanlist,$_ if ($_ ne "$alias2handle\n"); } &write_file_new("data/ban"); print DATEI @newbanlist; close DATEI; &post_prv("$alias","$alias2handle wurde soeben \"entbannt\" !"); &log("system","\"ow_rban_$alias2handle_ok\""); } } &input_html("true"); exit; } } if ($cmd eq "ban") { &hirachie($alias2handle); if ($hirachie ne "ow") { &write_file("data/ban"); print DATEI "$alias2handle\n"; close DATEI; &post_prv("$alias","$alias2handle wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !"); &log("system","\"ow_ban_".$alias2handle."_ok\""); } else { &post_prv("$alias","$alias2handle ist ein Oberwächter und kann deshalb nicht verbannt werden !"); &log("system","\"ow_ban_".$alias2handle."_ow\""); } } else { &post_prv("$alias","$alias2handle konnte nicht \"entbannt\" werden, da $alias2handle garnicht verbannt war !"); } } #############>- IP # VON ALIAS ANZEIGEN LASSEN -< } elsif ($cmd eq "ip") { &hirachie($alias); if ($hirachie eq "ow") { my $alias2prove = $cmd[1]; &list_dir("data/online/ident"); foreach(@dir) { if ($_ eq $alias2prove) { &read_file("data/online/ident/$_"); local $ipnr = ; close DATEI; &post_prv("$alias","$_ hat die IP-Nummer $ipnr !"); } } } #############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< } elsif ($cmd eq "k") { &hirachie($alias); if ($hirachie eq "wa" || $hirachie eq "ow") { my $alias2kick = $cmd[1]; &list_dir("data/online/rooms"); foreach $raum (@dir) { &list_dir("data/online/rooms/$raum",2); foreach $chatter (@dir2) { if ($chatter eq $alias2kick) { &hirachie($alias2kick); if ($hirachie eq "ow") { &post_prv("$alias","$alias2kick ist Oberwächter und kann nicht \"gekickt\" werden !"); &log("system","wa_k_$alias2kick_ow"); #!! } elsif ($hirachie eq "wa") { &post_prv("$alias","$alias2kick ist Wächter und kann nicht \"gekickt\" werden !"); &log("system","wa_k_$alias2kick_ow"); #!! } else { &post_prv("$alias2kick",""); &zeit; $_ = undef if ($room eq $_); &post("($hours:$min:$sec) $alias katapultiert \"$alias2kick\" aus dem Chat ...",$_); &log("system","wa_k_$alias2kick"); #!! &remove_online($alias2kick,$_,"kick"); &secure_removeip($alias2kick); } &input_html("true"); exit; } } } &post_prv("$alias","$alias2kick ist nicht anwesend und kann nicht \"gekickt\" werden !"); } #############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -< } elsif ($cmd eq "sys") { &hirachie($alias); if ($hirachie eq "ow") { for ($i=1; $i <= $#cmd; $i++) { $sys_msg = $sys_msg." ".$cmd[$i]; } &zeit; &post_all("($hours:$min:$sec) SYSTEMNACHRICHT: $sys_msg ..."); &log("system","\"sys_msg_$room\""); } #############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -< } elsif ($cmd eq "wa" || $cmd eq "rwa") { &hirachie($alias); if ($hirachie eq "ow") { &zeit; my $alias2handle = $cmd[1]; if ($cmd eq "wa") { my $anerkennen = "false"; &list_dir("data/user/options"); foreach(@dir) { if ($_ eq $alias2handle) { $anerkennen = "true"; } } if ($anerkennen eq "true") { &hirachie($alias2handle); if ($hirachie eq "wa") { &post_prv("$alias","$alias2handle ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!"); &log("system","\"oh_wa_".$alias2handle."_exists\""); } elsif ($hirachie eq "ow") { &post_prv("$alias","$alias2handle ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!"); &log("system","\"oh_wa_".$alias2handle."_oh-exists\""); } else { &write_file("data/wa"); print DATEI $alias2handle."\n"; close DATEI; &post("($hours:$min:$sec) $alias ernennt \"$alias2handle\" zum Wächter ..."); &log("system","\"oh_wa_".$alias2handle."_ok\""); } } else { &post_prv($alias,"$alias2handle kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!"); &log("system","\"oh_wa_".$alias2handle."_notexists\""); } } elsif ($cmd eq "rwa") { &read_file("data/wa"); my @wafile = ; close DATEI; my $aberkennen = "false"; foreach(@wafile) { if ($_ ne "$alias2handle\n") { push @newafile,$_; } else { $aberkennen = "true"; } } &write_file_new("data/wa"); print DATEI @newafile; close DATEI; if ($aberkennen eq "true") { &post("($hours:$min:$sec) $alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ..."); &log("system","\"oh_rwa_".$alias2handle."_ok\""); } else { &post("$alias2handle konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!"); &log("system","\"oh_rwa_".$alias2handle."_notexists\""); } } } #############>- ENDE DER CHATBEFEHLE -< } &input_html($reload,$action,$whisper); } sub change_room { # Den Chat-Raum wechseln my ($method,$newroom,$oldroom,$alias2follow) = @_; $room = $oldroom; &secure_checkip($alias); # IP Nummer überprüfen &zeit; # Zeit 'erneuern' if ($method eq "j") { unlink("data/online/rooms/$oldroom/$alias"); &post("($hours:$min:$sec) $alias wechselt in den Raum \"$newroom\" ..."); $room = $newroom; &post("($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ..."); &post_prv("$alias","($hours:$min:$sec) Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ..."); } elsif ($method eq "ju") { unlink("data/online/rooms/$oldroom/$alias"); &post("($hours:$min:$sec) $alias folgt \"$alias2follow\" in den Raum \"$newroom\" ..."); $room = $newroom; &post("($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ..."); &post_prv("$alias","($hours:$min:$sec) Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ..."); } &rm_rooms; }