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