#!/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"); $mogeladmin ="Coke"; { unless (-f "data/online/tmpid/$alias.$tmpid") { require config; &error("Falsche TempID !"); } } $room = $q->param("room"); $tmp = $q->param("tmp"); $col = $q->param("col"); $secol = $q->param("secol"); $rmsg = \$q->param("msg"); 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; } 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") } $$rmsg =~ s#<#<\;#g; if (substr($$rmsg,0,1) ne "/") { &prove_color($alias,$col); &prove_color($alias,$secol); 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 { require config; &cmd($$rmsg); } sub reload_html { # Wird neugeladen, wenn eine Nachricht getextet wird! my ($action,$whisper) = @_; print ""; goto KEEPALIVE; } print "open('htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid','menu');"; } elsif ($action eq "whisper") { print "parent.input.document.inf.whisper.value = '$whisper';"; } elsif ($action eq "away") { print "parent.input.document.inf.tmp.value = 'away';"; } elsif ($action eq "quit" && $tmp eq "autologout") { print "open('index.pl?tmp=autologout','_top');"; &rm_alias($alias,$room); } elsif ($action eq "quit") { print "open('index.pl?tmp=quit','_top');"; &rm_alias($alias,$room); } print "parent.input.document.inf.tmp.value = 'notaway';" if ($tmp eq "away"); 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") { unless (&hierachie($alias) eq "ow") { &post_prv($alias,"Der Raum \"$newroom\" ist leider abgesperrt!"); &reload_html; } } 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; } unlink("data/online/rooms/$oldroom/$alias"); &rm_rstat($alias,$oldroom); &check_online; opendir(PID,"data/online/pids/$raum"); my @pids = readdir(PID); closedir(PID); foreach(@pids) { if (-f "data/online/pids/$raum/$_") { kill USR1 => $_; } } } 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], " ")); #############>- 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") { if ($cmd[1] ne undef) { &prove_color($alias,$cmd[1],1); $col = $cmd[1]; my $tmpsecol = $cmd[2]; my $length = length($tmpsecol); if ($tmpsecol eq "" || $length < 6 || $length > 6) { $secol = $col } else { $secol = $tmpsecol; } } else { $col = &random_color; $secol = &random_color; } 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") { if ($cmd[1] =~ /\W/ || $cmd[1] eq "") { &post_prv($alias,"Der Raum $cmd[1] enthält illegale Zeichen!"); &reload_html; } else { &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"; 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; #############>- 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" || $room eq "Wired") { &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") { my $alias2ban = $cmd[1]; my $hierachie = &hierachie($alias2ban); 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 ($hierachie ne "ow" && $hierachie ne "wa") { if (-f "data/online/ident/$alias2ban") { open DATEI, "; close DATEI; chomp($ipnr); if (add_entry("ip://$ipnr","ban") == 1) { &zeit; &post_prv($alias,"IP-Nummer von $alias2ban ($ipnr) wurde verbannt! ..."); } 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; } &reload_html; } &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 ($alias2rban =~ /ip:/) { &post_prv($alias,"Die IP-Nummer $alias2rban wurde aus der Banliste ausgetragen!"); } else { &zeit; &post($room,"($hours:$min:$sec) $alias entbannt \"$alias2rban\" ..."); } &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" || $cmd eq "o") { 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 $hierachie2 = &hierachie($alias2kick); if ($hierachie2 eq "ow" && $alias ne $admin) { &post_prv("$alias","$alias2kick ist Oberwächter und kann nicht \"gekickt/ausgeloggt\" werden !"); } elsif ($hierachie2 eq "wa" && $hierachie ne "ow") { &post_prv("$alias","$alias2kick ist Wächter und kann nicht \"gekickt/ausgeloggt\" werden !"); } else { if ($cmd eq "k") { &post_prv("$alias2kick",""); } else { &post_prv("$alias2kick",""); } $_ = undef if ($room eq $raum); &zeit; if ($cmd eq "k") { &post($room,"($hours:$min:$sec) $alias katapultiert \"$alias2kick\" aus dem Chat ...",$raum); } else { &post($room,"($hours:$min:$sec) $alias loggt \"$alias2kick\" aus dem Chat aus ...",$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; } #############>- EIGENES SUPERUSER-LOGO VERSCHWINDEN/AUFTAUCHEN LASSEN -< } elsif ($cmd eq "img") { my $hierachie = &hierachie($alias); if ($hierachie eq "wa" || $hierachie eq "ow") { if(&rm_entry($alias, $hierachie."2")) { &post_prv("$alias","Deine Superuserlogo wurde versteckt!"); } else { &post_prv("$alias","Deine Superuserlogo wurde wieder sichtbar gemacht!"); &add_entry($alias, $hierachie."2"); } &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 ..."); &add_entry($cmd[1],"wa2"); } &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 ..."); &rm_entry($cmd[1],"wa2"); } else { &post_prv($alias,"$cmd[1] ist kein Wächter und können die Wächterrechte nicht entzogen werden!"); } &reload_html; } #############>- ADMINISTRATORBEFEHLE -< } elsif ($alias eq $admin || $alias eq $mogeladmin) { #############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -< if ($cmd eq "ow") { 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 ..."); &add_entry($cmd[1],"ow2"); } 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") { 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 ..."); &rm_entry($cmd[1],"ow2"); } 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") { 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; #############>- IDENT-DATEI EINES BENUTZERS ANZEIGEN LASSEN -< } elsif ($cmd eq "id" || $cmd eq "agent") { my $id2show = $cmd[1]; if (-f "data/online/ident/$id2show") { open ID,"; close ID; if ($cmd eq "id") { chomp($id[1]); &post_prv($alias,"$id2show hat die Temp-ID \"$id[1]\" !"); } else { chomp($id[2]); &post_prv($alias,"$id2show verwendet \"$id[2]\" !"); } &reload_html; } &post_prv($alias,"$id2show ist nicht eingeloggt !"); &reload_html; #############>- SYSTEMMELDUNG posten -< } elsif ($cmd eq "cool") { for ($i=1; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } &zeit; &post($room,"($hours:$min:$sec) $msg2post"); &reload_html; #############>- REVERSE -< } elsif ($cmd eq "rev") { for ($i=1; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } $msg2post = reverse($msg2post); &post($room,"$alias: $msg2post"); &reload_html; } } ENDCMD: #############>- FLÜSTERN ( Auch mit '/' ) -< my ($alias2post,$msg2post,$action); &prove_color($alias,$col,1); &prove_color($alias,$secol,1); if ($cmd eq "msg") { $alias2post = $cmd[1]; for ($i=2; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } $action = "whisper"; } elsif ($cmd eq "") { $alias2post = $q->param('whisper'); for ($i=1; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } } else { $alias2post = $cmd; for ($i=1; $i <= $#cmd; $i++) { $msg2post = $msg2post." ".$cmd[$i]; } $action = "whisper"; } $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," Benutzer oder Befehl $alias2post ist nicht anwesend/verfügbar!"); &reload_html; } #############>- ENDE DER CHATBEFEHLE -< 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; } sub prove_color { my ($alias,$color,$req) = @_; my $length = length($color); if ($length > 6 || $length < 6) { require config if (req != 1); &post_prv($alias,"Ungültige Hexadezimalfarbe."); &reload_html; } }