#!/usr/bin/perl -w
# yChat - Copyright by Paul C. Bütow
use CGI;
$q = new CGI;
require config;
print
$q->header();
#####################################
##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
#####################################
$alias = $q->param("alias");
$tmpid = $q->param("tmpid");
&secure_checkid($alias);
$room = $q->param("room");
$col = $q->param("col");
$secol = $q->param("secol");
$tmp = $q->param("tmp");
$rmsg = \$q->param("msg");
$whisper = $q->param("whisper");
if ($tmp eq "away") {
&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") {
&post_prv($alias,"Du befindest Dich nicht im Raum \"$room\" und kannst dort auch keine Nachrichten posten!");
&reload_html;
} elsif (length($$rmsg) > 300) {
&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 => $_;
}
}
&log("$alias: $$rmsg") if ($room eq "Cyberbar");
&reload_html($whisper,$tmp);
} else {
&cmd($$rmsg);
}
sub reload_html { # Wird neugeladen, wenn eine Nachricht getextet wird!
my ($whisper,$action) = @_;
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);
exit;
}
}
open(MSGFILE,">>data/msgs/$room");
flock(MSGFILE, 2);
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");
flock(MSGFILE, 2);
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 prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat
my ($r_alias,$r_room) = @_;
$r_besetzer = "false";
open(DATEI,";
close DATEI;
for($i=2;$i<=$#r_stat;$i++) {
$r_besetzer = "true" if ($r_stat[$i] eq $r_alias || $r_stat[$i] eq $r_alias."\n");
}
}
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. Erstellt von Paul C. Bütow (2000 - 2001).");
&reload_html;
exit;
#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
} elsif ($cmd eq "away") {
if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde
my $away_msg = undef;
}
for ($i=1; $i <= $#cmd; $i++) {
$away_msg = $away_msg." ".$cmd[$i];
}
&zeit;
if ($tmp ne "autoaway") {
&post($room,"($hours:$min:$sec) $alias meldet sich ab ($away_msg ) ...");
} else {
&post($room,"($hours:$min:$sec) $alias wurde vom System abgemeldet ...");
}
&reload_html($whisper,"away");
exit;
#############>- EIGENEN CHATBILDSCHIRM LÖSCHEN -<
} elsif ($cmd eq "clear") {
&post_prv($alias,"");
&reload_html;
exit;
#############>- 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($whisper,"change_colors");
exit;
#############>- 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;
exit;
#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
} elsif ($cmd eq "j") {
&change_room("j",$cmd[1],$room);
&reload_html($whisper,"change_room");
exit;
#############>- 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;
exit;
#############>- 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;
exit;
}
&post_prv("$alias","$alias2memo existiert in der Datenbank nicht !");
&reload_html;
exit;
#############>- 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 = $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($alias2post,"$alias flüstert: $msg2post");
&post_prv($alias,"Zu $alias2post geflüstert: $msg2post");
&reload_html($alias2post,$action);
exit;
}
&post_prv("$alias","$alias2post ist nicht anwesend !");
&reload_html;
exit;
#############>- 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 / 60));
&post_prv("$alias","$alias2prove war insgesamt schon $totaltime Minuten online!");
} else {
&post_prv("$alias","$alias2prove existiert nicht in der Benutzerdatenbank!");
}
&reload_html;
exit;
#############>- 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($whisper,"quit");
exit;
#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -<
} elsif ($cmd eq "rmgb") {
unlink("data/user/gbooks/$alias");
&zeit;
&post($room,"($hours:$min:$sec) $alias löscht das eigene Gästebuch ...");
&reload_html;
exit;
#############>- SCHREIEN -<
} elsif ($cmd eq "s") {
my $msg2scream;
for ($i=1; $i <= $#cmd; $i++) {
$msg2scream = $msg2scream." ".$cmd[$i];
}
my $msg2post = "\U$msg2scream";
&post($room,"$alias schreit: $msg2post");
&reload_html;
exit;
#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGELOGT 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;
local $timestamp = sprintf("%.2f",((time() - $lastlogin) / 3600));
&post_prv("$alias","$alias2prove hat sich vor $timestamp Stunden zuletzt in das System eingelogt!");
} else {
&post_prv("$alias","$alias2prove hat sich seit der Einführung dieses Befehls noch nie eingelogt!");
}
} else {
&post_prv("$alias","$alias2prove exsistiert nicht in der Benutzerdatenbank!");
}
&reload_html;
exit;
#############>- 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;
exit;
#############>- 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 eingelogt: $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:");
} 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;
exit;
#############>- 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") {
if ($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($whisper,"change_room");
exit;
}
}
}
}
&post_prv("$alias","$alias2search ist nicht eingelogt !");
&reload_html;
exit;
#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -<
#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -<
} elsif ($cmd eq "l") {
&prove_besetzer($alias,$room);
&hierachie($alias);
if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") {
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");
print RSTAT $lock;
close RSTAT;
}
}
&reload_html;
exit;
#############>- RAUMBESETZER ERNENNEN -<
} elsif ($cmd eq "su") {
&prove_besetzer($alias,$room);
&hierachie($alias);
if ($r_besetzer eq "true" || $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;
&hierachie($alias2su);
&prove_besetzer($alias2su,$room);
if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") {
&reload_html;
&post_prv($alias,"$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)");
exit;
}
&zeit;
&post($room,"($hours:$min:$sec) $alias verleiht \"$alias2su\" Raumbesetzerrechte ...");
open(DATEI,">>data/online/rstat/$room");
print DATEI $alias2su."\n";
close DATEI;
&reload_html;
exit;
}
}
&post_prv($alias,"$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)");
}
&reload_html;
exit;
#############>- RAUMBESETZER ENTNENNEN -<
} elsif ($cmd eq "rsu") {
&prove_besetzer($alias,$room);
&hierachie($alias);
if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") {
my $alias2rsu = $cmd[1];
open(DATEI,";
close DATEI;
&prove_besetzer($alias2rsu,$room);
if ($r_besetzer eq "true") {
&zeit;
&post($room,"($hours:$min:$sec) $alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ...");
my $newrstat = $rstat[0].$rstat[1];
for ($i=2;$i<=$#r_stat;$i++) {
$newrstat = $newrstat.$r_stat[$i] if ($r_stat[$i] ne $alias2rsu."\n");
}
open(DATEI,">data/online/rstat/$room");
print DATEI $newrstat;
close DATEI;
} else {
&post_prv($alias,"$alias2rsu ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !");
}
}
&reload_html;
exit;
#############>- RAUM EIN THEMA GEBEN -<
} elsif ($cmd eq "t") {
&prove_besetzer($alias,$room);
&hierachie($alias);
if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") {
my $theme;
&zeit;
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];
}
open(RSTAT,">data/online/rstat/$room");
print RSTAT $theme;
close RSTAT;
}
&reload_html;
exit;
#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
#############>- ALIAS VERBANNEN -<
} elsif ($cmd eq "ban") {
&hierachie($alias);
if ($hierachie eq "ow" || $hierachie eq "wa") {
my $alias2ban = $cmd[1];
open(BAN,";
close BAN;
if ($cmd[1] eq undef) {
my $banned;
local $nr = @ban;
for ($i=0;$i<=$#ban;$i++) {
$banned .= $ban[$i];
}
&post_prv("$alias","Folgende Benutzer sind verbannt [$nr]: $banned");
&reload_html;
exit;
} elsif (-f "data/user/options/$alias2ban") {
&hierachie($alias2ban);
if ($hierachie eq "wa") {
&post_prv("$alias","$alias2ban ist Wächter und kann nicht verbannt werden!");
&reload_html;
exit;
} elsif ($hierachie eq "ow") {
&post_prv("$alias","$alias2ban ist Oberwächter und kann nicht verbannt werden!");
&reload_html;
exit;
}
foreach $ban (@ban) {
if ($ban eq $alias2ban."\n") {
&post_prv("$alias","$alias2ban ist bereits verbannt!");
&reload_html;
exit;
}
}
&zeit;
&post($room,"($hours:$min:$sec) $alias verbannt \"$alias2ban\" aus dem Chat ...");
open(BAN,">>data/ban");
print BAN $alias2ban."\n";
close BAN;
&reload_html;
exit;
}
&post_prv($alias,"$alias2ban kann nicht verbannt werden da Benutzername nicht existiert!");
&reload_html;
exit;
}
#############>- ALIAS ENTBANNEN -<
} elsif ($cmd eq "rban") {
&hierachie($alias);
if ($hierachie eq "ow" || $hierachie eq "wa") {
my $alias2rban = $cmd[1];
open(BAN,";
close BAN;
foreach $ban (@ban) {
if ($ban eq $alias2rban."\n") {
&zeit;
&post($room,"($hours:$min:$sec) $alias entbannt \"$alias2rban\" ...");
my @ban2;
foreach $ban (@ban) {
push(@wa2,$wa) if ($ban ne $alias2rban."\n");
}
open(BAN,">data/ban");
print BAN @ban2;
close BAN;
&reload_html;
exit;
}
}
&post_prv($alias,"$alias2rban ist nicht verbannt!");
&reload_html;
exit;
}
#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
} elsif ($cmd eq "ip") {
&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;
exit;
#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
} elsif ($cmd eq "k") {
&hierachie($alias);
if ($hierachie eq "wa" || $hierachie eq "ow") {
my $alias2kick = $cmd[1];
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) {
&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","");
&zeit;
$_ = undef if ($room eq $raum);
&post($room,"($hours:$min:$sec) $alias katapultiert \"$alias2kick\" aus dem Chat ...",$raum);
&rm_alias($alias2kick,$raum);
&check_online;
}
&reload_html;
exit;
}
}
}
&post_prv("$alias","$alias2kick ist nicht anwesend und kann nicht \"gekickt\" werden !");
}
&reload_html;
exit;
#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
} elsif ($cmd eq "kill") {
&hierachie($alias);
if ($hierachie eq "ow") {
my $alias2kill = $cmd[1];
&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");
}
}
&reload_html;
exit;
#############>- EINEN ANDEREN RAUM AUF-/ABSPERREN -<
} elsif ($cmd eq "sl") {
&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;
exit;
}
#############>- IN EINEN ANDEREN RAUM HINEINRUFEN -<
} elsif ($cmd eq "ss") {
&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;
exit;
} else {
&post_prv($alias,"Der Raum $ss_room existiert nicht!");
}
&reload_html;
exit;
}
#############>- EINEN ANDEREN RAUM EIN THEMA GEBEN -<
} elsif ($cmd eq "st") {
&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;
exit;
#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -<
} elsif ($cmd eq "sys") {
&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;
exit;
#############>- ALIAS ZUM WÄCHTER ERNNENNEN -<
} elsif ($cmd eq "wa") {
&hierachie($alias);
if ($hierachie eq "ow") {
my $alias2wa = $cmd[1];
&hierachie($alias2wa);
if ($hierachie eq "wa") {
&post_prv("$alias","$alias2wa ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!");
&reload_html;
exit;
} elsif ($hierachie eq "ow") {
&post_prv("$alias","$alias2wa ist bereits als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!");
&reload_html;
exit;
}
if (-f "data/user/options/$alias2wa") {
&zeit;
&post($room,"($hours:$min:$sec) $alias ernennt \"$alias2wa\" zum Wächter ...");
open(WA,">>data/wa");
print WA $alias2wa."\n";
close WA;
&reload_html;
exit;
}
&post_prv($alias,"$alias2wa kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!");
&reload_html;
exit;
}
#############>- ALIAS DIE WÄCHTERRECHTE ENTZIEHEN -<
} elsif ($cmd eq "rwa") {
&hierachie($alias);
if ($hierachie eq "ow") {
my $alias2rwa = $cmd[1];
&hierachie($alias2rwa);
if ($hierachie eq "wa") {
&zeit;
&post($room,"($hours:$min:$sec) $alias hat \"$alias2rwa\" vom Wächter zum normalen Chatter degradiert ...");
open(WA,";
close WA;
my @wa2;
foreach $wa (@wa) {
push(@wa2,$wa) if ($wa ne $alias2rwa."\n");
}
open(WA,">data/wa");
print WA @wa2;
close WA;
} else {
&post_prv($alias,"$alias2rwa ist kein Wächter und können die Wächterrechte nicht entzogen werden!");
}
&reload_html;
exit;
}
#############>- ADMINISTRATORBEFEHLE -<
#############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -<
} elsif ($cmd eq "ow" && $alias eq "Snooper") {
my $alias2ow = $cmd[1];
&hierachie($alias2ow);
if ($hierachie eq "wa") {
&post_prv("$alias","$alias2ow ist bereits als Wächter eingetragen. Wächter können nicht gleichzeitig Oberwächter sein!");
&reload_html;
exit;
} elsif ($hierachie eq "ow") {
&post_prv("$alias","$alias2ow ist bereits als Oberwächter eingetragen!");
&reload_html;
exit;
}
if (-f "data/user/options/$alias2ow") {
&zeit;
&post($room,"($hours:$min:$sec) $alias ernennt \"$alias2ow\" zum Oberwächter ...");
open(OW,">>data/ow");
print OW $alias2ow."\n";
close OW;
&reload_html;
exit;
}
&post_prv($alias,"$alias2ow kann nicht zum Oberwächter ernannt werden da Benutzername nicht existiert!");
&reload_html;
exit;
#############>- ALIAS DIE OBERWÄCHTERRECHTE ENTZIEHEN -<
} elsif ($cmd eq "row" && $alias eq "Snooper") {
&hierachie($alias);
if ($hierachie eq "ow") {
my $alias2row = $cmd[1];
&hierachie($alias2row);
if ($hierachie eq "ow") {
&zeit;
&post($room,"($hours:$min:$sec) $alias hat \"$alias2row\" vom Oberwächter zum normalen Chatter degradiert ...");
open(OW,";
close OW;
my @ow2;
foreach $ow (@ow) {
push(@ow2,$ow) if ($ow ne $alias2row."\n");
}
open(OW,">data/ow");
print OW @ow2;
close OW;
} else {
&post_prv($alias,"$alias2row ist kein Oberwächter und können die Wächterrechte nicht entzogen werden!");
}
&reload_html;
exit;
}
#############>- 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;
&post_prv($alias,"$pw2show hat das Passwort \"".$pw[0]."\" !");
&reload_html;
exit;
}
&post_prv($alias,"$pw2show existiert nicht in der Benutzerdatenbank !");
&reload_html;
exit;
#############>- 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;
exit;
#############>- ENDE DER CHATBEFEHLE -<
}
&post_prv($alias,"Der Chatbefehl /$cmd existiert nicht oder Du hast keine Berechtigung diesen Befehl auszuführen!");
&reload_html;
}