#!/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 "
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:");
} 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;
}