From 630af0ed6c0af69c7df2e45aef7a87722a3c00c0 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 6 Apr 2013 13:14:47 +0200 Subject: tagging ychat-perl-legacy --- 0.7.6/modules/changeroom.pm | 67 ++++ 0.7.6/modules/commands.pm | 870 +++++++++++++++++++++++++++++++++++++++++++ 0.7.6/modules/divcom.pm | 266 +++++++++++++ 0.7.6/modules/hierachie.pm | 77 ++++ 0.7.6/modules/htdocs.pm | 127 +++++++ 0.7.6/modules/input.pm | 14 + 0.7.6/modules/loggedin.pm | 41 ++ 0.7.6/modules/online.pm | 148 ++++++++ 0.7.6/modules/postmessage.pm | 90 +++++ 0.7.6/modules/shared.pm | 338 +++++++++++++++++ 0.7.6/modules/start.pm | 252 +++++++++++++ 0.7.6/modules/statistic.pm | 148 ++++++++ 0.7.6/modules/stream.pm | 170 +++++++++ 0.7.6/modules/webchat.pm | 22 ++ 14 files changed, 2630 insertions(+) create mode 100644 0.7.6/modules/changeroom.pm create mode 100644 0.7.6/modules/commands.pm create mode 100644 0.7.6/modules/divcom.pm create mode 100644 0.7.6/modules/hierachie.pm create mode 100644 0.7.6/modules/htdocs.pm create mode 100644 0.7.6/modules/input.pm create mode 100644 0.7.6/modules/loggedin.pm create mode 100644 0.7.6/modules/online.pm create mode 100644 0.7.6/modules/postmessage.pm create mode 100644 0.7.6/modules/shared.pm create mode 100644 0.7.6/modules/start.pm create mode 100644 0.7.6/modules/statistic.pm create mode 100644 0.7.6/modules/stream.pm create mode 100644 0.7.6/modules/webchat.pm (limited to '0.7.6/modules') diff --git a/0.7.6/modules/changeroom.pm b/0.7.6/modules/changeroom.pm new file mode 100644 index 0000000..4a5e787 --- /dev/null +++ b/0.7.6/modules/changeroom.pm @@ -0,0 +1,67 @@ +sub change_room { + my($method, $newroom, $oldroom, $alias2) = @_; + if ($newroom eq $oldroom) { + &post_prv($alias, "Du befindest dich bereits im Raum $newroom!"); + &reload_html; + } + elsif ($newroom eq $loginplace) { + &post($room, q[] . ×tring . " $alias verlässt den Chat und geht in die $loginplace ... ", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &check_online; + &reload_html; + } + open RSTAT, "; + close RSTAT; + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + &post_prv($alias, "Der Raum $newroom ist leider abgesperrt!"); + &reload_html; + } + } + &private_javascript($alias, $room, "parent.input.document.inf.room.value = '$newroom';open('chat?request=online&room=$newroom&alias=$alias&tmpid=$tmpid','online');"); + open MSGFILE, ">>data/msgs/$newroom"; + print MSGFILE "$alias<;" . time . "<;!<;!<;<;\n"; + close MSGFILE; + open MSGFILE, ">>data/msgs/$room"; + if ($method eq 'j') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;] . ×tring . " Du wechselst aus dem Raum $oldroom herein nach $newroom ...
<;\n"; + } + elsif ($method eq 'ju') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;] . ×tring . " Du folgst $alias2 aus dem Raum $oldroom herein nach $newroom ...
<;\n"; + } + elsif ($method eq 'sep') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;] . ×tring . " Du wechselst aus dem Raum $oldroom herein nach $newroom und sperrst ab...
<;\n"; + } + close MSGFILE; + &post_strmsg($alias, $room, 'cr', $newroom); + $room = $oldroom; + my $tmpstamp = time; + if ($method eq 'j') { + &post($room, q[] . ×tring . " $alias wechselt in den Raum $newroom ...", $alias); + $room = $newroom; + &post($room, q[] . ×tring . " $alias kommt aus dem Raum $oldroom herein nach $newroom ...", $alias); + } + elsif ($method eq 'ju') { + my $col2 = &get_ident($alias2,3); + &post($room, q[] . ×tring . " $alias folgt $alias2 in den Raum $newroom ...", $alias); + $room = $newroom; + &post($room, q[] . ×tring . " $alias kommt aus dem Raum $oldroom und folgt $alias2 herein nach $newroom ...", $alias); + } + elsif ($method eq 'sep') { + &post($room, q[] . ×tring . " $alias wechselt in den Raum $newroom und sperrt ab...", $alias); + $room = $newroom; + &post($room, q[] . ×tring . " $alias kommt aus dem Raum $oldroom herein nach $newroom und sperrt ab...", $alias); + } + elsif ($method eq 'beam') { + &post($room, q[] . ×tring . " $alias2 beamt $alias in den Raum $newroom...", $alias2); + $room = $newroom; + &post($room, q[] . ×tring . " $alias2 beamt $alias aus dem Raum $oldroom herein nach $room...", $alias2); + } + unlink "data/online/rooms/$oldroom/$alias"; + &rm_rstat($alias, $oldroom); + &check_online; +} +1; diff --git a/0.7.6/modules/commands.pm b/0.7.6/modules/commands.pm new file mode 100644 index 0000000..349524c --- /dev/null +++ b/0.7.6/modules/commands.pm @@ -0,0 +1,870 @@ +sub command { + $_[0] = $_[0] . ' '; + $_[0] = substr($_[0], 1, length($_[0]) - 1); + my(@cmd) = split(/ /, $_[0], 0); + my $cmd = substr($_[0], 0, index($_[0], ' ')); + my $tmp = $_[1]; + sub lock { + my $method = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = ; + close RSTAT; + my $lock = "0\n"; + if ($room eq $standardroom) { + &post($room, '' . ×tring . " $alias sperrt den Raum ohne Erfolg ab ...", $alias); + } + else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '' . ×tring . " $alias sperrt den Raum ab ...", $alias) if $method ne 'separee'; + } + else { + &post($room, '' . ×tring . " $alias sperrt den Raum auf ...", $alias) if $method ne 'separee'; + } + 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; + } + if ($cmd eq 'about') { + &post_prv($alias, "Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. B\374tow (2000 - 2002)."); + &reload_html; + } + elsif ($cmd eq 'away') { + for ($i = 1; $i <= $#cmd; ++$i) { + $away_msg = $away_msg . ' ' . $cmd[$i]; + } + my $room = &get_room($alias); + if ($tmp eq 'autoaway') { + $away_msg = "$alias wurde vom System agbemeldet ..."; + &post($room, '' . ×tring . " Das System meldet $alias wegen Inaktivität ab ...", $alias); + } + else { + &post($room, '' . ×tring . " $alias meldet sich ab ($away_msg ) ...", $alias); + } + open AWAY, ">>data/online/rstat/$room.away"; + print AWAY "$alias<;$away_msg\n"; + close AWAY; + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'away'; parent.online.location.reload();]); + &reload_html; + } + elsif ($cmd eq 'clear') { + &post_prv($alias, ""); + &reload_html; + } + elsif ($cmd eq 'col') { + my $col, $secol; + if ($cmd[1] ne undef) { + $col = $cmd[1]; + &prove_color($alias, $col); + my $tmpsecol = $cmd[2]; + my $length = length $tmpsecol; + if ($tmpsecol eq '' or $length < 6 or $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; + open IDENT, "; + close IDENT; + open IDENT, ">data/online/ident/$alias"; + print IDENT $ident[0] . $ident[1] . $ident[2] . "$col\n$secol"; + close IDENT; + &post($room, '' . ×tring . " $alias hat die Farbe gewechselt...", $alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &reload_html; + } + elsif ($cmd eq 'date') { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + &post_prv($alias, "Heute ist der $days.$months. Jahr $years. Es ist genau $hours:$mins Uhr und $secs Sekunden."); + &reload_html; + } + elsif ($cmd eq 'exit') { + my $room = &get_room($alias); + if ($tmp eq 'autologout') { + &private_javascript($alias, $room, q[open('chat?request=start&tmp=autologout','_top');]); + &post($room, '' . ×tring . " Das System loggt $alias wegen Inaktivität aus ... ", $alias); + } + else { + &post($room, '' . ×tring . " $alias loggt sich ganz aus ... ", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=quit','_top');]); + } + &rm_alias($alias, $room); + &rm_away($alias, $room); + &reload_html; + } + elsif ($cmd eq 'getcol') { + my $cols2show = $cmd[1]; + if (-f "data/user/options/$cols2show") { + open FILE, "; + close FILE; + chomp $file[1]; + chomp $file[2]; + &post_prv($alias, "$cols2show verwendet als 1. Farbe $file[1] und als 2. Farbe $file[2] !"); + &reload_html; + } + &post_prv($alias, "$cols2show existiert nicht in der Benutzerdatenbank!"); + &reload_html; + } + elsif ($cmd eq 'hits' or $cmd eq 'uptime') { + &post_prv($alias, "Uptime: $startime " . &calculate_uptime_hours($STARTIME) . "h; $HITS Hits; " . &calculate_hpm($HITS, $STARTIME) . ' Hits pro Minute'); + &reload_html; + } + elsif ($cmd eq 'ig') { + my $alias2ignore = $cmd[1]; + if ($alias2ignore) { + if (-f "data/user/options/$alias2ignore") { + if (3 <= &hierachie($alias2ignore)) { + &post_prv($alias, "$alias2ignore kann nicht ignoriert werden!"); + } + else { + &post_strmsg($alias, $room, 'ig', $alias2ignore); + } + } + else { + &post_prv($alias, "$alias2ignore existiert nicht in der Datenbank!"); + } + } + else { + &post_strmsg($alias, $room, 'igl'); + } + &reload_html; + } + elsif ($cmd eq 'j' or $cmd eq 'sep') { + if ($cmd[1] =~ /\W/ or $cmd[1] eq '') { + &post_prv($alias, "Der Raum $cmd[1] enth\344lt illegale Zeichen!"); + &reload_html; + } + else { + if ($cmd eq 'j') { + &change_room('j', $cmd[1], $room); + &reload_html; + } + else { + if ($cmd[1] eq $standardroom) { + &post_prv($alias, "Der Raum $cmd[1] ist ein Standardraum und kann nicht als Separee eröffnet werden!"); + } + else { + &change_room('sep', $cmd[1], $room); + &lock('separee'); + } + &reload_html; + } + } + } + elsif ($cmd eq 'me' or $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", $alias); + } + else { + &post($room, "$alias $me_msg", $alias); + } + &reload_html; + } + elsif ($cmd eq 'memo') { + my $alias2memo = $cmd[1]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + 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"); + open MEMO, ">>data/user/memos/$alias2memo"; + print MEMO "($days.$months.$years - $hours:$mins:$secs) $alias hat Dir eine Memo hinterlassen: $memo_msg
\n"; + close MEMO; + &reload_html; + } + &post_prv($alias, "$alias2memo existiert in der Datenbank nicht !"); + &reload_html; + } + elsif ($cmd eq 'menu') { + &private_javascript($alias, $room, "window.open('chat?request=htdocs&alias=$alias&var=menu_html&room=$standardroom&col=$col&secol=$secol&tmpid=$tmpid','_new','width=500,height=500,screenX=100,screenY=100,scrollbars');"); + &reload_html; + } + 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; + } + elsif ($cmd eq 'q') { + &post($room, '' . ×tring . " $alias verlässt den Chat ... ", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &rm_away($alias, $room); + &check_online; + &reload_html; + } + elsif ($cmd eq 'rmgb') { + &post($room, '' . ×tring . " $alias l\366scht das eigene G\344stebuch ...", $alias); + unlink "data/user/gbooks/$alias"; + &reload_html; + } + elsif ($cmd eq 's') { + my $msg2scream; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2scream = $msg2scream . ' ' . $cmd[$i]; + } + $msg2scream =~ s/\344/\304/g; + $msg2scream =~ s/\366/\326/g; + $msg2scream =~ s/\374/\334/g; + $msg2scream = "\U$msg2scream\E"; + &post($room, "$alias schreit: $msg2scream", $alias); + &reload_html; + } + 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\374hrung dieses Befehls noch nie eingeloggt!"); + } + } + else { + &post_prv("$alias", "$alias2prove exsistiert nicht in der Benutzerdatenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'selfkill') { + &post($room, q[] . ×tring . " $alias entfernt sich ganz und gar aus dem System und loggt sich aus ... ", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=selfkill','_top');]); + &kill_alias($alias); + &reload_html; + } + elsif ($cmd eq 'w') { + my $theme = &get_theme($room); + my $door = '[Abgesperrt!]' if $rstat[0] eq "1\n"; + my($is, $nr) = ('t', 0); + my $persons; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-f "data/online/rooms/$room/$_") { + $persons = $persons . ' ' . "$_"; + ++$nr; + } + } + &post_prv($alias, "Der aktuelle Raum: $room $theme $door ($nr): $persons"); + &reload_html; + } + elsif ($cmd eq 'wc' or $cmd eq 'wc/') { + my $raum = $cmd[1]; + my $persons; + if ($raum eq '' and $cmd eq 'wc') { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + close USERS; + foreach $_ (@users) { + $persons = $persons . ' ' . "$_" 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: $persons"); + } + elsif ($raum eq '' and $cmd eq 'wc/') { + my $msg2post; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ 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] . q(]: ); + foreach $chatter (@dir2) { + $msg2post = $msg2post . "$chatter " if -f "data/online/rooms/$_/$chatter"; + } + print ''; + } + } + &post_prv($alias, "Folgende Räume sind offen:$msg2post
"); + } + elsif ($raum ne '') { + my $persons; + opendir DIR, "data/online/rooms/$raum"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + $persons = $persons . ' ' . "$_" 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 $persons"); + } + &reload_html; + } + elsif ($cmd eq 'wj' or $cmd eq 'ju') { + my $alias2search = $cmd[1]; + my $roomofalias = &get_room($alias2search); + if ($roomofalias) { + if ($cmd eq 'wj') { + &post_prv($alias, "$alias2search befindet sich im Raum $roomofalias !"); + } + else { + &change_room('ju', $roomofalias, $room, $alias2search); + } + } + else { + &post_prv($alias, "$alias2search ist nicht eingeloggt!"); + } + &reload_html; + } + elsif (1 <= &hierachie($alias, $room)) { + if ($cmd eq 'l') { + &lock; + } + elsif ($cmd eq 'su') { + 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 (1 <= hierachie($alias2su, $room)) { + &post_prv($alias, "$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, W\304 oder OW)"); + &reload_html; + } + open RSTAT, ">>data/online/rstat/$room"; + print RSTAT "$alias2su<;1\n"; + close RSTAT; + &post($room, q[] . ×tring . " $alias verleiht $alias2su Raumbesetzerrechte ...", $alias); + &reload_html; + } + } + &post_prv($alias, "$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)"); + &reload_html; + } + elsif ($cmd eq 'rsu') { + my $alias2rsu = $cmd[1]; + if (1 == hierachie($alias2rsu, $room)) { + &rm_rstat($alias2rsu, $room); + &post($room, '' . ×tring . " $alias entzieht $alias2rsu die Raumbesetzerrechte ...", $alias); + } + else { + &post_prv($alias, "$alias2rsu ist gar kein Raumbesetzer!"); + } + &reload_html; + } + elsif ($cmd eq 't') { + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = ; + close RSTAT; + my $theme; + if ($cmd[1] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, q[] . ×tring . qq[ $alias gibt dem Raum das Thema "$theme" ...], $alias); + } + else { + &post($room, '' . ×tring . " $alias l\366scht das Thema des Raums ...", $alias); + } + $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; + } + elsif (3 <= &hierachie($alias, $room)) { + if ($cmd eq 'ban' or $cmd eq 'banip') { + 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 (3 <= $hierachie) { + &post_prv($alias, "$alias2ban kann nicht verbannt werden!"); + &reload_html; + } + if ($cmd eq 'ban') { + if (&add_entry($alias2ban, 'ban') == 1) { + &post($room, '' . ×tring . " $alias verbannt $alias2ban aus dem Chat ...", $alias); + } + else { + &post_prv($alias, "$alias2ban ist bereits verbannt!"); + } + } + elsif ($cmd eq 'banip') { + open DATEI, "; + close DATEI; + chomp $ipnr; + if (add_entry("ip://$ipnr", 'ban') == 1) { + &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; + } + &reload_html; + } + &post_prv($alias, "$alias2ban kann nicht verbannt werden, da Benutzername nicht existiert!"); + &reload_html; + } + elsif ($cmd eq 'rban' or $cmd eq 'rbanip') { + 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 { + &post($room, '' . ×tring . " $alias entbannt $alias2rban ...", $alias); + } + &reload_html; + } + } + &post_prv($alias, "$alias2rban ist nicht verbannt!"); + &reload_html; + } + elsif ($cmd eq 'img') { + my $hierachie = &hierachie($alias, $room); + &hierachie_rm($alias); + if ($hierachie == 3) { + &post_prv($alias, q[Als temporärer Wächter kannst du dein Superuserlogo nicht verstecken!]); + } + elsif ($hierachie % 2 > 0) { + &post_prv($alias, q[Dein Superuserlogo wurde versteckt!]); + &hierachie_add($alias, $hierachie + 1); + } + else { + &post_prv("$alias", q[Dein Superuserlogo wurde wieder sichtbar gemacht!]); + &hierachie_add($alias, $hierachie - 1); + } + &reload_html; + } + elsif ($cmd eq 'ip') { + 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; + } + elsif ($cmd eq 'k' or $cmd eq 'o') { + my $alias2kick = $cmd[1]; + if (-f "data/online/users/$alias2kick") { + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $raum (@dir) { + opendir DIR, "data/online/rooms/$raum"; + my(@dir2) = readdir DIR; + closedir DIR; + foreach my $chatter (@dir2) { + if ($chatter eq $alias2kick) { + my $hierachie2 = &hierachie($alias2kick); + if (&hierachie($alias) <= &hierachie($alias2kick)) { + &post_prv($alias, "$alias2kick besitzt einen höheren oder gleichen Rang und kann nicht gekickt/ausgeloggt werden!"); + } + else { + if ($cmd eq 'k') { + &post_prv($alias2kick, ''); + } + else { + &post_prv($alias2kick, ''); + } + $_ = undef if $room eq $raum; + if ($cmd eq 'k') { + &post($room, '' . ×tring . " $alias katapultiert $alias2kick aus dem Chat ...", $alias, $raum); + } + else { + &post($room, '' . ×tring . " $alias loggt $alias2kick aus dem Chat aus ...", $alias, $alias); + } + &rm_alias($alias2kick, $raum); + &check_online; + } + &reload_html; + } + } + } + } + &post_prv($alias, "$alias2kick ist nicht anwesend und kann nicht aus dem System katapultiert werden werden!"); + &reload_html; + } + elsif ($cmd eq 'sl') { + my $sl_room = $cmd[1]; + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + open RSTAT, "; + close RSTAT; + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '' . ×tring . " $alias sperrt den Raum $sl_room von aussen ab ...", $alias, $sl_room); + } + else { + &post($room, '' . ×tring . " $alias sperrt den Raum $sl_room von aussen auf ...", $alias, $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; + } + elsif ($cmd eq 'ss') { + 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\E"; + &post($room, q[] . ×tring . " $alias ruft in den Raum $ss_room hinein: $msg2scream ...", $alias, $ss_room); + &reload_html; + } + else { + &post_prv($alias, "Der Raum $ss_room existiert nicht!"); + } + &reload_html; + } + elsif ($cmd eq 'st') { + my $st_room = $cmd[1]; + if (-e "data/online/rooms/$st_room") { + my $theme; + if ($cmd[2] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, '' . ×tring . qq[ $alias gibt dem Raum $st_room das Thema "$theme" ...], $alias, $st_room); + } + else { + &post($room, '' . ×tring . " $alias l\366scht das Thema des Raums $st_room ...", $alias, $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; + } + elsif ($cmd eq 'status') { + my $alias2level = $cmd[1]; + &post_prv($alias, "$alias2level hat den Superuserstatus ".&hierachie($alias2level, &get_room($alias2level))." !"); + &reload_html; + } + elsif (7 <= &hierachie($alias)) { + if ($cmd eq 'kill') { + my $alias2kill = $cmd[1]; + if (-f "data/user/options/$alias2kill") { + if (7 <= &hierachie($alias2kill)) { + &post_prv($alias, "$alias2kill hat einen höheren Rang und kann nicht aus dem System entfernt werden !"); + } + else { + &post($room, '' . ×tring . " $alias2kill existiert nicht in der Datenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'sys') { + my $sys_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $sys_msg = $sys_msg . ' ' . $cmd[$i]; + } + $sys_msg = q[] . ×tring . " SYSTEMNACHRICHT: $sys_msg ..."; + opendir ROOMS, 'data/msgs'; + my(@rooms) = readdir ROOMS; + close ROOMS; + foreach $_ (@rooms) { + &post($_, $sys_msg, $alias) unless /\./; + } + &log($sys_msg); + &reload_html; + } + elsif ($cmd eq 'twa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + my $room2 = &get_room($alias2wa); + if (3 <= &hierachie($alias2wa, $room2)) { + &post_prv($alias, "$alias2wa kann nicht zum temporären Wächter ernannt werden!"); + } + else { + &hierachie_add_rstat($alias2wa, 3, $room2); + &post($room, '' . ×tring . " $alias ernennt $alias2wa zum temporären W\344chter ...", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "$alias2wa existiert nicht in der Datenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'rtwa') { + my $alias2rwa = $cmd[1]; + my $room2 = &get_room($alias2rwa); + if (3 == &hierachie($alias2rwa, $room2)) { + &hierachie_rm_rstat($alias2rwa, $room2); + + &post($room, q[] . ×tring . " $alias hat $alias2rwa vom temporären W\344chter zum normalen Chatter degradiert ...", $alias); + } + else { + &post_prv($alias, "$alias2rwa ist kein temporärer W\344chter und k\366nnen diese Rechte nicht entzogen werden!"); + } + &reload_html; + } + elsif ($cmd eq 'wa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + if (5 <= &hierachie($alias2wa)) { + &post_prv($alias, "$alias2wa kann nicht zum Wächter ernannt werden!"); + } + else { + &hierachie_add($alias2wa, 5); + &post($room, '' . ×tring . " $alias ernennt $alias2wa zum W\344chter ...", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "$alias2wa existiert nicht in der Datenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'rwa') { + my $alias2rwa = $cmd[1]; + my $hierachie = &hierachie($alias2rwa); + if (5 == $hierachie or 6 == $hierachie) { + &hierachie_rm($alias2rwa); + &post($room, q[] . ×tring . " $alias hat $alias2rwa vom W\344chter zum normalen Chatter degradiert ...", $alias); + } + else { + &post_prv($alias, "$alias2rwa ist kein W\344chter und k\366nnen diese Rechte nicht entzogen werden!"); + } + &reload_html; + } + elsif (9 <= &hierachie($alias)) { + if ($cmd eq 'ow') { + my $alias2ow = $cmd[1]; + if (-f "data/user/options/$alias2ow") { + if (7 <= &hierachie($alias2ow)) { + &post_prv($alias, "$alias2ow kann nicht zum Oberwächter ernannt werden!"); + } + else { + &hierachie_add($alias2ow, 7); + &post($room, '' . ×tring . " $alias ernennt $alias2ow zum Oberwächter ...", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "$alias2wa existiert nicht in der Datenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'row') { + my $alias2row = $cmd[1]; + my $hierachie = &hierachie($alias2row); + if (7 == $hierachie or 8 == $hierachie) { + &hierachie_rm($alias2row); + &post($room, q[] . ×tring . " $alias hat $alias2row vom Oberw\344chter zum normalen Chatter degradiert ...", $alias); + } + else { + &post_prv($alias, "$alias2row ist kein Oberw\344chter und k\366nnen diese Rechte nicht entzogen werden!"); + } + &reload_html; + } + 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; + } + elsif ($cmd eq 'id' or $cmd eq 'agent') { + my $id2show = $cmd[1]; + if (-f "data/online/ident/$id2show") { + if ($cmd eq 'id') { + &post_prv($alias, "$id2show hat die Temp-ID ".&get_ident($id2show, 1)." !"); + } + else { + &post_prv($alias, "$id2show verwendet ".&get_ident($id2show, 2)." !"); + } + &reload_html; + } + &post_prv($alias, "$id2show ist nicht eingeloggt !"); + &reload_html; + } + elsif ($cmd eq 'cool') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + &post($room, '' . ×tring . " $msg2post", $alias); + &reload_html; + } + elsif ($cmd eq 'rev') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post = reverse($msg2post); + &post($room, "$alias: $msg2post", $alias); + &reload_html; + } + elsif ($cmd eq 'arks') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post =~ s/i/1/gi; + $msg2post =~ s/e/3/gi; + $msg2post =~ s/a/4/gi; + $msg2post =~ s/s/5/gi; + $msg2post =~ s/g/6/gi; + $msg2post =~ s/t/7/gi; + $msg2post =~ s/b/8/gi; + $msg2post =~ s/o/0/gi; + &post($room, "$alias: $msg2post", $alias); + &reload_html; + } + elsif ($cmd eq 'ultra') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + my @letters = split '', "$alias: $msg2post"; + $msg2post = undef; + foreach (@letters) { + $msg2post .= "$_"; + } + &post($room, "$msg2post", $alias); + &reload_html; + } + } + } + } + } + my($alias2post, $msg2post, $action); + if ($cmd eq 'msg') { + $alias2post = $cmd[1]; + for ($i = 2; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + elsif ($cmd eq '') { + $alias2post = $whisper; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + else { + $alias2post = $cmd; + 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" and not -f "data/online/rooms/$loginplace/$alias2post") { + &post_prv($alias, "Zu $alias2post gefl\374stert: $msg2post"); + &post_prv($alias2post, "$alias fl\374stert: $msg2post"); + &private_javascript($alias, $room, "parent.input.document.inf.whisper.value = '$alias2post';"); + &reload_html; + } + &post_prv($alias, qq[ Benutzer oder Befehl $alias2post ist nicht anwesend/verf\374gbar! Bitte den Befehl "/menu" eingeben, um das Chat-Menü zu öffnen.]); + &reload_html; +} +1; diff --git a/0.7.6/modules/divcom.pm b/0.7.6/modules/divcom.pm new file mode 100644 index 0000000..57c4def --- /dev/null +++ b/0.7.6/modules/divcom.pm @@ -0,0 +1,266 @@ +sub divcom { + if ($var eq 'list_alias_html') { + &list_alias_html; + } + elsif ($var eq 'alias_html') { + &alias_html; + } + elsif ($var eq 'edit_profile_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_profile_html'); + } + elsif ($var eq 'edit_options_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_options_html'); + } + elsif ($var eq 'gb_html') { + &gb_html; + } + elsif ($var eq 'post_gb') { + &secure_checkid($alias, $tmpid); + &post_gb; + } + elsif ($var eq 'edit_profile') { + &secure_checkid($alias, $tmpid); + &edit('edit_profile'); + } + elsif ($var eq 'edit_options') { + &secure_checkid($alias, $tmpid); + &edit('edit_options'); + } + elsif ($var eq 'rm_gb_alias') { + &secure_checkid($alias, $tmpid); + &rm_gb; + } + else { + &error('Parameter fehlt'); + } +} +sub gb_html { + my ($message,$method) = @_; + unless ($method eq 'loggedin') { + &start_html('Benutzerboard'); + &menu(); + } + if ($message eq 'post_empty') { + print "
\n ACHTUNG!\n
\n
\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n \n zuerst\n \n einen Text und poste\n dann\n !\n
\n
\n"; + } + elsif ($message eq 'post_ok') { + print "
\n Meldung:\n
\n
\n Vielen Dank f\374r Deinen Beitrag. Wenn Du willst, kannst Du jetzt gleich noch einen Eintrag posten ...\n
\n
\n"; + } + else { + print "
\n Falls Du Anregungen oder Verbesserungsvorschl\344ge f\374r die Community hast, dann poste doch einen kleinen Eintrag :-)\n
\n
\n"; + } + print qq[
\n \n\n\n\n\n \n \n \n \n \n \n \n \n \n \n
\n
\n]; + if (-e 'data/guestbook') { + &error("Konnte dat/guestbook nicht \366ffnen") unless open DATEI, '; + close DATEI; + print $q->div(@datei); + } + print $q->end_html; +} +sub post_gb { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if ($msg eq '') { + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_empty'); + } else { + &gb_html('post_empty'); + } + } + else { + &alias_html('post_empty'); + } + $client->shutdown(2); + exit 0; + } + $msg =~ s//g; + my $tmpath = ''; + if ($id eq 'y') { + $tmpath = 'data/guestbook'; + } + else { + $tmpath = "data/user/gbooks/$tmp"; + } + open GB, "$tmpath"; + my(@gb) = ; + close GB; + pop @gb if $#gb > 99; + my(@newdatei) = "
$alias schrieb am $days.$months.$years um $hours:$mins:$secs ...
$msg
\n"; + push @newdatei, @gb; + open GB, ">$tmpath"; + print GB @newdatei; + close GB; + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_ok'); + } else { + &gb_html('post_ok'); + } + $client->shutdown(2); + exit 0; + } + &post_prv ($tmp, "$alias hat soeben einen Pin in Dein Profil geh\344ngt ... "); + &alias_html; + $client->shutdown(2); + exit 0; +} +sub rm_gb { + open GB, "; + close GB; + my(@newgbfile) = (); + for ($i = 0; $i <= $#gbfile; ++$i) { + push @newgbfile, $gbfile[$i] if $i != $id; + } + open GB, ">data/user/gbooks/$alias"; + print GB @newgbfile; + close GB; + &alias_html('rm_ok'); +} +sub list_alias_html { + &start_html('Alle Benutzer'); + opendir REGISTERED, 'data/user/options'; + my(@users) = readdir REGISTERED; + closedir REGISTERED; + my(@liste) = sort(@users); + my $nr = $#users - 1; + &menu(); + print "
\n Es sind z.Z. genau $nr Benutzernamen in der Datenbank vorhanden! (Sortiert nach #, A-Z, a-z)\n
\n
\n
\n"; + foreach $_ (@liste) { + if (-f "data/user/options/$_") { + print $q->a({-'href', "chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid"}, "$_"), ' '; + } + } + print "
\n\n\n"; +} +sub alias_html { + my $message = $_[0]; + open COUNTS, "; + close COUNTS; + ++$counter; + open COUNTS, ">data/user/counts/$tmp"; + print COUNTS $counter; + close COUNTS; + &start_html($tmp); + &menu(); + print ""; + if ($message eq 'rm_ok') { + print "
\n Meldung:\n
\n
\n Der von Dir gew\344hlte Eintrag wurde erfolgreich gel\366scht.\n
\n
\n"; + } + elsif ($message eq 'post_empty') { + print "
\n ACHTUNG!\n
\n
\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n \n zuerst\n \n einen Text und poste\n dann\n !\n
\n"; + } + open PROFILE, "; + close PROFILE; + print qq[
\n Dieses Profil wurde insgesamt schon $counter mal aufgerufen !\n

Alias: $tmp\n

Nachname: $data[0]\n

Vorname: $data[1]\n

Alter: $data[2]\n

Wohnort: $data[3]\n

E-Mail:\n $data[4]\n

ICQ-Nummer: $data[5]\n

Homepage: $data[6]\n

Weiteres:
$data[7]\n
\n Hier kannst Du $tmp eine Nachricht hinterlassen!\n
\n \n \n \n \n \n \n \n \n \n
\n
\n]; + if (-e "data/user/gbooks/$tmp") { + &error("Konnte data/user/gbooks/$tmp nicht \366ffnen") unless open DATEI, "; + close DATEI; + my $nr = 1; + if ($alias ne $tmp) { + foreach $_ (@datei) { + print "
Eintrag # $nr: $_"; + ++$nr; + } + } + else { + print qq[ \n \n \n \n \n \n \n]; + for ($i = 0; $i <= $#datei; ++$i) { + print qq[ \n \n \n \n]; + ++$nr; + } + print qq[
\n \n \n
\n
\n Eintrag # $nr:\n $datei[$i]\n
\n
\n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n \n]; + } + } + print $q->end_html; +} +sub edit_html { + my($method, $message) = @_; + &start_html("Benutzerprofil \344ndern"); + if ($method eq 'edit_options_html') { + open DATEI, "; + close DATEI; + foreach $_ (@data) { + chomp $_; + } + &menu(); + if ($method eq 'edit_options_html') { + if ($message eq 'edit_options_ok') { + print "
\n Hinweis:\n
\n
\n Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um\n weiterzuchatten einfach Fenster schliessen!\n
\n
\n"; + } + elsif ($message eq 'edit_pw_wrong') { + print "
\n ACHTUNG!\n
\n
\n Du hast soeben versucht, dein Passwort zu \344ndern. Jedoch stimmte die Erste Eingabe nicht mit der Zweiten \374berein.\n Bitte versuch es erneuert ...\n
\n
\n"; + } + else { + print $q->div('Hier kannst Du Deine Chat-Optionen editieren!'), $q->hr; + } + print qq[\n\n
\n \n \n \n \n \n \n \n
\n
\n Dein Passwort\n \n (Gut merken !!)\n \n
\n \n
\n
\n \n
\n Geb hier das Passwort erneuert ein:\n
\n \n
\n
\n
\n
Einstellungen f\374r den Nachrichten-Verlauf
\n \n \n \n \n \n \n \n
\n
\n
Anzahl der Nachrichten im Verlauf (Standart = 10)
\n \n \n \n
\n
\n
Wie sollen die Nachrichten im Verlauf angeordnet sein?
\n \n \n \n
\n
\n
PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.
\n
\n \n \n \n \n \n \n
\n
\n \n Auswahl von Farbe 1\n
\n (Farbe Deines Nicks):\n
\n \n
\n
\n \n
\n \n Auswahl von Farbe 2\n
\n (Farbe Deiner Nachrichten):\n
\n \n
\n
\n
\n
\n Beliebige Auswahl markieren und Farbe w\344hlen. Um Deine Optionen abzuspeichern,\n auf "Daten \344ndern" klicken!\n
\n
\n]; + open COLORS, '; + close COLORS; + print @colors; + } + elsif ($method eq 'edit_profile_html') { + if ($message eq 'edit_profile_ok') { + print "
\n Hinweis:\n
\n
\n Du hast soeben Dein Profil erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren:\n
\n"; + } + else { + print $q->div('Hier kannst Du Dein Profil editieren!'), $q->hr; + } + print qq[ \n \n
\n Dein Nachname:\n
\n \n
\n
\n
\n Dein Vorname:\n
\n \n
\n
\n
\n Dein Alter:\n
\n \n
\n
\n
\n Dein Wohnort:\n
\n \n
\n
\n
\n Deine E-Mail Adresse:\n
\n \n
\n
\n
\n Deine ICQ-Nummer:\n
\n \n
\n
\n
\n Deine Homepage:\n
\n \n
\n
\n
\n Weiteres:\n
\n \n
\n]; + } + print qq[
\n \n \n \n \n \n \n \n \n\n\n]; +} +sub edit { + my $method = $_[0]; + if ($method eq 'edit_profile') { + my $url = $homepage; + $url =~ s[^http://*][]; + open PROFILE, ">data/user/profiles/$alias"; + my $profile = "$nachname\n$vorname\n$alter\n$wohnort\n$email\n$icq\nhttp://$url\n$weiteres"; + $profile =~ s/shutdown(2); + exit 0; + } + open OPTIONS, ">data/user/options/$alias"; + my $options = "$id\n$col\n$secol\n$maxVerlauf\n$verlaufOrder"; + $options =~ s/; + close IDENT; + open IDENT, ">data/online/ident/$alias"; + print IDENT $ident[0] . $ident[1] . $ident[2] . "$col\n$secol"; + close IDENT; + my $room = &get_room($alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post($room, '' . ×tring . " $alias hat seine Chat-Einstellungen geändert ...", $alias); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &edit_html('edit_options_html', 'edit_options_ok'); + } +} +1; diff --git a/0.7.6/modules/hierachie.pm b/0.7.6/modules/hierachie.pm new file mode 100644 index 0000000..b6f5732 --- /dev/null +++ b/0.7.6/modules/hierachie.pm @@ -0,0 +1,77 @@ +sub hierachie { + my($alias, $room) = @_; + open FILE, "; + close FILE; + shift @rstat; + shift @rstat; + open FILE, '; + close FILE; + my(@userlevels) = (@hierachie, @rstat); + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($name eq $alias) { + chomp $level; + return $level; + } + } + return 0; +} +sub hierachie_rm { + my $alias = shift @_; + my @return; + open FILE, '; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, '>data/hierachie'; + print FILE @return; + close FILE; +} +sub hierachie_rm_rstat { + my($alias, $room) = @_; + my @return; + return unless open FILE, "; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, ">data/online/rstat/$room"; + print FILE @return; + close FILE; +} +sub hierachie_add { + my($alias, $level) = @_; + &hierachie_rm($alias); + open FILE, '>>data/hierachie'; + print FILE "$alias<;$level\n"; + close FILE; +} +sub hierachie_add_rstat { + my($alias, $level, $room) = @_; + &hierachie_rm_rstat($alias, $room); + return unless open FILE, ">>data/online/rstat/$room"; + print FILE "$alias<;$level\n"; + close FILE; +} +sub prove_away { + my($alias, $room) = @_; + return unless open AWAY, "; + close AWAY; + my $name, $away; + foreach $_ (@away) { + if (/^$alias.*/) { + ($name, $away) = split(/<; /, $_, 3); + chomp $away; + return $away; + } + } +} +1; diff --git a/0.7.6/modules/htdocs.pm b/0.7.6/modules/htdocs.pm new file mode 100644 index 0000000..4f1bbeb --- /dev/null +++ b/0.7.6/modules/htdocs.pm @@ -0,0 +1,127 @@ +sub htdocs { + if ($var eq 'help_html') { + &printfile('templates/help.sno', 'Alle Chatbefehle'); + } + elsif ($var eq 'logo_html') { + &start_html('Logo'); + &logo_html; + } + elsif ($var eq 'menu_html') { + &menu_html; + } + elsif ($var eq 'logs_html') { + &logs_html; + } + elsif ($var eq 'view_logs_html') { + &secure_checkid($alias, $tmpid); + &printfile("data/logs/$tmp", 'Logdatei', 'blank') if 7 <= &hierachie($alias); + } + elsif ($var eq 'superuser_html') { + &secure_checkid($alias, $tmpid); + &superuser_html; + } + elsif ($var eq 'chatiquette_html') { + &printfile('templates/chatiq.sno', 'Chatiquette'); + print $q->end_html; + } + else { + print $q->start_html(-'bgcolor', '000000'), $q->end_html; + } +} +sub menu_html { + &start_html("Men\374"); + print "
\n Von hier aus kannst du alle Untermen\374punkte des Systems erreichen:\n
\n
\n"; + &menu(); + print "\n"; +} +sub logo_html { + print qq[
\n \n \n \n \n \n \n \n \n \n \n
\n]; + print $q->end_html; +} +sub logs_html { + &start_html('Logdateien'); + &menu; + print "
\n Hier befinden sich alle Logdateien\n
\n
\n"; + if (5 <= &hierachie($alias)) { + print $q->div(qq[Folgende Logdateien des Raumes "$standardroom" k\366nnen nur von Oberw\344chtern oder h\366her gelesen werden (Sortiert nach A-Z, a-z):]), $q->br; + opendir LOGS, 'data/logs'; + my(@logs) = readdir LOGS; + closedir LOGS; + my(@sortedir) = sort(@logs); + foreach $_ (@sortedir) { + if (-f "data/logs/$_") { + print $q->a({-'href', "chat?request=htdocs&alias=$alias&var=view_logs_html&tmp=$_&tmpid=$tmpid", -'target', '_new'}, "$_"), ' '; + } + } + } + else { + print $q->div("Logdateien k\366nnen nur von Oberw\344chtern (OW) gelesen werden. Du bist jedoch ein W\344chter (W\304) oder ein", qq["Normaler Chatter". Oberw\344chter k\366nnen alles nachlesen, was \366ffentlich im Raum "Cyberbar" gechattet wurde.]), $q->hr; + } + print $q->end_html; +} +sub superuser_html { + &start_html ('Superuser'); + &menu; + print "
Hallo $alias. Du bist als "; + my $hierachie = &hierachie($alias); + if (9 <= $hierachie) { + print $q->b('Administrator'), ' (AD) eingetragen.

', $q->br; + } + elsif (7 <= $hierachie) { + print $q->b("Oberw\344chter"), ' (OW) eingetragen.

', $q->br; + } + elsif (5 <= $hierachie) { + print $q->b("W\344chter"), " (W\304) eingetragen.

", $q->br; + } + else { + print $q->b('normaler Chatter'), ' (NC) eingetragen.

', $q->br; + } + open FILE, 'data/hierachie'; + my(@hierachie) = ; + close FILE; + my @ows, @was, @ads; + foreach $_ (@hierachie) { + my($name, $level) = split(/<;/, $_, 3); + chomp $level; + if ($level == 5) { + push @was, $name; + } + elsif ($level == 7) { + push @ows, $name; + } + elsif ($level == 9) { + push @ads, $name; + } + if (3 <= $hierachie) { + if ($level == 6) { + push @was, "$name!"; + } + elsif ($level == 8) { + push @ows, "$name!"; + } + elsif ($level == 10) { + push @ads, "$name!"; + } + } + } + my $nads = $#ads + 1; + print '
', $q->b('AD'), "s ($nads St\374ck)"; + foreach $_ (@ads) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrow = $#ows + 1; + print '


', $q->b('OW'), "s ($nrow St\374ck)"; + foreach $_ (@ows) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrwa = $#was + 1; + print '

', $q->br, '
', $q->b("W\304"), "s ($nrwa St\374ck)"; + foreach $_ (@was) { + print $q->font({-'color', 'FFA500'}, ' ' . $_); + } + print qq[
\n Die jeweiligen F\344higkeiten der Oberw\344chter (OW) und der W\344chter (W\304) sind unter\n "Chat-Befehle"\n dokumentiert. Versteckte Superuser k\366nnen nur von anderen Superusern auf\ndieser Liste eingesehen werden!\n
\n\n\n]; +} +sub menu { + print "\n
\n"; +} +1; diff --git a/0.7.6/modules/input.pm b/0.7.6/modules/input.pm new file mode 100644 index 0000000..48df243 --- /dev/null +++ b/0.7.6/modules/input.pm @@ -0,0 +1,14 @@ +sub input { + &rm_away($alias, $room); + $maxVerlauf = '10' if $maxVerlauf eq undef; + $verlaufOrder = '1' if $verlaufOrder eq undef; + if ($tmp eq 'login') { + &post($room, '' . ×tring . " $alias hat den Chat im Raum $room betreten ..."); + } + print qq[\n\n\n]; + &style; + print qq[\n\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n
\n
\n
\n\n\n]; + $client->$shutdown(2); + exit 0; +} +1; diff --git a/0.7.6/modules/loggedin.pm b/0.7.6/modules/loggedin.pm new file mode 100644 index 0000000..dee4d97 --- /dev/null +++ b/0.7.6/modules/loggedin.pm @@ -0,0 +1,41 @@ +sub loggedin { + &start_html($loginplace, 'blank'); + print qq[
\n $alias, sch\366n da\337 Du da bist :-), hier kannst du die Seite aktualisieren.\n
\n
\n
\nHier\nkannst du den Standardraum $standardroom betreten.

\n]; + opendir ROOMDIRS, 'data/online/rooms'; + local(@roomdirs) = readdir ROOMDIRS; + close ROOMDIRS; + foreach $_ (@roomdirs) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + my $room = $_; + + open RSTAT, "; + close RSTAT; + + my $door = '[Abgesperrt!]' if $rstat[0] eq "1\n"; + + opendir ROOMDIR, "data/online/rooms/$room"; + my(@roomdir) = readdir ROOMDIR; + close ROOMDIR; + + my $nr = $#roomdir - 1; + if ($door or $_ eq $loginplace) { + print $q->b($_), " $door ($nr) "; + } + else { + print $q->b($q->a({-'href', "chat?request=stream&alias=$alias&room=$_&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder"}, "$_")), " ($nr)"; + } + print " Raumthema: $rstat[1]" if $rstat[1] ne "\n"; + print $q->br; + foreach $_ (@roomdir) { + if ($_ ne '..' and $_ ne '.') { + my $col = &get_ident($_,3); + print "$_ "; + } + } + print $q->br, $q->br; + } + } + &gb_html($_[0],'loggedin'); +} +1; diff --git a/0.7.6/modules/online.pm b/0.7.6/modules/online.pm new file mode 100644 index 0000000..b59ae6e --- /dev/null +++ b/0.7.6/modules/online.pm @@ -0,0 +1,148 @@ +sub online { + &secure_checkid($alias, $tmpid); + my(@away) = &prove_away($alias, $room, 'return_list'); + for (;;) { + for ($i = 0; $i <= $#away; $i += 2) { + last if $away[$i] eq $alias or $room eq $loginplace; + } + open DATEI, "; + close DATEI; + if ($oldstamp > time - 100) { + open DATEI, "; + close DATEI; + my $total = time - $oldstamp + $online; + open DATEI, ">data/user/counts/$alias.online"; + print DATEI $total; + close DATEI; + } + last; + } + unless (-d "data/online/rooms/$room") { + mkdir "data/online/rooms/$room", 511; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + open DATEI, '; + close DATEI; + + &check_online if $provetime < time - 40; + print < + + + \n + + +END + + opendir ROOM, 'data/online/rooms/' . $room; + my(@room) = sort(readdir ROOM); + closedir ROOM; + + my $chatter = $#room - 1; + print "$room ($chatter):\n"; + + open FILE, "; + close FILE; + shift @rstat; + shift @rstat; + + open FILE, ', @rstat); + close FILE; + + open FILE, "; + close FILE; + + my $hierachie; + foreach (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($name eq $alias) { + $hierachie = $level; + last; + } + } + + foreach my $nick (@room) { + if (-f "data/online/rooms/$room/$nick") { + my $inside = 0; + my $col = &get_ident($nick,3); + foreach $_ (@away) { + my($name, $awaymessage) = split(/<;/, $_, 3); + if ($name eq $nick) { + chomp $awaymessage; + print ""; + $inside = 2; + } + } + if ($inside == 0) { + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($nick eq $name) { + chomp $level; + $inside = 1; + if ($level == 1) { + print ""; + last; + } + elsif ($level == 2) { + print ""; + last; + } + elsif ($level == 3) { + print ""; + last; + } + elsif ($level == 5) { + print ""; + last; + } + elsif ($level == 7) { + print ""; + last; + } + elsif ($level == 9) { + print ""; + last; + } + + if (5 <= $hierachie) { + if ($level == 6) { + print ""; + last; + } + elsif ($level == 8) { + print ""; + last; + } + elsif ($level == 10) { + print ""; + last; + } + + } + print ''; + last; + } + } + } + if ($inside == 0) { + print ''; + } + print "\n"; + } + } + print '
$awaymessage
Raumbesetzer
Die Unschuld vom Land
Temporärer Wächter
Wächter
Oberwächter
Administrator
Unsichtbarer Wächter
Unsichtbarer Oberwächter
Unsichtbarer Administrator
$nick
'; +} +1; diff --git a/0.7.6/modules/postmessage.pm b/0.7.6/modules/postmessage.pm new file mode 100644 index 0000000..5172b4f --- /dev/null +++ b/0.7.6/modules/postmessage.pm @@ -0,0 +1,90 @@ +sub postmessage { + if (not -e "data/online/rooms/$room/$alias" and $tmp ne 'autoaway' and $tmp ne 'autologout') { + &post_prv($alias, "Du befindest Dich nicht im Raum $room und kannst dort auch keine Nachrichten posten!"); + &reload_html; + } + elsif (length $msg > 300) { + &post_prv($alias, "Deine Nachricht enth\344lt zu viele Zeichen. Maximal sind 300 Zeichen erlaubt."); + &reload_html; + } + if ($tmp eq 'away') { + &rm_away($alias, $room); + &post($room, '' . ×tring . " $alias hat sich zur\374ck gemeldet ... ", $alias); + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'notaway';]); + } + $msg =~ s/>data/msgs/$room"; + if (not $msg =~ s[/me/][$alias]g || $msg =~ s[/m/][$alias]g) { + print MSGFILE '!<;' . time . "<;!<;!<;$alias: $msg
<;$alias<;\n"; + } + else { + $msg =~ s[/me/][$alias]g; + $msg =~ s[/m/][$alias]g; + print MSGFILE '!<;' . time . "<;!<;!<;$msg
<;$alias<;\n"; + } + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } + &log("$alias: $msg") if $room eq $standardroom; + &reload_html; + } + else { + &command($msg, $tmp); + } +} +sub post { + my($room, $msg2post, $alias, $secroom) = @_; + my(@rooms) = $room; + @rooms = ($room, $secroom) if $room ne $secroom; + foreach my $theroom (@rooms) { + open MSGFILE, ">>data/msgs/$theroom"; + print MSGFILE '!<;' . time . "<;!<;!<;$msg2post
<;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$theroom"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$theroom/$_"; + } + } + &log($msg2post) if $room eq $standardroom; +} +sub post_prv { + my($alias2post, $msg2post) = @_; + my $roomofalias = &get_room($alias2post); + return 'false' if not $roomofalias; + open MSGFILE, ">>data/msgs/$roomofalias"; + print MSGFILE "$alias2post<;" . time . "<;!<;!<;$msg2post
<;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$roomofalias"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$roomofalias/$_"; + } + return 'true'; +} +sub post_strmsg { + my($alias, $room, $command, $action) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . "<;$command<;$action<;!<;!<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} + +1; diff --git a/0.7.6/modules/shared.pm b/0.7.6/modules/shared.pm new file mode 100644 index 0000000..f68cc80 --- /dev/null +++ b/0.7.6/modules/shared.pm @@ -0,0 +1,338 @@ +sub reload_html { + print ""; + $client->shutdown(2); + exit 0; +} +sub printfile { + my($file2print, $pagetitle, $bodyclass) = @_; + &start_html($pagetitle, $bodyclass) if $pagetitle ne ''; + &menu unless $bodyclass eq 'blank'; + open FILE2PRINT, "<$file2print"; + print "$_\n" while defined($_ = ); + close FILE2PRINT; +} +sub start_html { + print "$title - $_[0]$_[2]"; + &style; + print ''; + if ($_[1] eq 'start') { + print ''; + } + elsif ($_[1] ne '') { + print ""; + } + else { + print ''; + } +} +sub log { + my $msg2log = $_[0]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + my $js; + ($msg2log, $js) = split(/<;\n]; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} +sub get_theme { + my $room = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@rstat) = ; + close RSTAT; + chomp $rstat[1]; + return 'Raumthema:' . $rstat[1] if $rstat[1] ne undef; +} +sub get_room { + my $alias = shift @_; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $room (@dir) { + opendir DIR, "data/online/rooms/$room"; + my(@chatter) = readdir DIR; + closedir DIR; + foreach my $chatter (@chatter) { + return $room if $chatter eq $alias; + } + } + return undef; +} +sub get_ident { + my ($alias,$line) = @_; + open IDENT, "data/online/ident/$alias"; + my (@ident) = ; + close IDENT; + chomp $ident[$line]; + return $ident[$line]; +} +sub get_online_users { + my @dir = &diropen('data/online/rooms'); + my @users; + + foreach my $room (@dir) { + next if $room =~ /\./; + my @room = &diropen("data/online/rooms/$room"); + + foreach (@room) { + push @users, $_ unless /\./; + } + } + return @users; +} +sub diropen { + my $dir = shift; + + opendir DIR, $dir; + my @dir = readdir(DIR); + closedir(DIR); + + return @dir; +} +sub debug { + open DEBUG, '>data/debug'; + while (@_) { + chomp $_; + print DEBUG "$_\n"; + } + close DEBUG; +} +1; diff --git a/0.7.6/modules/start.pm b/0.7.6/modules/start.pm new file mode 100644 index 0000000..3f0e435 --- /dev/null +++ b/0.7.6/modules/start.pm @@ -0,0 +1,252 @@ +sub start { + if ($var eq 'create_alias_html') { + &create_alias_html; + } + elsif ($var eq 'create_alias') { + &create_alias; + } + elsif ($var eq 'login_html') { + &login_html; + } + elsif ($var eq 'chatiquette_html') { + &chatiquette_html; + } + elsif ($alias eq '') { + &login_html; + } + else { + &checklogin; + } +} +sub login_html { + &check_online; + my $counter = undef; + open COUNT, '; + close COUNT; + ++$counter; + open COUNT, '>data/count'; + flock COUNT, 2; + print COUNT $counter; + close COUNT; + + my(@users) = &get_online_users; + + opendir REGISTRED, 'data/user/options'; + my(@registred) = readdir REGISTRED; + closedir REGISTRED; + + my($logtin, $users) = ($#users + 1, $#registred - 1); + &start_html("Created & Copyright by Paul C. B\374tow", 'start'); + print qq[
\n \n \n \n \n
\n
\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n
\n yChat: Version $version\n

\n Letztes Update: $datum\n

\n Seitenaufrufe: $counter\n

\n Benutzer registriert: $users\n

\n Benutzer online: $logtin\n

\n Benutzerlimit: $limit\n

\n Page: www.yChat.org\n

[webchat]
\n
\n
\n \n
\n
\n]; + if ($tmp eq 'true') { + print qq[
\n ACHTUNG!\n
\n
\n Wahrscheinlich existiert Dein Alias "$alias" nicht,\n
\n Du hast Dich verschrieben oder das Passwort ist falsch.\n
\n Versuch es erneuert !\n
\n]; + } + elsif ($tmp eq 'quit') { + print qq[
\n Du hast soeben den Chat verlassen.\n
\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n
\n]; + } + elsif ($tmp eq 'autologout') { + print qq[
\n Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.\n
\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n
\n]; + } + elsif ($tmp eq 'autokick') { + print qq[
\n Du wurdest automatisch aus dem Chat katapultiert. Grund: Du hast den Chat geflutet!\n
\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n
\n]; + } + elsif ($tmp eq 'banned') { + print "
\n ACHTUNG!\n
\n
\n Du wurdest aus dem Chat verbannt!!!\n
\n Z.z. kannst Du Dich leider nicht in den Chat einloggen.\n
\n Sorry!\n
\n"; + } + elsif ($tmp eq 'kick') { + print "
\n ACHTUNG!\n
\n
\n Du wurdest soeben aus dem Chat katapultiert!\n
\n Schlechtes Verhalten mag die Ursache hierf\374r sein.\n
\n Sorry!\n
\n"; + } + elsif ($tmp eq 'selfkill') { + print qq[
\n Du hast dich soeben ganz und gar aus dem System gel\366scht!\n
\n Wenn du dir einen neuen Nick angelen willst, dann einfach auf "Registrieren" klicken! :-)\n
\n]; + } + elsif ($tmp eq 'selfkill') { + print "
\n ACHTUNG!\n
\n
\n Du wurdest soeben aus dem Chat ausgeloggt!\n
\n Ursache hierf\374r mag sein, da\337 der Chat voll war und Du Dich nicht am\n Geschehen beteiligt- und unn\366tige Chatkapazit\344ten in Anspruch\n genommen hast.\n
\n Sorry!\n
\n"; + } + elsif ($tmp eq 'full') { + print "
ACHTUNG!
Der Chat ist leider voll! Bitte versuch Dich sp\344ter noch mal einzuloggen!
"; + } + elsif ($var eq 'create_alias') { + print q[
Du hast sich soeben in die Datenbank eingetragen. Einfach auf "Los Geht's" klicken :-)
]; + } + else { + print qq[
\n Herzlich willkommen!\n
\n Einfach Daten eingeben und auf "Los Geht's" klicken :-)\n
\n]; + } + print qq[
\n
\n \n \n \n \n \n \n \n
\n
\n Dein Alias:\n
\n \n
\n
\n
\n Dein Passwort:\n
\n \n
\n
\n
\n
\n
\n Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken!\n
\n
\n \n \n \n \n \n
\n \n \n \n \n \n
\n \n \n \n \n \n
\n
\n
\n]; + if ($logtin > 0) { + print q[
Folgende Personen sind eingeloggt:
]; + foreach $_ (@users) { + print "$_ " if -f "data/online/users/$_"; + } + print '
'; + } + print "
\n
\n\n\n"; + unless (-d 'data/online/rooms') { + mkdir 'data/online/rooms', 511; + } +} +sub create_alias_html { + open BAN, '; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq 'ip://' . $client->peerhost) { + $tmp = 'banned'; + &login_html; + $client->shutdown(2); + exit 0; + } + } + my $reload = $_[0]; + &start_html('Registration'); + print "
\n \n \n \n \n
\n"; + if ($reload eq 'alias_exists') { + print qq[
\n ACHTUNG!\n
\n
\n Der von Dir gew\344hlte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit\n einem anderen Benutzernamen !\n
\n
\n]; + } + elsif ($reload eq 'pw_wrong') { + print "
\n ACHTUNG!\n
\n
\n Deine beiden Passworteingaben stimmen nicht \374berein. Bitte geb das Passwort erneuert an um sicherzugehen, da\337\n kein falsches Passwort abgespeichert wird !\n
\n
\n"; + } + elsif ($reload eq 'alias_prohibited') { + print qq[
\n ACHTUNG!\n
\n
\n Dein gew\344hlter Benutername "$alias" enth\344lt illegale Zeichen. Bitte versuch einen anderen Benutzernamen!\n
\n
\n]; + } + elsif ($reload eq 'alias_length') { + print qq[
\n ACHTUNG!\n
\n
\n Dein gew\344hlter Benutername "$alias" enth\344lt zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!\n
\n
\n]; + } + else { + print "
\n Hier kannst Du Dich registrieren. Bitte beachte, da\337 die Passworteingabefelder \374bereinstimmen!\n
\n
\n"; + } + print qq[
\n \n \n
\n Dein Alias:\n \n (Mu\337 angegeben werden)\n \n
\n \n
\n
\n
\n Dein gew\374nschtes Passwort:\n
\n \n
\n
\n
\n Geb hier Dein Passwort erneuert ein:\n
\n \n
\n
\n \n \n \n
\n
\n
\n
\n Um den Chat zu betreten m\374ssen die Daten nach der Registration auf der Startseite erneuert best\344tigt werden !\n
\n
\n
\n\n\n]; +} +sub checklogin { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + closedir USERS; + my $users = $#users; + if ($users > $limit && 3 > &hierachie($alias)) { + $tmp = 'full'; + &login_html; + $client->shutdown(2); + exit 0; + } + my $lognotexists = 'true'; + opendir USERDIR, 'data/user/options'; + my(@userdir) = readdir USERDIR; + closedir USERDIR; + foreach $user (@userdir) { + if ($user eq $alias) { + open OPTIONS, "; + close OPTIONS; + foreach $_ (@options) { + chomp $_; + } + if ($options[0] eq $pw) { + open BAN, '; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq $alias or $_ eq 'ip://' . $client->peerhost) { + if (-f "data/online/users/$admin") { + &post_prv($admin, "$_ kann sich nicht einloggen (Ist verbannt)!!"); + } + $tmp = 'banned'; + &login_html; + $client->shutdown(2); + exit 0; + } + } + if ($options[1] eq undef) { + $col = &random_color; + } + else { + $col = $options[1]; + } + if ($options[2] eq undef) { + $secol = &random_color; + } + else { + $secol = $options[2]; + } + if ($options[3] eq undef) { + $maxVerlauf = '10'; + } + else { + $maxVerlauf = $options[3]; + } + if ($options[4] eq undef) { + $verlaufOrder = '1'; + } + else { + $verlaufOrder = $options[4]; + } + &rm_if_loggedin($alias); + my(@digit) = (('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'), ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'), (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), '-', '.'); + my $num1 = rand @digit; + my $num2 = rand @digit; + my $num3 = rand @digit; + my $num4 = rand @digit; + my $num5 = rand @digit; + my $num6 = rand @digit; + my $num7 = rand @digit; + my $num8 = rand @digit; + my $num9 = rand @digit; + my $num10 = rand @digit; + $tmpid = $digit[$num1] . $digit[$num2] . $digit[$num3] . $digit[$num4] . $digit[$num5] . $digit[$num6] . $digit[$num7] . $digit[$num8] . $digit[$num9] . $digit[$num10]; + open TMPID, ">data/online/tmpid/$alias.$tmpid"; + print TMPID $alias; + close TMPID; + open IDENT, ">data/online/ident/$alias"; + print IDENT $client->peerhost . "\n$tmpid\n" . $client->peerhost . ':' . $client->peerport . "\n$col\n$secol"; + close IDENT; + open LASTLOGIN, ">data/user/lastlogin/$alias"; + print LASTLOGIN time; + close LASTLOGIN; + &frameset_html; + $client->shutdown(2); + exit 0; + } + else { + $lognotexists = 'false'; + } + } + } + &login_html; +} +sub create_alias { + if ($alias =~ /\W/ or $alias eq '') { + goto CREATE if $alias =~ /[-]/ and not $alias =~ /\W/; + &create_alias_html('alias_prohibited'); + $client->shutdown(2); + exit 0; + } + elsif ($pw ne $tmp) { + &create_alias_html('pw_wrong'); + $client->shutdown(2); + exit 0; + } + elsif (length $alias >= 15) { + &create_alias_html('alias_length'); + $client->shutdown(2); + exit 0; + } + CREATE: opendir USERDIR, 'data/user/options'; + my(@user) = readdir USERDIR; + close USERDIR; + foreach $user (@user) { + if ($user eq $alias) { + &create_alias_html('alias_exists'); + $client->shutdown(2); + exit 0; + } + } + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $pw . "\n"; + close OPTIONS; + &login_html; +} +sub frameset_html { + print qq[\n \n \n $title\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n\n]; +} +1; diff --git a/0.7.6/modules/statistic.pm b/0.7.6/modules/statistic.pm new file mode 100644 index 0000000..a0aad73 --- /dev/null +++ b/0.7.6/modules/statistic.pm @@ -0,0 +1,148 @@ +sub statistic { + &start_html('Statistiken'); + &menu; + print $q->div('yChat Statistiken'), $q->hr, $q->div($q->a({-'href', "chat?request=statistic&var=ranking&alias=$alias&tmpid=$tmpid"}, 'Rankings'), ' | ', $q->a({-'href', "chat?request=statistic&var=del&alias=$alias&tmpid=$tmpid"}, 'Loginstatistiken'), ' | ', $q->a({-'href', "chat?request=statistic&var=statistic&alias=$alias&tmpid=$tmpid"}, 'DB-Statistik'), ' | ', $q->a({-'href', "chat?request=statistic&var=var&alias=$alias&tmpid=$tmpid"}, 'Umgebungsvariablen')), $q->hr; + if ($var eq 'ranking') { + opendir COUNTS, 'data/user/counts'; + my(@counts) = readdir COUNTS; + closedir COUNTS; + print '
'; + my $nr_start = $start; + my $nr_end = $end; + my %online; + my $rank; + my $nr; + foreach $_ (@counts) { + if (-f "data/user/counts/$_") { + if (s/.online//g) { + open TOTAL, "; + close TOTAL; + $online{sprintf '%.2f', $total / 3600} = $_; + } + } + } + print '
', $q->b('Rankings:'), $q->br, ''; + if (not $nr_start) { + $nr_start = 1; + } + if (not $nr_end) { + $nr_end = 20; + } + foreach $wert (reverse (sort { $a <=> $b } keys %online)) { + ++$nr; + if ($online{$wert} eq $alias) { + $rank = $nr; + last if $nr > $nr_end; + } + next if ($nr < $nr_start or $nr > $nr_end); + print q[\n"; + } + print '
#:
St.:
Name:
] . $nr . q[ ] . $wert . "h $online{$wert}
', $q->hr; + $nr_start -= 20; + $nr_end -= 20; + print "Rankings von $nr_start bis $nr_end anzeigen ...
" if $nr_start > 0; + $nr_start += 40; + $nr_end += 40; + print "Rankings von $nr_start bis $nr_end anzeigen ...", $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank
"); + } + elsif ($var eq 'del') { + print '
', $q->b('Alte Benutzer löschen:'), $q->br, "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gel\366scht.", $q->br, $q->br; + opendir USER, 'data/user/options'; + my(@user) = readdir USER; + closedir USER; + @user = sort(@user); + my $i = 0; + my $j; + my $k = 0; + my $l = 0; + my $full = $tmp; + foreach $_ (@user) { + if (-f "data/user/lastlogin/$_") { + open LOGIN, "; + close LOGIN; + $login = sprintf('%.2f', (time - $login) / 3600); + ++$j; + if (999 < $login and $login < 1440) { + ++$k; + print $q->font({-'color', 'ffa500'}, $q->b("$j($k) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 48) { + ++$l; + print $q->font({-'color', 'ffffef'}, $q->b("$j($l) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 1440) { + print "$j $_ Letztes Login vor: " . $login . 'h', $q->br, "\n" if $full ne undef; + } + else { + ++$k; + &kill_it($_, $i++, $login); + } + } + elsif (-f "data/user/options/$_") { + &kill_it($_, $i++); + } + } + print $q->hr if $full ne undef; + print '
', $q->div($q->b("$j Benutzer befinden sich in der Datenbank!", $q->br, $q->font({-'color', 'ffffef'}, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br, $q->font({-'color', 'ffa500'}, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br, $q->font({-'color', 'ff0000'}, "$i Benutzer wurden gerade eben gel\366scht!")), $q->br, $q->br, 'PS: Jeder registrierte Benutzername wird nur einmal gezählt!'); + print $q->br, $q->div('(', $q->a({-'href', "chat?request=statistic&var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, 'Vollständige Ansicht'), ')') if $full eq undef; + } + elsif ($var eq 'var') { + print '
', $q->b('Server Umgebungsvariablen:'), $q->br, $q->br, 'Die Serverumgebungsvariablen können nur von Oberwächtern oder höher eingesehen werden!', $q->br, $q->br; + if (7 <= &hierachie($alias)) { + while (($key, $value) = each %ENV) { + print "$key = $value\n", $q->br; + } + } + print '
'; + } + elsif ($var eq 'statistic') { + print $q->div($q->b('yChat-DB Statistik:')), $q->br; + $files = 0; + $size = 0; + $directorys = 1; + &zaehle('data'); + $size = sprintf('%.2f', $size / 1048576); + print $q->div("Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys"); + } + print $q->end_html; +} +sub zaehle { + local($dir, $data) = @_; + $dir = "$dir/$data" if $data ne undef; + opendir DATA, $dir; + local(@data) = readdir DATA; + closedir DATA; + $files2 = 0; + foreach $_ (@data) { + if (-f "$dir/$_") { + ++$files; + ++$files2; + $size += -s "$dir/$_"; + } + elsif (-d "$dir/$_" and $_ ne '.' and $_ ne '..') { + ++$directorys; + &zaehle($dir, $_); + } + } +} +sub kill_it { + my($rm, $nr, $login) = @_; + $login = 'XXXXXX' if $login eq undef; + print $q->font({-'color', 'ff0000'}, $q->b("$j($nr) $rm Letztes Login vor: " . $login . 'h (wurde gelöscht)')), $q->br, "\n"; + print q[]; + print 'options ' if unlink "data/user/options/$rm"; + print 'profiles ' if unlink "data/user/profiles/$rm"; + print 'gbooks ' if unlink "data/user/gbooks/$rm"; + print 'counts ' if unlink "data/user/counts/$rm"; + print 'counts.online ' if unlink 'data/user/counts/' . $rm . '.online'; + print 'lastlogin ' if unlink "data/user/lastlogin/$rm"; + print 'memos' if unlink "data/user/memos/$rm"; + print '', $q->hr, "\n"; + &zeit; + open DEL, '>>data/kill'; + print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n"; + close DEL; +} +1; diff --git a/0.7.6/modules/stream.pm b/0.7.6/modules/stream.pm new file mode 100644 index 0000000..2885d8b --- /dev/null +++ b/0.7.6/modules/stream.pm @@ -0,0 +1,170 @@ +sub stream { + unlink "data/online/rooms/$loginplace/$alias"; + &secure_checkid($alias, $tmpid); + my $pid = $$; + $SIG{'CHLD'} = 'IGNORE'; + ++$|; + print qq[\n \n\n\n\n]; + &check_online; + print "$title - Letzte Änderung $datum\n; Der Chat wird geladen...\n
"; + sleep 1; + print "Hallo $alias, mit dem Befehl /menu kannst du das Chat-Menü aufrufen!
"; + sleep 1; + print "Du befindest dich im Raum $room: " . get_theme($room) . "
\n"; + print "
\n"; + + if (-f "data/user/memos/$alias") { + open MEMOS, "; + close MEMOS; + my $memos; + foreach $_ (@memos) { + $memos .= $_; + } + print $memos; + unlink "data/user/memos/$alias"; + } + + my ($change_room, + $startime, + $flooding, + @ignore, + @flood); + + OPENMSGFILE: + $change_room = 0; + $startime = time; + $flooding = 0; + unless (-f "data/online/rstat/$room") { + open DATEI, ">data/online/rstat/$room"; + print DATEI "0\n\n$alias<;1\n"; + close DATEI; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + if (-e "data/msgs/$room") { + open MSGFILE, "data/online/pids/$room/$pid"; + print PID time; + close PID; + } + else { + sleep 1; + goto OPENMSGFILE; + } + &sendmsgs; + while (-f "data/online/users/$alias") { + local $SIG{'USR1'} = \&sendmsgs; + goto OPENMSGFILE if $change_room == 1; + unlink "data/online/rooms/$loginplace/$alias" + if (-f "data/online/rooms/$loginplace/$alias"); + sleep 15; + print "\n"; + } + sub sendmsgs { + for ($curpos = tell MSGFILE; defined($_ = ); $curpos = tell MSGFILE) { + my($address, $stamp, $command, $action, $message, $from) = split(/<;/, $_, 7); + if ($address =~ /$\!/ or $address eq $alias) { + if ($stamp > $startime) { + if ($command eq 'col') { + ($col, $secol) = split(/;/, $action, 3); + } + elsif ($command eq 'cr') { + unlink "data/online/pids/$room/$pid"; + $room = $action; + close MSGFILE; + $change_room = 1; + } + elsif ($command eq 'ig') { + my @temp; + my $add2list = 1; + foreach $_ (@ignore) { + if ($action ne $_) { + push @temp, $_; + } + else { + $add2list = 0; + } + } + if ($add2list == 1) { + push @ignore, $action; + print "$action wird nun ignoriert!
\n"; + &post_prv_extra($action, "Du wirst nun von $alias ignoriert!"); + } + else { + @ignore = @temp; + print "$action wird nun nicht mehr ignoriert!
\n"; + &post_prv_extra($action, "Du wirst nun von $alias nicht mehr ignoriert!"); + } + } + elsif ($command eq 'igl') { + my $ignored; + foreach $_ (@ignore) { + $ignored .= "$_ "; + } + if ($#ignore == -1) { + print "Momentan wird keine Person von dir ignoriert!
\n"; + } + else { + print "Folgende Personen werden von dir ignoriert: $ignored!
\n"; + } + } + elsif ($command eq 'quit') { + print "\n"; + last; + } + elsif ($change_room != 1) { + my $ignored = 0; + foreach $_ (@ignore) { + if ($_ eq $from) { + $ignored = 1; + last; + } + } + if ($ignored != 1) { + print "$message\n"; + } + else { + $address =~ s/!//; + &post_prv_extra($from, "Du wirst von $alias ignoriert!") if $address eq $alias; + } + } + push @flood, $address . $command . $action . $message . $from; + if ($flood[0] eq $flood[1] and $flood[0] eq $flood[2] and $flood[0] eq $flood[3]) { + print "$from flutet den Chat !
\n"; + if ($from eq $alias and $flooding++ and $flooding >= 4) { + &post($room, q[] . ×tring . " Das System katapultiert $alias> wegen Fluten des Chats nach draussen ... ", $alias); + print "\n"; + &rm_alias($alias, $room); + } + } + else { + $flooding = 0; + } + shift @flood if $#flood > 2; + } + } + } + seek MSGFILE, $curpos, 0; + } + unlink "data/online/pids/$room/$pid"; +} +sub post_prv_extra { + my($alias, $message) = @_; + my $helpid = fork; + if ($helpid == 0) { + &post_prv($alias, $message); + exit 0; + } +} +1; diff --git a/0.7.6/modules/webchat.pm b/0.7.6/modules/webchat.pm new file mode 100644 index 0000000..90f8731 --- /dev/null +++ b/0.7.6/modules/webchat.pm @@ -0,0 +1,22 @@ +sub webchat { + my @rooms = &diropen('data/online/rooms'); + my $output; + + foreach my $room (@rooms) { + next if ($room =~ /\./); + my @users = &diropen("data/online/rooms/$room") or print "$!\n"; + + foreach my $user (@users) { + next if ($user =~ /\./); + open FILE, "data/online/rooms/$room/$user"; + my $timestamp = ; + close FILE; + chomp $timestamp; + + $output = $output . "($user)($timestamp)($room)\n"; + } + } + + print $output; +} +1; -- cgit v1.2.3