#!/usr/bin/perl # yChat - Copyright by Paul C. Bütow use CGI; $q = new CGI; print $q->header(); $alias = $q->param("alias"); $tmpid = $q->param("tmpid"); { open(IDENT,"; close IDENT; if ($ident[1] ne $tmpid) { &error("Falsche TempID ! Du bist nicht befugt zu handeln!"); } } $room = $q->param("room"); $col = $q->param("col"); $secol = $q->param("secol"); $tmp = $q->param("tmp"); $rmsg = \$q->param("msg"); if ($tmp eq "away") { require config; &rm_away($alias,$room); &zeit; &post($room,"($hours:$min:$sec) $alias hat sich zurück gemeldet ... "); } if ($q->param('var') eq "change_colors") { &reload_html("change_colors") } unless (-e "data/online/rooms/$room/$alias") { require config; &post_prv($alias,"Du befindest Dich nicht im Raum \"$room\" und kannst dort auch keine Nachrichten posten!"); &reload_html; } elsif (length($$rmsg) > 300) { require config; &post_prv($alias,"Deine Nachricht enthält zu viele Zeichen. Maximal sind 300 Zeichen erlaubt."); &reload_html; } $$rmsg =~ s#<#<\;#g; if (substr($$rmsg,0,1) ne "/") { open MSGFILE,">>data/msgs/$room"; unless ($$rmsg =~ s#/me/#$alias#g || $$rmsg =~ s#/m/#$alias#g) { print MSGFILE "!<;".time."<;!<;!<;$alias: $$rmsg<;\n"; } else { $$rmsg =~ s#/me/#$alias#g; $$rmsg =~ s#/m/#$alias#g; print MSGFILE "!<;".time."<;!<;!<;$$rmsg<;\n"; } close MSGFILE; opendir PID,"data/online/pids/$room"; my @pids = readdir(PID); closedir(PID); foreach(@pids) { if (-f "data/online/pids/$room/$_") { kill USR1 => $_; } } require config; &log("$alias: $$rmsg") if ($room eq "Cyberbar"); &reload_html; } else { &cmd($$rmsg); } sub reload_html { # Wird neugeladen, wenn eine Nachricht getextet wird! my ($action,$whisper) = @_; print ""; print $q->end_html; exit 0; } sub change_room { # Den Chat-Raum wechseln my ($method,$newroom,$oldroom,$alias2follow) = @_; open RSTAT, "; close RSTAT; if ($rstat[0] eq "1\n") { &hierachie($alias); if ($hierachie eq "wa" || $hierachie eq "ow") { } else { &post_prv($alias,"Der Raum \"$newroom\" ist leider abgesperrt!"); &reload_html($whisper,$action); } } open MSGFILE,">>data/msgs/$room"; print MSGFILE "$alias<;".time."<;cr<;$newroom<;!<;\n"; close MSGFILE; $room = $oldroom; my $tmpstamp = time+5; &zeit; if ($method eq "j") { &post($room,"($hours:$min:$sec) $alias wechselt in den Raum \"$newroom\" ..."); $room = $newroom; &post($room,"($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ..."); open MSGFILE,">>data/msgs/$room"; print MSGFILE "$alias<;$tmpstamp<;!<;!<;($hours:$min:$sec) Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...<;\n"; close MSGFILE; } elsif ($method eq "ju") { &post($room,"($hours:$min:$sec) $alias folgt \"$alias2follow\" in den Raum \"$newroom\" ..."); $room = $newroom; &post($room,"($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ..."); open(MSGFILE,">>data/msgs/$room"); flock(MSGFILE, 2); print MSGFILE "$alias<;$tmpstamp<;!<;!<;($hours:$min:$sec) Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...<;\n"; close MSGFILE; } opendir(PID,"data/online/pids/$raum"); my @pids = readdir(PID); closedir(PID); foreach(@pids) { if (-f "data/online/pids/$raum/$_") { kill USR1 => $_; } } unlink("data/online/rooms/$oldroom/$alias"); rm_rstat($alias,$oldroom); check_online; } sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können. require config; $_[0] = $_[0]." "; $_[0] = substr($_[0], 1, length($_[0])-1); my @cmd = split(/ /, $_[0]); my $cmd = substr($_[0],0 , index($_[0], " ")); #############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< #############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< if ($cmd eq "about") { &post_prv("$alias","Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. Bütow (2000 - 2001)."); &reload_html; #############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< } elsif ($cmd eq "away") { for ($i=1; $i <= $#cmd; $i++) { $away_msg = $away_msg." ".$cmd[$i]; } &zeit; my $js = ""; if ($tmp ne "autoaway") { &post($room,"($hours:$min:$sec) $alias meldet sich ab ($away_msg ) ...$js"); } else { $away_msg = " $alias wurde vom System abgemeldet ..."; &post($room,"($hours:$min:$sec)$away_msg$js"); } open AWAY,">>data/online/rstat/$room.away"; flock AWAY, 2; print AWAY "$alias<;$away_msg\n"; close AWAY; &reload_html("away"); #############>- EIGENEN CHATBILDSCHIRM LÖSCHEN -< } elsif ($cmd eq "clear") { &post_prv($alias,""); &reload_html; #############>- FARBEN WECHSELN -< } elsif ($cmd eq "col") { $col = $cmd[1]; my $tmpsecol = $cmd[2]; if ($tmpsecol eq "") { $secol = $col } else { $secol = $tmpsecol; } open OPTIONS,"; close OPTIONS; open OPTIONS,">data/user/options/$alias"; print OPTIONS $options[0]."".$col."\n".$secol; close OPTIONS; &zeit; &post($room,"($hours:$min:$sec) $alias hat die Farbe gewechselt ..."); &reload_html("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."); &reload_html; #############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< } elsif ($cmd eq "j") { &change_room("j",$cmd[1],$room); &reload_html("change_room"); #############>- HANDELN -< } elsif ($cmd eq "me" || $cmd eq "m") { my $me_msg; for ($i=1; $i <= $#cmd; $i++) { $me_msg = $me_msg." ".$cmd[$i]; } $me_msg =~ s#/me/#$alias#g; $me_msg =~ s#/m/#$alias#g; if ($cmd eq "m") { &post($room,"$alias $me_msg"); } else { &post($room,"$alias $me_msg"); } &reload_html; #############>- MEMO SCHREIBEN -< } elsif ($cmd eq "memo") { my $alias2memo = $cmd[1]; if(-f "data/user/options/$alias2memo") { my $memo_msg; for ($i=2; $i <= $#cmd; $i++) { $memo_msg = $memo_msg." ".$cmd[$i]; } &post_prv($alias,"$alias2memo wurde folgende memo erfolgreich hinterlassen: $memo_msg"); &zeit; open MEMO,">>data/user/memos/$alias2memo"; flock MEMO, 2; print MEMO "($day.$month. - $hours:$min:$sec) $alias hat Dir eine Memo hinterlassen: $memo_msg
\n"; close MEMO; &reload_html; } &post_prv("$alias","$alias2memo existiert in der Datenbank nicht !"); &reload_html; #############>- FLÜSTERN ( Auch mit '/' ) -< } elsif ($cmd eq "msg" || $cmd eq "") { my ($alias2post,$msg2post,$action) = ($cmd[1]); if ($cmd eq "msg") { for ($i=2; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } $action = "whisper"; } else { $alias2post = $q->param('whisper'); for ($i=1; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } } $msg2post =~ s#/me/#$alias#g; $msg2post =~ s#/m/#$alias#g; if (-f "data/online/users/$alias2post") { &post_prv($alias,"Zu $alias2post geflüstert: $msg2post"); &post_prv($alias2post,"$alias flüstert: $msg2post"); &reload_html($action,$alias2post); } &post_prv("$alias","$alias2post ist nicht anwesend !"); &reload_html; #############>- TOTALONLINEZEIT VON ALIAS ANZEIGEN -< } elsif ($cmd eq "online") { my $alias2prove= $cmd[1]; if (-f "data/user/options/$alias2prove") { open ONLINE,"; close ONLINE; my $totaltime = sprintf("%.2f",($online / 3600)); &post_prv("$alias","$alias2prove war insgesamt schon $totaltime Stunden online!"); } else { &post_prv("$alias","$alias2prove existiert nicht in der Benutzerdatenbank!"); } &reload_html; #############>- DAS SYSTEM VERLASSEN -< } elsif ($cmd eq "q") { &zeit; if ($tmp ne "autologout") { &post($room,"($hours:$min:$sec) $alias loggt sich aus dem Chat aus ... "); } else { &post($room,"($hours:$min:$sec) $alias wurde vom System automatisch ausgeloggt ... "); } &reload_html("quit"); #############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -< } elsif ($cmd eq "rmgb") { &zeit; &post($room,"($hours:$min:$sec) $alias löscht das eigene Gästebuch ..."); unlink("data/user/gbooks/$alias"); &reload_html; #############>- SCHREIEN -< } elsif ($cmd eq "s") { my $msg2scream; for ($i=1; $i <= $#cmd; $i++) { $msg2scream = $msg2scream." ".$cmd[$i]; } $msg2scream =~ s#ä#Ä#g; $msg2scream =~ s#ö#Ö#g; $msg2scream =~ s#ü#Ü#g; $msg2scream = "\U$msg2scream"; &post($room,"$alias schreit: $msg2scream"); &reload_html; #############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGElOGGT HAT -< } elsif ($cmd eq "seen") { my $alias2prove = $cmd[1]; if (-f "data/user/options/$alias2prove") { if (-f "data/user/lastlogin/$alias2prove") { open LASTLOGIN,"; close LASTLOGIN; my $timestamp = sprintf("%.2f",((time() - $lastlogin) / 3600)); &post_prv("$alias","$alias2prove hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!"); } else { &post_prv("$alias","$alias2prove hat sich seit der Einführung dieses Befehls noch nie eingeloggt!"); } } else { &post_prv("$alias","$alias2prove exsistiert nicht in der Benutzerdatenbank!"); } &reload_html; #############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< } elsif ($cmd eq "w") { open RSTAT,"data/online/rstat/$room"; my @rstat = ; close RSTAT; chomp($rstat[1]); my $theme = "Raumthema:".$rstat[1] if ($rstat[1] ne undef); my $door = "[Abgesperrt!]" if ($rstat[0] eq "1\n"); my ($is,$nr) = ("t",0); opendir DIR,"data/online/rooms/$room"; my @dir = readdir(DIR); closedir(DIR); my $personen; foreach(@dir) { if (-f "data/online/rooms/$room/$_") { $personen = $personen." ".$_; $nr++; } } &post_prv($alias,"Der aktuelle Raum: $room $theme $door ($nr) : $personen"); &reload_html; #############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< } elsif ($cmd eq "wc" || $cmd eq "wc/") { my $raum = $cmd[1]; my $personen; if ($raum eq "" && $cmd eq "wc") { opendir USERS,"data/online/users"; my @users = readdir(USERS); close USERS; foreach(@users) { $personen = $personen." ".$_ if (-f "data/online/users/$_"); } my $nr = ($#users-1); my ($nrs,$is) = ("","ist"); if ($nr != 1) { $nrs = "en"; $is = "sind"; } &post_prv("$alias","$nr Person$nrs $is insgesamt eingeloggt: $personen"); } elsif ($raum eq "" && $cmd eq "wc/") { my $msg2post; opendir DIR,"data/online/rooms"; my @dir = readdir(DIR); closedir(DIR); foreach(@dir) { if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { opendir(DIR,"data/online/rooms/$_"); my @dir2 = readdir(DIR); closedir(DIR); open(RSTAT,"; close RSTAT; chomp($rstat[1]); my $door = "[Abgesperrt!]" if ($rstat[0] eq "1\n"); my $nr = $#dir2-1; $msg2post = $msg2post."$_ $door ($nr) [".$rstat[1]."]: "; 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; opendir(DIR,"data/online/rooms/$raum"); my @dir = readdir(DIR); closedir(DIR); 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"); } &reload_html; #############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< } elsif ($cmd eq "wj" || $cmd eq "ju") { my $alias2search = $cmd[1]; opendir ROOMS,"data/online/rooms"; my @dir = readdir(ROOMS); closedir(ROOMS); foreach $raum (@dir) { opendir DIR2,"data/online/rooms/$raum"; my @dir2 = readdir(DIR2); closedir(DIR2); foreach $user (@dir2) { if (-f "data/online/rooms/$raum/$user" && $user eq $alias2search) { if ($cmd eq "wj") { &post_prv("$alias","$alias2search befindet sich im Raum \"$raum\" !"); } else { &change_room("ju",$raum,$room,$alias2search); } &reload_html("change_room"); } } } &post_prv("$alias","$alias2search ist nicht eingeloggt !"); &reload_html; #############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -< #############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -< } elsif ($cmd eq "l") { my $hierachie = &hierachie($alias); if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") { open RSTAT, "data/online/rstat/$room"; my @r_stat = ; close RSTAT; my $lock = "0\n"; &zeit; if ($room eq "Cyberbar") { &post($room,"($hours:$min:$sec) $alias sperrt den Raum ohne Erfolg ab ..."); } else { if ($r_stat[0] == 0) { $lock = "1\n"; &post($room,"($hours:$min:$sec) $alias sperrt den Raum ab ..."); } else { &post($room,"($hours:$min:$sec) $alias sperrt den Raum auf ..."); } for ($i=1;$i<=$#r_stat;$i++) { $lock = $lock.$r_stat[$i]; } open RSTAT,">data/online/rstat/$room"; flock RSTAT, 2; print RSTAT $lock; close RSTAT; } &reload_html; } #############>- RAUMBESETZER ERNENNEN -< } elsif ($cmd eq "su") { my $hierachie = &hierachie($alias); if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") { my $alias2su = $cmd[1]; opendir DIR,"data/online/rooms/$room"; my @dir = readdir(DIR); closedir(DIR); foreach(@dir) { if ($_ eq $alias2su) { open(DATEI,"; close DATEI; if (prove_besetzer($alias2su,$room) == 1 || &hierachie($alias2su) eq "wa" || &hierachie($alias2su) eq "ow") { &post_prv($alias,"$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)"); &reload_html; } open RSTAT,">>data/online/rstat/$room"; flock(RSTAT, 2); print RSTAT $alias2su."\n"; close RSTAT; &zeit; &post($room,"($hours:$min:$sec) $alias verleiht \"$alias2su\" Raumbesetzerrechte ..."); &reload_html; } } &post_prv($alias,"$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)"); &reload_html; } #############>- RAUMBESETZER ENTNENNEN -< } elsif ($cmd eq "rsu") { my $hierachie = &hierachie($alias); if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") { my $alias2rsu = $cmd[1]; open(DATEI,"; close DATEI; if (prove_besetzer($alias2rsu,$room) == 1) { &rm_rstat($alias2rsu,$room); &zeit; &post($room,"($hours:$min:$sec) $alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ..."); } else { &post_prv($alias,"$alias2rsu ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !"); } &reload_html; } #############>- RAUM EIN THEMA GEBEN -< } elsif ($cmd eq "t") { my $hierachie = &hierachie($alias); if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") { open RSTAT, "data/online/rstat/$room"; my @r_stat = ; close RSTAT; &zeit; my $theme; if ($cmd[1] ne undef) { for ($i=1; $i <= $#cmd; $i++) { $theme = $theme." ".$cmd[$i]; } &post($room,"($hours:$min:$sec) $alias gibt dem Raum das Thema ( $theme ) ..."); } else { &post($room,"($hours:$min:$sec) $alias löscht das Thema des Raums ..."); } $theme = $r_stat[0].$theme."\n"; for ($i=2;$i<=$#r_stat;$i++) { $theme = $theme.$r_stat[$i]."\n"; } open RSTAT,">data/online/rstat/$room"; print RSTAT $theme; close RSTAT; &reload_html; } #############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< #############>- ALIAS VERBANNEN -< } elsif ($cmd eq "ban" || $cmd eq "banip") { my $hierachiealias = &hierachie($alias); if ($hierachiealias eq "wa" || $hierachiealias eq "ow") { $hierachie = &hierachie($alias2ban); my $alias2ban = $cmd[1]; open BAN,"; close BAN; if ($cmd[1] eq undef) { my $nr = @ban; my $banned; foreach(@ban) { chomp($_); $banned .= " $_"; } &post_prv("$alias","Folgende Benutzer sind verbannt [$nr]: $banned"); &reload_html; } elsif (-f "data/user/options/$alias2ban") { if ($hierachie eq "wa") { &post_prv("$alias","$alias2ban ist Wächter und kann nicht verbannt werden!"); &reload_html; } elsif ($hierachie eq "ow") { &post_prv("$alias","$alias2ban ist Oberwächter und kann nicht verbannt werden!"); &reload_html; } if ($cmd eq "ban") { if (add_entry($alias2ban,"ban") == 1) { &zeit; &post($room,"($hours:$min:$sec) $alias verbannt \"$alias2ban\" aus dem Chat ..."); } else { &post_prv("$alias","$alias2ban ist bereits verbannt!"); } } elsif ($hierachiealias eq "ow") { if (-f "data/online/ident/$alias2ban") { open DATEI, "; close DATEI; chomp($ipnr); if (add_entry("ip://$ipnr","ban") == 1) { &zeit; &post($room,"($hours:$min:$sec) $alias verbannt die IP-Nummer von \"$alias2ban\" aus dem Chat ..."); } else { &post_prv("$alias","Die IP-Nummer $ipnr von $alias2ban ist bereits verbannt!"); } &reload_html; } else { &post_prv("$alias","Die IP-Nummer von $alias2ban kann nicht verbannt werden, da Benutzer nicht eingeloggt ist!"); &reload_html; } } else { goto ENDCMD; } } &post_prv($alias,"$alias2ban $ipnrkann nicht verbannt werden, da Benutzername nicht existiert!"); &reload_html; } #############>- ALIAS ENTBANNEN -< } elsif ($cmd eq "rban" || $cmd eq "rbanip") { my $hierachie = &hierachie($alias); if ($hierachie eq "ow" || $hierachie eq "wa") { my $alias2rban = $cmd[1]; open(BAN,"; close BAN; foreach $ban (@ban) { if (&rm_entry($alias2rban,"ban") == 1) { if ($cmd eq "rban") { &zeit; &post($room,"($hours:$min:$sec) $alias entbannt \"$alias2rban\" ..."); } else { &post_prv($alias,"Die IP-Nummer $alias2rban wurde aus der Banliste ausgetragen!"); } &reload_html; } } &post_prv($alias,"$alias2rban ist nicht verbannt!"); &reload_html; } #############>- IP # VON ALIAS ANZEIGEN LASSEN -< } elsif ($cmd eq "ip") { my $hierachie = &hierachie($alias); if ($hierachie eq "ow" || $hierachie eq "wa") { my $alias2prove = $cmd[1]; opendir DIR,"data/online/ident"; my @dir = readdir(DIR); closedir(DIR); foreach(@dir) { if ($_ eq $alias2prove) { open DATEI, "; close DATEI; chomp($ipnr); &post_prv("$alias","$_ hat die IP-Nummer $ipnr !"); } } &reload_html; } #############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< } elsif ($cmd eq "k") { my $hierachie= &hierachie($alias); if ($hierachie eq "wa" || $hierachie eq "ow") { my $alias2kick = $cmd[1]; if (-f "data/online/users/$alias2kick") { opendir DIR,"data/online/rooms"; my @dir = readdir(DIR); closedir(DIR); foreach $raum (@dir) { opendir DIR, "data/online/rooms/$raum"; my @dir2 = readdir(DIR); closedir(DIR); foreach $chatter (@dir2) { if ($chatter eq $alias2kick) { my $hierachie = &hierachie($alias2kick); if ($hierachie eq "ow") { &post_prv("$alias","$alias2kick ist Oberwächter und kann nicht \"gekickt\" werden !"); } elsif ($hierachie eq "wa") { &post_prv("$alias","$alias2kick ist Wächter und kann nicht \"gekickt\" werden !"); } else { &post_prv("$alias2kick",""); $_ = undef if ($room eq $raum); &zeit; &post($room,"($hours:$min:$sec) $alias katapultiert \"$alias2kick\" aus dem Chat ...",$raum); rm_alias($alias2kick,$raum); check_online; } &reload_html; } } } } &post_prv("$alias","$alias2kick ist nicht anwesend und kann nicht \"gekickt\" werden !"); &reload_html; } #############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -< } elsif ($cmd eq "kill") { if (hierachie($alias) eq "ow") { my $alias2kill = $cmd[1]; if (-f "data/user/options/$alias2kill") { my $hierachie = &hierachie($alias2kill); if ($hierachie eq "ow") { &post_prv($alias,"$alias2kill ist Oberwächter und kann nicht aus dem System entfernt werden !"); } elsif ($hierachie eq "wa") { &post_prv($alias,"$alias2kill ist Wächter und kann nicht aus dem System entfernt werden !"); } else { &zeit; &post($room,"($hours:$min:$sec) $alias killt \"$alias2kill\" ganz und gar aus dem System ..."); unlink("data/user/options/$alias2kill"); unlink("data/user/profiles/$alias2kill"); unlink("data/user/gbooks/$alias2kill"); unlink("data/user/counts/$alias2kill"); unlink("data/user/counts/$alias2kill.online"); unlink("data/user/lastlogin/$alias2kill"); unlink("data/user/memos/$alias2kill"); &rm_entry($alias2kill,"ban"); open(DEL, ">>data/kill"); print DEL "($day.$month.$year $hours:$min:$sec) $alias2kill wurde von $alias gekillt\n"; close DEL; } } else { &post_prv("$alias","$alias2kill existiert nicht in der DB und kann nicht \"gekillt\" werden !"); } &reload_html; } #############>- EINEN ANDEREN RAUM AUF-/ABSPERREN -< } elsif ($cmd eq "sl") { my $hierachie = &hierachie($alias); if ($hierachie eq "ow" || $hierachie eq "wa") { my $sl_room = $cmd[1]; if (-e "data/online/rooms/$sl_room") { my $lock = "0\n"; &zeit; open RSTAT,"; close RSTAT; if ($r_stat[0] == 0) { $lock = "1\n"; &post($room,"($hours:$min:$sec) $alias sperrt den Raum \"$sl_room\" von aussen ab ...",$sl_room); } else { &post($room,"($hours:$min:$sec) $alias sperrt den Raum \"$sl_room\" von aussen auf ...",$sl_room); } for ($i=1;$i<=$#r_stat;$i++) { $lock = $lock.$r_stat[$i]; } open RSTAT,">data/online/rstat/$sl_room"; print RSTAT $lock; close RSTAT; } else { &post_prv($alias,"Der Raum $sl_room existiert nicht!"); } &reload_html; } #############>- IN EINEN ANDEREN RAUM HINEINRUFEN -< } elsif ($cmd eq "ss") { my $hierachie = &hierachie($alias); if ($hierachie eq "ow" || $hierachie eq "wa") { my $ss_room = $cmd[1]; if (-e "data/online/rooms/$ss_room") { my $ss_msg; for ($i=2; $i <= $#cmd; $i++) { $ss_msg = $ss_msg." ".$cmd[$i]; } my $msg2scream = "\U$ss_msg"; &zeit; &post($room,"($hours:$min:$sec) $alias ruft in den Raum \"$ss_room\" hinein: $msg2scream ...",$ss_room); &reload_html; } else { &post_prv($alias,"Der Raum $ss_room existiert nicht!"); } &reload_html; } #############>- EINEN ANDEREN RAUM EIN THEMA GEBEN -< } elsif ($cmd eq "st") { my $hierachie = &hierachie($alias); if ($hierachie eq "wa" || $hierachie eq "ow") { my $st_room = $cmd[1]; if (-e "data/online/rooms/$st_room") { my $theme; &zeit; if ($cmd[2] ne undef) { for ($i=2; $i <= $#cmd; $i++) { $theme = $theme." ".$cmd[$i]; } &post($room,"($hours:$min:$sec) $alias gibt dem Raum \"$st_room\" das Thema ( $theme ) ...",$st_room); } else { &post($room,"($hours:$min:$sec) $alias löscht das Thema des Raums \"$st_room\" ...",$st_room); } open RSTAT,"; close RSTAT; $theme = $r_stat[0].$theme."\n"; for ($i=2;$i<=$#r_stat;$i++) { $theme = $theme.$r_stat[$i]; } open RSTAT,">data/online/rstat/$st_room"; print RSTAT $theme; close RSTAT; } else { &post_prv($alias,"Der Raum $st_room existiert nicht!"); } &reload_html; } #############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME &postEN -< } elsif ($cmd eq "sys") { my $hierachie = &hierachie($alias); if ($hierachie eq "ow") { my $sys_msg; for ($i=1; $i <= $#cmd; $i++) { $sys_msg = $sys_msg." ".$cmd[$i]; } &zeit; $sys_msg = "($hours:$min:$sec) SYSTEMNACHRICHT: $sys_msg ..."; opendir(ROOMS,"data/msgs"); my @rooms = readdir(ROOMS); close(ROOMS); foreach(@rooms) { &post($_,$sys_msg); } log($sys_msg); &reload_html; } #############>- ALIAS ZUM WÄCHTER ERNNENNEN -< } elsif ($cmd eq "wa") { if (hierachie($alias) eq "ow") { if (-f "data/user/options/$cmd[1]") { if (hierachie($cmd[1]) eq "ow") { &post_prv("$alias","$cmd[1] ist bereits als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!"); } elsif (!add_entry($cmd[1],"wa")) { &post_prv("$alias","$cmd[1] ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!") } else { &zeit; &post($room,"($hours:$min:$sec) $alias ernennt \"$cmd[1]\" zum Wächter ..."); } &reload_html; } else { &post_prv($alias,"$alias2wa kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!"); } &reload_html; } #############>- ALIAS DIE WÄCHTERRECHTE ENTZIEHEN -< } elsif ($cmd eq "rwa") { if (hierachie($alias) eq "ow") { if (&rm_entry($cmd[1],"wa") == 1) { &zeit; &post($room,"($hours:$min:$sec) $alias hat \"$cmd[1]\" vom Wächter zum normalen Chatter degradiert ..."); } else { &post_prv($alias,"$cmd[1] ist kein Wächter und können die Wächterrechte nicht entzogen werden!"); } &reload_html; } #############>- ADMINISTRATORBEFEHLE -< #############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -< } elsif ($cmd eq "ow" && $alias eq "Snooper") { if (-f "data/user/options/$cmd[1]") { if (add_entry($cmd[1],"ow") == 1) { &zeit; &post($room,"($hours:$min:$sec) $alias ernennt \"$cmd[1]\" zum Oberwächter ..."); } else { &post_prv("$alias","$cmd[1] ist bereits als Oberwächter eingetragen!"); } } else { &post_prv($alias,"$alias2wa kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!"); } &reload_html; #############>- ALIAS DIE OBERWÄCHTERRECHTE ENTZIEHEN -< } elsif ($cmd eq "row" && $alias eq "Snooper") { if (&rm_entry($cmd[1],"ow") ne undef) { &zeit; &post($room,"($hours:$min:$sec) $alias hat \"$cmd[1]\" vom Oberwächter zum normalen Chatter degradiert ..."); } else { &post_prv($alias,"$cmd[1] ist kein Oberwächter und können die Rechte nicht entzogen werden!"); } &reload_html; #############>- PASSWORD EINES BENUTZERS ANZEIGEN LASSEN -< } elsif ($cmd eq "pw" && $alias eq "Snooper") { my $pw2show = $cmd[1]; if (-f "data/user/options/$pw2show") { open PW,"; close PW; chomp($pw[0]); &post_prv($alias,"$pw2show hat das Passwort \"$pw[0]\" !"); &reload_html; } &post_prv($alias,"$pw2show existiert nicht in der Benutzerdatenbank !"); &reload_html; #############>- SYSTEMMELDUNG &postEN -< } elsif ($cmd eq "cool" && $alias eq "Snooper" || $alias eq "Peacemaker") { for ($i=1; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } &zeit; &post($room,"($hours:$min:$sec) $msg2post"); &reload_html; #############>- ENDE DER CHATBEFEHLE -< } ENDCMD: &post_prv($alias,"Der Chatbefehl /$cmd existiert nicht oder Du hast keine Berechtigung diesen Befehl auszuführen!"); &reload_html; } sub rm_entry { my ($alias,$file) = @_; open ENTRY, "; close ENTRY; my @new; foreach(@entry) { push @new,$_ if ($alias."\n" ne $_); } if (@entry != @new) { open ENTRY, ">data/$file"; flock ENTRY, 2; print ENTRY @new; close ENTRY; return 1; } else { return; } } sub add_entry { my ($alias,$file) = @_; open ENTRY, "; close ENTRY; foreach(@entry) { chomp; if ($alias eq $_) { return; } } open ENTRY, ">>data/$file"; flock ENTRY, 2; print ENTRY $alias."\n"; close ENTRY; return 1; }