diff options
| author | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:47 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:47 +0200 |
| commit | 630af0ed6c0af69c7df2e45aef7a87722a3c00c0 (patch) | |
| tree | ad76f850278b090f7e5c26561035d19c320400cc /0.7.6/modules | |
| parent | 2860b03f00e48264ed15c132ad90b240ebe6070b (diff) | |
tagging ychat-perl-legacyychat-perl-legacy
Diffstat (limited to '0.7.6/modules')
| -rw-r--r-- | 0.7.6/modules/changeroom.pm | 67 | ||||
| -rw-r--r-- | 0.7.6/modules/commands.pm | 870 | ||||
| -rw-r--r-- | 0.7.6/modules/divcom.pm | 266 | ||||
| -rw-r--r-- | 0.7.6/modules/hierachie.pm | 77 | ||||
| -rw-r--r-- | 0.7.6/modules/htdocs.pm | 127 | ||||
| -rw-r--r-- | 0.7.6/modules/input.pm | 14 | ||||
| -rw-r--r-- | 0.7.6/modules/loggedin.pm | 41 | ||||
| -rw-r--r-- | 0.7.6/modules/online.pm | 148 | ||||
| -rw-r--r-- | 0.7.6/modules/postmessage.pm | 90 | ||||
| -rw-r--r-- | 0.7.6/modules/shared.pm | 338 | ||||
| -rw-r--r-- | 0.7.6/modules/start.pm | 252 | ||||
| -rw-r--r-- | 0.7.6/modules/statistic.pm | 148 | ||||
| -rw-r--r-- | 0.7.6/modules/stream.pm | 170 | ||||
| -rw-r--r-- | 0.7.6/modules/webchat.pm | 22 |
14 files changed, 2630 insertions, 0 deletions
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, "<font color='ffffff'>Du befindest dich bereits im Raum <font color='ffa500'>$newroom</font>!</font>"); + &reload_html; + } + elsif ($newroom eq $loginplace) { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verlässt den Chat und geht in die <b>$loginplace</b> ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &check_online; + &reload_html; + } + open RSTAT, "<data/online/rstat/$newroom"; + my(@rstat) = <RSTAT>; + close RSTAT; + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$newroom</font> ist leider abgesperrt!</font>"); + &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[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'ju') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du folgst <font color='".&get_ident($alias2,3)."'>$alias2</font> aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'sep') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrst ab...</font></i><br><;\n"; + } + close MSGFILE; + &post_strmsg($alias, $room, 'cr', $newroom); + $room = $oldroom; + my $tmpstamp = time; + if ($method eq 'j') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'ju') { + my $col2 = &get_ident($alias2,3); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> folgt <font color='$col2'>$alias2</font> in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> und folgt <font color='$col2'>$alias2</font> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'sep') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> und sperrt ab...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrt ab...</font></i>", $alias); + } + elsif ($method eq 'beam') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> in den Raum <b>$newroom</b>...</font></i>", $alias2); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> aus dem Raum <b>$oldroom</b> herein nach <b>$room</b>...</font></i>", $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) = <RSTAT>; + close RSTAT; + my $lock = "0\n"; + if ($room eq $standardroom) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ohne Erfolg ab ...</font></i>", $alias); + } + else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ab ...</font></i>", $alias) if $method ne 'separee'; + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum auf ...</font></i>", $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, "<font color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. B\374tow (2000 - 2002).</font>"); + &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, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> meldet <font color='".&get_ident($alias,3)."'>$alias</font> wegen Inaktivität ab ...</i></font>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> meldet sich ab (<font color='$col'>$away_msg</font> ) ...</i></font>", $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, "<script language='JavaScript'>window.open('chat?request=stream&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');</script>"); + &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, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $options[0] . $col . "\n" . $secol; + close OPTIONS; + open IDENT, "<data/online/ident/$alias"; + my(@ident) = <IDENT>; + close IDENT; + open IDENT, ">data/online/ident/$alias"; + print IDENT $ident[0] . $ident[1] . $ident[2] . "$col\n$secol"; + close IDENT; + &post($room, '<i><font color=ffffff>' . ×tring . "</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt...</font></i>", $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, "<font color=ffffff>Heute ist der $days.$months. Jahr $years. Es ist genau $hours:$mins Uhr und $secs Sekunden.</font>"); + &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, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> loggt <font color='".&get_ident($alias,3)."'>$alias</font> wegen Inaktivität aus ... </font></i>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt sich ganz aus ... </font></i>", $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, "<data/user/options/$cols2show"; + my(@file) = <FILE>; + close FILE; + chomp $file[1]; + chomp $file[2]; + &post_prv($alias, "<font color='ffa500'>$cols2show <font color='ffffff'> verwendet als 1. Farbe <font color='$file[1]'>$file[1]</font> und als 2. Farbe <font color='$file[2]'>$file[2]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$cols2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'hits' or $cmd eq 'uptime') { + &post_prv($alias, "<font color=ffffff>Uptime: $startime " . &calculate_uptime_hours($STARTIME) . "h; $HITS Hits; " . &calculate_hpm($HITS, $STARTIME) . ' Hits pro Minute</font>'); + &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, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'> kann nicht ignoriert werden!</font>"); + } + else { + &post_strmsg($alias, $room, 'ig', $alias2ignore); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'>existiert nicht in der Datenbank!</font>"); + } + } + 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, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> enth\344lt illegale Zeichen!</font>"); + &reload_html; + } + else { + if ($cmd eq 'j') { + &change_room('j', $cmd[1], $room); + &reload_html; + } + else { + if ($cmd[1] eq $standardroom) { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> ist ein Standardraum und kann nicht als Separee eröffnet werden!</font>"); + } + 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/][<i>$alias</i>]g; + $me_msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if ($cmd eq 'm') { + &post($room, "<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>", $alias); + } + else { + &post($room, "<b><font color=$col><i>$alias</i> $me_msg</font></b>", $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, "<font color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>"); + open MEMO, ">>data/user/memos/$alias2memo"; + print MEMO "<font color=ffffff>($days.$months.$years - $hours:$mins:$secs) <font color=$col>$alias</font> hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>\n"; + close MEMO; + &reload_html; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>"); + &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, "<data/user/counts/$alias2prove.online"; + my $online = <ONLINE>; + close ONLINE; + my $totaltime = sprintf('%.2f', $online / 3600); + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>"); + } + else { + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'q') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verlässt den Chat ... </font></i>", $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, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das eigene G\344stebuch ...</font></i>", $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, "<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>", $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, "<data/user/lastlogin/$alias2prove"; + my $lastlogin = <LASTLOGIN>; + close LASTLOGIN; + my $timestamp = sprintf('%.2f', (time - $lastlogin) / 3600); + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>"); + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich seit der Einf\374hrung dieses Befehls noch nie eingeloggt!</font></font>"); + } + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'selfkill') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> entfernt sich ganz und gar aus dem System und loggt sich aus ... </font></i>", $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 = '[<font color=red>Abgesperrt!</font>]' 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 . ' ' . "<font color='".&get_ident($_,3)."'>$_</font>"; + ++$nr; + } + } + &post_prv($alias, "<font color=ffffff>Der aktuelle <b>Raum:</b> $room $theme $door ($nr): $persons</font>"); + &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 . ' ' . "<font color='".&get_ident($_,3)."'>$_</font>" if -f "data/online/users/$_"; + } + my $nr = $#users - 1; + my($nrs, $is) = ('', 'ist'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'sind'; + } + &post_prv("$alias", "<font color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: $persons</font>"); + } + 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, "<data/online/rstat/$_"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my $nr = $#dir2 - 1; + $msg2post = $msg2post . "<tr><td><b><font size=2 color='ffffff'>$_ $door ($nr) [" . $rstat[1] . q(]: </font></b></td></tr><tr><td><font size=2 color='ffa500'>); + foreach $chatter (@dir2) { + $msg2post = $msg2post . "<font color='".&get_ident($chatter,3)."'>$chatter</font> " if -f "data/online/rooms/$_/$chatter"; + } + print '</font></td>'; + } + } + &post_prv($alias, "<font color=ffffff>Folgende Räume sind offen:</font><table>$msg2post</table>"); + } + elsif ($raum ne '') { + my $persons; + opendir DIR, "data/online/rooms/$raum"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + $persons = $persons . ' ' . "<font color='".&get_ident($chatter,3)."'>$_</font>" if -f "data/online/rooms/$raum/$_"; + } + my($nr, $is) = ($#dir - 1, 't'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'n'; + } + &post_prv($alias, "<font color=ffffff> $nr Person$nrs befinde$is sich im Raum <b>$raum</b> $persons</font>"); + } + &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, "<font color='ffa500'>$alias2search <font color=ffffff>befindet sich im Raum <b>$roomofalias</b> !</font></font>"); + } + else { + &change_room('ju', $roomofalias, $room, $alias2search); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff> ist nicht eingeloggt!</font></font>"); + } + &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, "<data/online/rstat/$room"; + my(@rstat) = <DATEI>; + close DATEI; + if (1 <= hierachie($alias2su, $room)) { + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color='ffffff'> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, W\304 oder OW)</font>"); + &reload_html; + } + open RSTAT, ">>data/online/rstat/$room"; + print RSTAT "$alias2su<;1\n"; + close RSTAT; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verleiht <font color='".&get_ident($alias2su,3)."'>$alias2su</font> Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &reload_html; + } + } + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + &reload_html; + } + elsif ($cmd eq 'rsu') { + my $alias2rsu = $cmd[1]; + if (1 == hierachie($alias2rsu, $room)) { + &rm_rstat($alias2rsu, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entzieht <font color='".&get_ident($alias2rsu,3)."'>$alias2rsu</font> die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rsu <font color='ffffff'>ist gar kein Raumbesetzer!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 't') { + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $theme; + if ($cmd[1] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, q[<i><font color='ffffff'>] . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums ...</font></i>", $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, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + if ($cmd[1] eq undef) { + my $nr = @ban; + my $banned; + foreach $_ (@ban) { + chomp $_; + $banned .= " $_"; + } + &post_prv($alias, "<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color='ff0000'>$banned</font></font>"); + &reload_html; + } + elsif (-f "data/user/options/$alias2ban") { + if (3 <= $hierachie) { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color='ffffff'>kann nicht verbannt werden!</font></font>"); + &reload_html; + } + if ($cmd eq 'ban') { + if (&add_entry($alias2ban, 'ban') == 1) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verbannt <b>$alias2ban</b> aus dem Chat ...</font></i>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>"); + } + } + elsif ($cmd eq 'banip') { + open DATEI, "<data/online/ident/$alias2ban"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + if (add_entry("ip://$ipnr", 'ban') == 1) { + &post_prv($alias, "<font color='ffffff'>IP-Nummer von <font color='ffa500'>$alias2ban</font> (<font color='ff0000'>$ipnr</font>) wurde verbannt!</font></i>"); + } + else { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$ipnr</font> von <font color='ffa500'>$alias2ban</font> ist bereits verbannt!</font></font>"); + } + &reload_html; + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff> kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'rban' or $cmd eq 'rbanip') { + my $alias2rban = $cmd[1]; + open BAN, '<data/ban'; + @ban = <BAN>; + close BAN; + foreach $ban (@ban) { + if (&rm_entry($alias2rban, 'ban') == 1) { + if ($alias2rban =~ /ip:/) { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$alias2rban</font> wurde aus der Banliste ausgetragen!</font></font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entbannt <font color='".&get_ident($alias2rban,3)."'>$alias2rban</font> ...</font></i>", $alias); + } + &reload_html; + } + } + &post_prv($alias, "<font color='ff0000'>$alias2rban <font color='ffffff'>ist nicht verbannt!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'img') { + my $hierachie = &hierachie($alias, $room); + &hierachie_rm($alias); + if ($hierachie == 3) { + &post_prv($alias, q[<font color='ffffff'>Als temporärer Wächter kannst du dein Superuserlogo nicht verstecken!</font>]); + } + elsif ($hierachie % 2 > 0) { + &post_prv($alias, q[<font color='ffffff'>Dein Superuserlogo wurde versteckt!</font>]); + &hierachie_add($alias, $hierachie + 1); + } + else { + &post_prv("$alias", q[<font color='ffffff'>Dein Superuserlogo wurde wieder sichtbar gemacht!</font></font>]); + &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, "<data/online/ident/$alias2prove"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + &post_prv($alias, "<font color='ffa500'>$_<font color='ffffff'> hat die IP-Nummer <font color='ff0000'>$ipnr</font> !</font></font>"); + } + } + &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, "<font color='ffa500'>$alias2kick <font color='ffffff'> besitzt einen höheren oder gleichen Rang und kann nicht gekickt/ausgeloggt werden!</font></font>"); + } + else { + if ($cmd eq 'k') { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=kick","_top");</script>'); + } + else { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=logout","_top");</script>'); + } + $_ = undef if $room eq $raum; + if ($cmd eq 'k') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> katapultiert <font color='".&get_ident($alias2kick,3)."'>$alias2kick</font> aus dem Chat ...</font></i>", $alias, $raum); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt <font color='".&get_ident($alias2kick,3)."'>$alias2kick</font> aus dem Chat aus ...</font></i>", $alias, $alias); + } + &rm_alias($alias2kick, $raum); + &check_online; + } + &reload_html; + } + } + } + } + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> ist nicht anwesend und kann nicht aus dem System katapultiert werden werden!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'sl') { + my $sl_room = $cmd[1]; + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + open RSTAT, "<data/online/rstat/$sl_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen ab ...</font></i>", $alias, $sl_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen auf ...</font></i>", $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, "<font color='ffffff'>Der Raum <font color='ffa500'>$sl_room</font> existiert nicht!</font></font>"); + } + &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[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> ruft in den Raum <b>$ss_room</b> hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>", $alias, $ss_room); + &reload_html; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$ss_room</font> existiert nicht!</font></font>"); + } + &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, '<i><font color=ffffff>' . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum <b>$st_room</b> das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias, $st_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums <b>$st_room</b> ...</font></i>", $alias, $st_room); + } + open RSTAT, "<data/online/rstat/$st_room"; + my(@r_stat) = <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, "<font color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'status') { + my $alias2level = $cmd[1]; + &post_prv($alias, "<font color='ffa500'>$alias2level <font color='ffffff'>hat den Superuserstatus <font color='ff0000'>".&hierachie($alias2level, &get_room($alias2level))."</font> !</font></font>"); + &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, "<font color='ffa500'>$alias2kill</font> <font color='ffffff'>hat einen höheren Rang und kann nicht aus dem System entfernt werden !</font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col>$alias</font> killt <b>$alias2kill</b> ganz und gar aus dem System ...</font></i>", $alias); + &kill_alias($alias2kill, $alias); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2kill <font color='ffffff'> existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'sys') { + my $sys_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $sys_msg = $sys_msg . ' ' . $cmd[$i]; + } + $sys_msg = q[<i><font color='ffffff'>] . ×tring . " </font></i> <b><font size=2 color='red'>SYSTEMNACHRICHT</font></b><i><font color='ffffff'>: $sys_msg ...</font></i>"; + 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, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum temporären Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add_rstat($alias2wa, 3, $room2); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2wa,3)."'>$alias2wa</font> zum <font color='ff0000'>temporären</font> W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &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[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2rwa,3)."'>$alias2rwa</font> vom <font color='ff0000'>temporären</font> W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein temporärer W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'wa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + if (5 <= &hierachie($alias2wa)) { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2wa, 5); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2wa,3)."'>$alias2wa</font> zum W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &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[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2rwa,3)."'>$alias2rwa</font> vom W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &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, "<font color='ffa500'>$alias2ow <font color='ffffff'>kann nicht zum Oberwächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2ow, 7); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2ow,3)."'>$alias2ow</font> zum Oberwächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &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[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2row,3)."'>$alias2row</font> vom Oberw\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2row <font color=ffffff>ist kein Oberw\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'pw') { + my $pw2show = $cmd[1]; + if (-f "data/user/options/$pw2show") { + open PW, "<data/user/options/$pw2show"; + my(@pw) = <PW>; + close PW; + chomp $pw[0]; + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> hat das Passwort <font color='ff0000'>$pw[0]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &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, "<font color='ffa500'>$id2show <font color='ffffff'> hat die Temp-ID <font color='ff0000'>".&get_ident($id2show, 1)."</font> !</font></font>"); + } + else { + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> verwendet <font color='ff0000'>".&get_ident($id2show, 2)."</font> !</font></font>"); + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> ist nicht eingeloggt !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'cool') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . " $msg2post</font></i>", $alias); + &reload_html; + } + elsif ($cmd eq 'rev') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post = reverse($msg2post); + &post($room, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $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, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $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 .= "<font color='".&random_color."'>$_</font>"; + } + &post($room, "<b>$msg2post</b>", $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/][<i>$alias</i>]g; + $msg2post =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if (-f "data/online/users/$alias2post" and not -f "data/online/rooms/$loginplace/$alias2post") { + &post_prv($alias, "<b><font color='$col'><i>Zu $alias2post gefl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &post_prv($alias2post, "<b><font color='$col'><i>$alias fl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &private_javascript($alias, $room, "parent.input.document.inf.whisper.value = '$alias2post';"); + &reload_html; + } + &post_prv($alias, qq[ <font color=ffffff>Benutzer oder Befehl <font color=ffa500>$alias2post</font> ist nicht anwesend/verf\374gbar! Bitte den Befehl "/menu" eingeben, um das Chat-Menü zu öffnen.</font></font>]); + &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 " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </i>\n einen Text und poste\n <u>dann</u>\n !\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_ok') { + print " <div class=b>\n Meldung:\n </div>\n <div>\n Vielen Dank f\374r Deinen Beitrag. Wenn Du willst, kannst Du jetzt gleich noch einen Eintrag posten ...\n </div>\n <hr>\n"; + } + else { + print " <div>\n Falls Du Anregungen oder Verbesserungsvorschl\344ge f\374r die Community hast, dann poste doch einen kleinen Eintrag :-)\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="col" value="$col">\n<input type="hidden" name="secol" value="$secol">\n<input type="hidden" name="maxVerlauf" value="$maxVerlauf">\n<input type="hidden" name="verlaufOrder" value="$verlaufOrder">\n<input type="hidden" name="request" value="divcom">\n <input type="hidden" name="method" value="$method">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="guestbook">\n <input type="hidden" name="id" value="y">\n <input size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e 'data/guestbook') { + &error("Konnte dat/guestbook nicht \366ffnen") unless open DATEI, '<data/guestbook'; + @datei = <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; + $msg =~ s/\n/<br>/g; + my $tmpath = ''; + if ($id eq 'y') { + $tmpath = 'data/guestbook'; + } + else { + $tmpath = "data/user/gbooks/$tmp"; + } + open GB, "$tmpath"; + my(@gb) = <GB>; + close GB; + pop @gb if $#gb > 99; + my(@newdatei) = "<br><b>$alias schrieb am $days.$months.$years um $hours:$mins:$secs ...</b><br>$msg<br>\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, "<font color=ffffff>$alias hat soeben einen Pin in Dein Profil geh\344ngt ... </font>"); + &alias_html; + $client->shutdown(2); + exit 0; +} +sub rm_gb { + open GB, "<data/user/gbooks/$alias"; + my(@gbfile) = <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 " <div>\n Es sind z.Z. genau $nr Benutzernamen in der Datenbank vorhanden! (Sortiert nach #, A-Z, a-z)\n </div>\n <hr>\n <div>\n"; + foreach $_ (@liste) { + if (-f "data/user/options/$_") { + print $q->a({-'href', "chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid"}, "$_"), ' '; + } + } + print " </div>\n</body>\n</html>\n"; +} +sub alias_html { + my $message = $_[0]; + open COUNTS, "<data/user/counts/$tmp"; + local $counter = <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 " <div class=b>\n Meldung:\n </div>\n <div>\n Der von Dir gew\344hlte Eintrag wurde erfolgreich gel\366scht.\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_empty') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </u>\n einen Text und poste\n <u>dann</u>\n !\n <hr>\n"; + } + open PROFILE, "<data/user/profiles/$tmp"; + @data = <PROFILE>; + close PROFILE; + print qq[ <div>\n Dieses Profil wurde insgesamt schon $counter mal aufgerufen !\n <br><br>Alias: $tmp\n <br><br>Nachname: $data[0]\n <br><br>Vorname: $data[1]\n <br><br>Alter: $data[2]\n <br><br>Wohnort: $data[3]\n <br><br>E-Mail:\n <a href="mailto:$data[4]">$data[4]</a>\n <br><br>ICQ-Nummer: $data[5]\n <br><br>Homepage: <a href="$data[6]" target="_new">$data[6]</a>\n <br><br>Weiteres:<br>$data[7]\n <hr>\n Hier kannst Du $tmp eine Nachricht hinterlassen!\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n <input type="text" size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e "data/user/gbooks/$tmp") { + &error("Konnte data/user/gbooks/$tmp nicht \366ffnen") unless open DATEI, "<data/user/gbooks/$tmp"; + @datei = <DATEI>; + close DATEI; + my $nr = 1; + if ($alias ne $tmp) { + foreach $_ (@datei) { + print "<br>Eintrag # $nr: $_"; + ++$nr; + } + } + else { + print qq[ <table>\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="rm_gb_alias">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n]; + for ($i = 0; $i <= $#datei; ++$i) { + print qq[ <tr>\n <td>\n <input type="radio" name="id" value="$i">\n </td>\n <td>\n <div class=q>\n <br>\n Eintrag # $nr:\n $datei[$i]\n </div>\n </td>\n </tr>\n]; + ++$nr; + } + print qq[ </table>\n <table>\n <tr>\n <td>\n <font color=ffffff>\n <input type="submit" value="Markierten Eintrag l\366schen">\n </font>\n </td>\n <td>\n <font color=ffffff>\n <input type="reset" value="Markierung r\374ckg\344ngig machen">\n </font>\n </td>\n </tr>\n </table>\n </form>\n]; + } + } + print $q->end_html; +} +sub edit_html { + my($method, $message) = @_; + &start_html("Benutzerprofil \344ndern"); + if ($method eq 'edit_options_html') { + open DATEI, "<data/user/options/$alias"; + } + elsif ($method eq 'edit_profile_html') { + open DATEI, "<data/user/profiles/$alias"; + } + @data = <DATEI>; + close DATEI; + foreach $_ (@data) { + chomp $_; + } + &menu(); + if ($method eq 'edit_options_html') { + if ($message eq 'edit_options_ok') { + print "<div class=b>\n Hinweis:\n</div>\n<div>\n Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um\n weiterzuchatten einfach Fenster schliessen!\n</div>\n<hr>\n"; + } + elsif ($message eq 'edit_pw_wrong') { + print "<div class=b>\n ACHTUNG!\n</div>\n<div>\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</div>\n<hr>\n"; + } + else { + print $q->div('Hier kannst Du Deine Chat-Optionen editieren!'), $q->hr; + } + print qq[<script lang="javascript" type="text/javascript">\n<!--\n\nfunction radioWert(rObj) {\n for (var i=0; i<rObj.length; i++) if (rObj[i].checked) return rObj[i].value;\n return false;\n}\n\nfunction insertcode( code ) {\n document.optionen.elements[radioWert(document.optionen.eingabe)].value = code;\n}\n\n//-->\n</script>\n\n<form name="optionen" action="chat">\n <input type="hidden" name="var" value="edit_options">\n <table>\n <tr>\n <td>\n <div>\n Dein Passwort\n <font color=ffa500>\n (Gut merken !!)\n </font>\n <br>\n <input type="password" name="id" value="$data[0]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n Geb hier das Passwort erneuert ein:\n <br>\n <input type="password" name="tmp" value="$data[0]">\n </div>\n </td>\n </tr>\n </table>\n <hr>\n <div>Einstellungen f\374r den Nachrichten-Verlauf</div>\n <table>\n <tr>\n <td>\n <br>\n <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div>\n <font color=ffffff>\n <select name="maxVerlauf" size="1">\n <option value="$data[3]">$data[3]\n]; + for ($i = 1; $i <= 50; ++$i) { + print qq[<option value="$i">$i]; + } + print qq[ </select>\n </font>\n </td>\n </tr>\n <tr>\n <td>\n <br>\n<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div>\n <font color=ffffff>\n <select name="verlaufOrder" size="1">\n <option value="$data[4]">Bisherige Einstellung ($data[4])\n <option value="0">Neue Verlaufnachrichten oben (0)\n <option value="1">Neue Verlaufnachrichten unten (1)\n </select>\n </font>\n </td>\n </tr>\n </table>\n<br>\n <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div>\n <hr>\n <table>\n <tr>\n <td>\n <div>\n <input type="radio" name="eingabe" value="col" checked>\n Auswahl von Farbe 1\n <br>\n (Farbe Deines Nicks):\n <br>\n <input name="col" size="6" maxlength="6" value="$data[1]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n <input type="radio" name="eingabe" value="secol">\n Auswahl von Farbe 2\n <br>\n (Farbe Deiner Nachrichten):\n <br>\n <input name="secol" size="6" maxlength="6" value="$data[2]">\n </div>\n </td>\n </tr>\n </table>\n<br>\n <div>\n Beliebige Auswahl markieren und Farbe w\344hlen. Um Deine Optionen abzuspeichern,\n auf "Daten \344ndern" klicken!\n </div>\n <br>\n]; + open COLORS, '<templates/colors.sno'; + @colors = <COLORS>; + close COLORS; + print @colors; + } + elsif ($method eq 'edit_profile_html') { + if ($message eq 'edit_profile_ok') { + print " <div class=b>\n Hinweis:\n </div>\n <div>\n Du hast soeben Dein Profil erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren:\n <hr>\n"; + } + else { + print $q->div('Hier kannst Du Dein Profil editieren!'), $q->hr; + } + print qq[ <form action="chat">\n <input type="hidden" name="var" value="edit_profile">\n <div>\n Dein Nachname:\n <br>\n <input name="nachname" value="$data[0]">\n </div>\n <br>\n <div>\n Dein Vorname:\n <br>\n <input name="vorname" value="$data[1]">\n </div>\n <br>\n <div>\n Dein Alter:\n <br>\n <input name="alter" value="$data[2]">\n </div>\n <br>\n <div>\n Dein Wohnort:\n <br>\n <input name="wohnort" value="$data[3]">\n </div>\n <br>\n <div>\n Deine E-Mail Adresse:\n <br>\n <input name="email" value="$data[4]">\n </div>\n <br>\n <div>\n Deine ICQ-Nummer:\n <br>\n <input name="icq" value="$data[5]">\n </div>\n <br>\n <div>\n Deine Homepage:\n <br>\n <input name="homepage" value="$data[6]">\n </div>\n <br>\n <div>\n Weiteres:\n <br>\n <textarea rows="5" cols="40"name="weiteres" wrap="virtual">$data[7]</textarea>\n </div>\n]; + } + print qq[ <hr>\n <font color=ffffff>\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="room" value="$room">\n <input type="submit" value="Daten \344ndern ...">\n </font>\n </form>\n</body>\n</html>\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/</</g; + print PROFILE $profile; + close PROFILE; + &edit_html('edit_profile_html', 'edit_profile_ok'); + } + elsif ($method eq 'edit_options') { + if ($id ne $tmp) { + &edit_html('edit_options_html', 'edit_pw_wrong'); + $client->shutdown(2); + exit 0; + } + open OPTIONS, ">data/user/options/$alias"; + my $options = "$id\n$col\n$secol\n$maxVerlauf\n$verlaufOrder"; + $options =~ s/</</g; + print OPTIONS $options; + close OPTIONS; + open IDENT, "<data/online/ident/$alias"; + my (@ident) = <IDENT>; + 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, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> <font color='$secol'>hat seine Chat-Einstellungen geändert</font> ...</font></i>", $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, "<data/online/rstat/$room"; + flock FILE, 2; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + open FILE, '<data/hierachie'; + flock FILE, 2; + my(@hierachie) = <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, '<data/hierachie'; + my(@hierachie) = <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, "<data/online/rstat/$room"; + my(@hierachie) = <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, "<data/online/rstat/$room.away"; + @away = <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 "<div>\n Von hier aus kannst du alle Untermen\374punkte des Systems erreichen:\n</div>\n<hr>\n"; + &menu(); + print "</body>\n</html>"; +} +sub logo_html { + print qq[ <layer top=-3 left=0><div style="position:absolute; top:5; left:10">\n <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"\n codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"\n WIDTH=48 HEIGHT=48>\n <PARAM NAME=movie VALUE="$gfxpath/ySymbol.swf">\n <PARAM NAME=loop VALUE=false>\n <PARAM NAME=menu VALUE=false>\n <PARAM NAME=quality VALUE=high>\n <PARAM NAME=scale VALUE=noborder>\n <PARAM NAME=wmode VALUE=opaque>\n <PARAM NAME=bgcolor VALUE=$bgcolor>\n <EMBED src="$gfxpath/ySymbol.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=48 HEIGHT=48 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </OBJECT>\n </div></layer>\n]; + print $q->end_html; +} +sub logs_html { + &start_html('Logdateien'); + &menu; + print "<div>\n Hier befinden sich alle Logdateien\n</div>\n<hr>\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 "<div>Hallo $alias. Du bist als "; + my $hierachie = &hierachie($alias); + if (9 <= $hierachie) { + print $q->b('Administrator'), ' (AD) eingetragen.</div><br>', $q->br; + } + elsif (7 <= $hierachie) { + print $q->b("Oberw\344chter"), ' (OW) eingetragen.</div><br>', $q->br; + } + elsif (5 <= $hierachie) { + print $q->b("W\344chter"), " (W\304) eingetragen.</div><br>", $q->br; + } + else { + print $q->b('normaler Chatter'), ' (NC) eingetragen.</div><br>', $q->br; + } + open FILE, 'data/hierachie'; + my(@hierachie) = <FILE>; + 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 '<div>', $q->b('AD'), "s ($nads St\374ck)"; + foreach $_ (@ads) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrow = $#ows + 1; + print '</div><br><br><div>', $q->b('OW'), "s ($nrow St\374ck)"; + foreach $_ (@ows) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrwa = $#was + 1; + print '</div><br>', $q->br, '<div>', $q->b("W\304"), "s ($nrwa St\374ck)"; + foreach $_ (@was) { + print $q->font({-'color', 'FFA500'}, ' ' . $_); + } + print qq[<hr>\n Die jeweiligen F\344higkeiten der Oberw\344chter (OW) und der W\344chter (W\304) sind unter\n "<a href="chat?request=htdocs&var=help_html">Chat-Befehle</a>"\n dokumentiert. Versteckte Superuser k\366nnen nur von anderen Superusern auf\ndieser Liste eingesehen werden!\n</div>\n</body>\n</html>\n]; +} +sub menu { + print "<div>\n <a href='chat?request=divcom&var=edit_profile_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Profil \344ndern</a>\n <a href='chat?request=divcom&var=edit_options_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Optionen</a>\n <a href='chat?request=divcom&var=list_alias_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Benutzer</a>\n <a href='chat?request=htdocs&var=help_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Befehle</a>\n <a href='chat?request=divcom&var=gb_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Board</a>\n <a href='chat?request=htdocs&var=superuser_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Superuser</a>\n <a href='chat?request=htdocs&var=logs_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Logs</a>\n <a href='chat?request=statistic&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Statistik</a>\n <a href='chat?request=htdocs&var=chatiquette_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Chatiquette</a>\n</div>\n<hr>\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, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat den Chat im Raum <b>$room</b> betreten ...</font></i>"); + } + print qq[<html>\n<head>\n<script language="JavaScript"><!--\n\n// Einstellungsvariablen\nmaxVerlauf = $maxVerlauf; // Anzahl der Eintr\344ge des Verlaufs\nmaxPreview = 20; // Zeichenl\344nge der Verlaufsvorschau\nverlaufOrder = $verlaufOrder; // Neue Nachrichten von: 0=oben, 1=unten\n//autoAwayTimeout = 5; // Sekunden, nach denen der User 'Away' gesetzt wird\n//autoQuitTimeout = 10; // Sekunden, nach denen der User den Chat verl\344sst\nautoAwayTimeout = 300; // Sekunden, nach denen der User 'Away' gesetzt wird\nautoQuitTimeout = 1200; // Sekunden, nach denen der User den Chat verl\344sst\n\n// Interne Variablen\nuserNotFocused = false; // Wenn User nicht schreibt\nuserAway = false; // Wenn User automatisch auf 'Away' gesetzt ist\nuserAwayTime = 0; // Sekunden, die User 'Away' ist\nfullVerlauf = new Array( maxVerlauf ); // Verlaufspuffer\n\nfunction delout()\n{\n addVerlauf (document.inf.msg.value); // Dem Verlauf eine Nachricht anh\344ngen\n document.inf.msg.focus(); // Fukus in das Eingabeform\n document.inf.msg.select(); // Text im Eigabeform markieren\n document.inf.submit(); // Formular absenden\n return false; // Abbrechen, damit das Frame nicht neu geladen wird\n}\n\nfunction CheckAuswahl()\n{\n id=document.verlaufform.verlauf.selectedIndex; // ID des ausgew\344hlten Feldes\n\n if (fullVerlauf[id-1] != null) // Nur, wenn das Feld nicht leer ist\n {\n document.inf.msg.value = fullVerlauf[id-1]; // Eintrag ins Textfeld\n }\n\n document.verlaufform.verlauf.selectedIndex = 0; // Ersten Eintrag (\334berschrift) ausw\344hlen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n\n return true;\n}\n\nfunction addVerlauf (msg)\n{\n if (msg == "") // Falls msg leer\n return false; // Aufruf ignorieren\n\n if (verlaufOrder) // neue Nachrichten von unten\n {\n for (i=0; i<(maxVerlauf-1); i++) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+1].text = document.verlaufform.verlauf.options[i+2].text;\n fullVerlauf[i] = fullVerlauf[i+1];\n }\n }\n else // neue Nachrichten von oben\n {\n for (i=(maxVerlauf-2); i>=0; i--) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+2].text = document.verlaufform.verlauf.options[i+1].text;\n fullVerlauf[i+1] = fullVerlauf[i];\n }\n }\n\n if (msg.length > maxPreview) // Vorschau zuschneiden\n pre = msg.slice(0, maxPreview-3) + "...";\n else\n pre = msg;\n\n if (verlaufOrder) // pos = Position des neuen Eintrags\n pos = maxVerlauf-1;\n else\n pos = 0\n\n document.verlaufform.verlauf.options[pos+1].text = pre; // Neue Vorschau anf\374gen\n fullVerlauf[pos] = msg; // Neuen Eintrag an den Verlauf anf\374gen\n\n// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag\n document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (\334berschrift)\n}\n\nfunction msgBlur()\n{\n userNotFocused = true;\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction msgFocus()\n{\n userNotFocused = false;\n if (userAway) // Wird ausgef\374hrt, falls User 'Away' war\n {\n ; // nop\n }\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction checkInterval()\n{\n// status = "userNotFocused=" + userNotFocused + "; userAway=" + userAway + "; userAwayTime=" + userAwayTime + ""; // Debug\n if (userNotFocused)\n {\n userAwayTime += 5; // Addiere 5, da nur alle 5Sek ausgef\374hrt\n if (!userAway)\n {\n if (autoAwayTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n if (document.inf.tmp.value != "away")\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2faway&tmp=autoaway","reload"); // 'Away' setzen\n userAway = true;\n }\n }\n else\n {\n if (autoQuitTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2fexit&tmp=autologout","reload"); // Chat beenden\n }\n }\n }\n\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden wieder aufrufen\n}\n\nfunction initFrame()\n{\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden aufrufen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n}\n//-->\n</script>\n]; + &style; + print qq[</head>\n<body class="blank" onload="initFrame();">\n <div align="left">\n <table border="0" cellpadding="0" cellspacing="0">\n <tr>\n <td>\n <form name="inf" target="reload" action="chat" onsubmit="return delout();">\n <input type="hidden" name="request" value="postmessage">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="room" value="$room">\n <input type="hidden" name="col" value="$col">\n <input type="hidden" name="secol" value="$secol">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="whisper" value="$whisper">\n <input type="hidden" name="tmp" value="$tmp">\n <input size="40" maxlength="300" name="msg" onBlur="msgBlur();" onFocus="msgFocus();">\n </form>\n </td>\n <td><form name="verlaufform">\n <script language="JavaScript"><!--\n document.write("<select size='1' name='verlauf' size='40' onChange='CheckAuswahl();'>");\n document.write("<option>- Nachrichten-Verlauf -</option>");\n for(i=0; i<maxVerlauf; i++) // Leere Verlaufsfelder generieren\n document.write("<option value>(leer)</option>");\n document.write("</select>");\n //-->\n </script>\n </form>\n </td>\n </tr>\n </table>\n </div>\n</body>\n</html>\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[<div>\n <font color='$col'>$alias</font>, sch\366n da\337 Du da bist :-), <a href='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder' style="text-decoration: underline; color: red">hier</a> kannst du die Seite aktualisieren.\n</div>\n<hr>\n<div>\n<a href="chat?request=stream&alias=$alias&room=$standardroom&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" style="text-decoration: underline; color: red">Hier</a>\nkannst du den Standardraum $standardroom betreten. <br><br>\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, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + + my $door = '[<font color=red>Abgesperrt!</font>]' 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 "<a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid' target='$_' style='color: $col'>$_</a> "; + } + } + 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, "<data/online/users/$alias"; + my $oldstamp = <DATEI>; + close DATEI; + if ($oldstamp > time - 100) { + open DATEI, "<data/user/counts/$alias.online"; + my $online = <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, '<data/online/prove'; + my $provetime = <DATEI>; + close DATEI; + + &check_online if $provetime < time - 40; + print <<END; + <html> + <head> + <meta http-equiv="refresh" content="20" URL="chat?request=online&room=$room&alias=$alias&tmpid=$tmpid"> + <style type="text/css">\n a { font-family: arial; font-size:11px; color: #ffffef; }\n a:hover { color: #ffffff; }\n </style>\n <style type="text/css" media="all">\n a { text-decoration: none; }\n a:hover { text-decoration:underline; } + </style> + </head> + <body bgcolor="$chatbg"> +END + + opendir ROOM, 'data/online/rooms/' . $room; + my(@room) = sort(readdir ROOM); + closedir ROOM; + + my $chatter = $#room - 1; + print "<font size='1' color='ffffff' face='arial'>$room ($chatter):</font><table>\n"; + + open FILE, "<data/online/rstat/$room"; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + + open FILE, '<data/hierachie'; + my(@userlevels) = (<FILE>, @rstat); + close FILE; + + open FILE, "<data/online/rstat/$room.away"; + my(@away) = <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 "<tr><td><a href=\"javascript:alert('$nick ist aus folgendem Grund abwesend:\n\n$awaymessage');\"><img border='0' title='$awaymessage' alt='$awaymessage' src='$gfxpath/away.gif'></a></td>"; + $inside = 2; + } + } + if ($inside == 0) { + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($nick eq $name) { + chomp $level; + $inside = 1; + if ($level == 1) { + print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>"; + last; + } + elsif ($level == 2) { + print "<tr><td><img title='Die Unschuld vom Land' alt='Die Unschuld vom Land' src='$gfxpath/uvl.gif'></td>"; + last; + } + elsif ($level == 3) { + print "<tr><td><img title='Temporärer Wächter' alt='Temporärer Wächter' src='$gfxpath/twa.gif'></td>"; + last; + } + elsif ($level == 5) { + print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>"; + last; + } + elsif ($level == 7) { + print "<tr><td><img title='oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>"; + last; + } + elsif ($level == 9) { + print "<tr><td><img title='Administrator' alt='Administrator' src='$gfxpath/adm.gif'></td>"; + last; + } + + if (5 <= $hierachie) { + if ($level == 6) { + print "<tr><td><img title='Wächter' alt='Unsichtbarer Wächter' src='$gfxpath/wa-i.gif'></td>"; + last; + } + elsif ($level == 8) { + print "<tr><td><img title='oberwächter' alt='Unsichtbarer Oberwächter' src='$gfxpath/ow-i.gif'></td>"; + last; + } + elsif ($level == 10) { + print "<tr><td><img title='Administrator' alt='Unsichtbarer Administrator' src='$gfxpath/adm-i.gif'></td>"; + last; + } + + } + print '<tr><td></td>'; + last; + } + } + } + if ($inside == 0) { + print '<tr><td></td>'; + } + print "<td><a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$nick&tmpid=$tmpid' target='$nick' style='color: $col'>$nick</a></td></tr>\n"; + } + } + print '</table></body></html>'; +} +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, "<font color=ffffff>Du befindest Dich nicht im Raum <font color=ffa500>$room</font> und kannst dort auch keine Nachrichten posten!</font>"); + &reload_html; + } + elsif (length $msg > 300) { + &post_prv($alias, "<font color=ffffff>Deine Nachricht enth\344lt zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>"); + &reload_html; + } + if ($tmp eq 'away') { + &rm_away($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat sich zur\374ck gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'notaway';]); + } + $msg =~ s/</</g; + if (substr($msg, 0, 1) ne '/') { + unless ($tmp eq 'autoaway') { + foreach $_ ($col, $secol) { + &prove_color($alias, $_); + } + } + open MSGFILE, ">>data/msgs/$room"; + if (not $msg =~ s[/me/][<i>$alias</i>]g || $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g) { + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color='$col'>$alias: <font color='$secol'>$msg<br></font></font></b><;$alias<;\n"; + } + else { + $msg =~ s[/me/][<i>$alias</i>]g; + $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color=$secol>$msg</font></font></b><br><;$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("<b><font color=$col>$alias: <font color=$secol>$msg</font></font></b>") 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<br><;$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<br><;$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 "<html><body bgcolor='$chatbg'></body></html>"; + $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($_ = <FILE2PRINT>); + close FILE2PRINT; +} +sub start_html { + print "<html><head><title>$title - $_[0]</title>$_[2]"; + &style; + print '</head>'; + if ($_[1] eq 'start') { + print '<body onload="document.login.alias.focus();">'; + } + elsif ($_[1] ne '') { + print "<body class=$_[1]>"; + } + else { + print '<body>'; + } +} +sub log { + my $msg2log = $_[0]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + my $js; + ($msg2log, $js) = split(/<script/, $msg2log, 3); + open LOG, ">>data/logs/$days.$months.$years"; + print LOG "<br><font color=ffffef><i>($hours:$mins:$secs)</i></font> $msg2log\n"; + close LOG; +} +sub timestring { + my($mins, $hours) = (localtime)[1, 2]; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + return "$hours:$mins"; +} +sub timearray { + my($secs, $mins, $hours, $days, $months, $years) = (localtime)[(0, 1, 2, 3, 4, 5)]; + $months += 1; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + $secs = '0' . $secs if $secs < 10; + $days = '0' . $days if $days < 10; + $months = '0' . $months if $months < 10; + $years = $years - 100; + if ($years < 10) { + $years = '200' . $years; + } + else { + $years = '20' . $years; + } + return $secs, $mins, $hours, $days, $months, $years; +} +sub error { + my $error_msg = $_[0]; + &start_html("Error: ($error_msg)"); + print $q->div("Error: ($error_msg)"), $q->end_html; + open ERROR, '>>data/error'; + print ERROR "Alias: $alias TempID: $tmpid File. $0 PID: $$ Time: " . time . " Message: $error_msg \n"; + close ERROR; + $client->shutdown(2) if $client; + exit 0; +} +sub check_online { + open PROVE, '>data/online/prove'; + print PROVE time; + close PROVE; + opendir DIR, 'data/online/rooms'; + my(@roomdir) = readdir DIR; + closedir DIR; + foreach my $theroom (@roomdir) { + opendir DIR, "data/online/rooms/$theroom"; + my(@roomusers) = readdir DIR; + closedir DIR; + my $empty = 1; + foreach $user (@roomusers) { + if (-f "data/online/rooms/$theroom/$user") { + $empty = 0; + open USER, "<data/online/rooms/$theroom/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + unlink "data/online/$theroom/$user"; + open USER, "<data/online/users/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + &post($theroom, '<i><font color=ffffff>' . ×tring . " <font color='".&get_ident($user,3)."'>$user</font> hat den Chat verlassen ... </font></i>"); + if ($user ne $alias) { + &rm_alias($user, $theroom); + } + else { + unlink "data/online/rooms/$theroom/$user"; + } + } + } + } + } + opendir PIDS, "data/online/pids/$theroom"; + my(@pids) = readdir PIDS; + closedir PIDS; + if ($empty == 1) { + rmdir "data/online/rooms/$theroom"; + unlink "data/online/rstat/$theroom"; + unlink "data/online/rstat/$theroom.away"; + unlink "data/msgs/$theroom"; + foreach $_ (@pids) { + unlink "data/online/pids/$theroom/$_" if -f "data/online/pids/$theroom/$_"; + } + rmdir "data/online/pids/$theroom"; + } + } +} +sub rm_if_loggedin { + my $alias = shift; + my $room = &get_room($alias); + while ($room ne undef) { + &rm_alias($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$user</font> hat den Chat verlassen ... </font></i>"); + $room = &get_room($alias); + } +} +sub secure_checkid { + my($alias2check, $tmpid) = @_; + &error("Falsche TempID! $tmpid") unless -f "data/online/tmpid/$alias.$tmpid"; +} +sub rm_alias { + my($alias, $room) = @_; + unlink "data/online/rooms/$room/$alias"; + unlink "data/online/users/$alias"; + opendir TMPID, 'data/online/tmpid'; + my(@tmpid) = readdir TMPID; + close TMPID; + foreach $_ (@tmpid) { + unlink "data/online/tmpid/$_" if /^$alias\..+$/; + } + unlink "data/online/ident/$alias"; + &rm_rstat($alias, $room); +} +sub rm_rstat { + my($alias, $room) = @_; + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + my(@rstat2) = ($rstat[0], $rstat[1]); + for ($i = 2; $i <= $#rstat; ++$i) { + chomp $rstat[$i]; + push @rstat2, $rstat[$i] . "\n" unless $rstat[$i] =~ /^$alias<;/; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT @rstat2; + close RSTAT; +} +sub rm_away { + my($alias, $room) = @_; + open AWAY, "<data/online/rstat/$room.away"; + my(@away) = <AWAY>; + close AWAY; + my @away2; + foreach $_ (@away) { + my(@split) = split(/<;/, $_, 0); + push @away2, $_ if $alias ne $split[0]; + } + open AWAY, ">data/online/rstat/$room.away"; + print AWAY @away2; + close AWAY; +} +sub rm_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + my @new; + foreach $_ (@entry) { + push @new, $_ if $entry . "\n" ne $_; + } + if (@entry != @new) { + open ENTRY, ">data/$file"; + print ENTRY @new; + close ENTRY; + return 1; + } + else { + return; + } +} +sub add_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + foreach $_ (@entry) { + chomp $_; + return if $entry eq $_; + } + open ENTRY, ">>data/$file"; + print ENTRY $entry . "\n"; + close ENTRY; + return 1; +} +sub prove_color { + my($alias, $color) = @_; + my $length = length $color; + if ($length > 6 or $length < 6) { + &post_prv($alias, "<font color=ffffff>Ung\374ltige Hexadezimalfarbe.</font>"); + &reload_html; + } +} +sub kill_alias { + my($alias2kill, $alias) = @_; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + 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 "($days.$months.$years $hours:$mins:$secs) $alias2kill wurde von $alias gekillt\n"; + close DEL; +} +sub random_color { + my(@digit) = ('F', 'C', 'A', 'B', (5, 6, 7, 8, 9)); + my $dig1 = rand @digit; + my $dig2 = rand @digit; + my $dig3 = rand @digit; + my $dig4 = rand @digit; + my $dig5 = rand @digit; + my $dig6 = rand @digit; + return $digit[$dig1] . $digit[$dig2] . $digit[$dig3] . $digit[$dig4] . $digit[$dig5] . $digit[$dig6]; +} +sub url_decode { + my $t = shift @_; + $t =~ s[/][]; + $t =~ tr/+/ /; + while ($t =~ s/%([a-f0-9][a-f0-9])/chr hex $1;/ie) { + (); + } + return $t; +} +sub url_encode { + my $t = shift @_; + while ($t =~ s/([^\w()'*~!.-])/sprintf '%%%02x', $1;/eg) { + (); + } + return $t; +} +sub calculate_hpm { + my($hits, $starttime) = @_; + return sprintf('%.2f', $hits / ((time - $starttime) / 60)); +} +sub calculate_uptime_hours { + my $starttime = shift @_; + return sprintf('%.2f', (time - $starttime) / 3600); +} +sub private_javascript { + my($alias, $room, $javascript) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . qq[<;!<;!<;<script language="JavaScript">$javascript</script><;\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) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + return '<b>Raumthema:</b>' . $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) = <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, '<data/count'; + $counter = <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[ <center>\n <table width=500>\n <tr>\n <td>\n <center>\n <table>\n <tr>\n <td>\n <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=240 HEIGHT=240>\n <param name=movie value="$gfxpath/yIntro.swf">\n <param name=loop value=false>\n <param name=menu value=false>\n <param name=quality value=high>\n <param name=scale value=noborder>\n <param name=wmode value=opaque>\n <param name=bgcolor value=$bgcolor>\n <embed src="$gfxpath/yIntro.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=240 HEIGHT=240 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </object>\n </td>\n <td>\n <div>\n yChat: Version $version\n <br><br>\n Letztes Update: $datum\n <br><br>\n Seitenaufrufe: $counter\n <br><br>\n Benutzer registriert: $users\n <br><br>\n Benutzer online: $logtin\n <br><br>\n Benutzerlimit: $limit\n <br><br>\n Page: <a href="http://www.yChat.org">www.yChat.org</a>\n <br><br><a href="http://www.webchat.de" target="_new"> <img src="http://www.webchat.de/webchat.gif" alt="[webchat]" title="[webchat]" border="0"></a><br>\n<img src="http://stats.topwebmaster.net/extern/de/snooper"></div></td>\n </tr>\n </table>\n </center>\n </div>\n <br>\n <br>\n]; + if ($tmp eq 'true') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Wahrscheinlich existiert Dein Alias "$alias" nicht,\n <br>\n Du hast Dich verschrieben oder das Passwort ist falsch.\n <br>\n Versuch es erneuert !\n </div>\n]; + } + elsif ($tmp eq 'quit') { + print qq[ <div>\n Du hast soeben den Chat verlassen.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autologout') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autokick') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat katapultiert. Grund: Du hast den Chat geflutet!\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'banned') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest aus dem Chat verbannt!!!\n <br>\n Z.z. kannst Du Dich leider nicht in den Chat einloggen.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'kick') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat katapultiert!\n <br>\n Schlechtes Verhalten mag die Ursache hierf\374r sein.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'selfkill') { + print qq[ <div>\n Du hast dich soeben ganz und gar aus dem System gel\366scht!\n <br>\n Wenn du dir einen neuen Nick angelen willst, dann einfach auf "Registrieren" klicken! :-)\n </div>\n]; + } + elsif ($tmp eq 'selfkill') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat ausgeloggt!\n <br>\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 <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'full') { + print "<div class=b>ACHTUNG!</div><div>Der Chat ist leider voll! Bitte versuch Dich sp\344ter noch mal einzuloggen!</div>"; + } + elsif ($var eq 'create_alias') { + print q[<div>Du hast sich soeben in die Datenbank eingetragen. Einfach auf "Los Geht's" klicken :-)</div>]; + } + else { + print qq[ <div>\n Herzlich willkommen!\n <br>\n Einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + print qq[ <hr>\n <form name="login" action="chat" method="GET">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="tmp" value="true">\n <table>\n <tr>\n <td>\n <div>\n Dein Alias:\n <br>\n <input name="alias" value="$alias">\n </div>\n </td>\n <td>\n <div>\n Dein Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n </td>\n </tr>\n </table>\n <br>\n <br>\n <div>\n Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken!\n </div>\n <br>\n <table>\n <tr>\n <td>\n <font color="ffffff">\n <input type="submit" value="Los geht's!">\n </font>\n </form>\n </td>\n <td>\n <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias_html">\n <font color="ffffff">\n <input type="submit" value="Registrieren">\n </font>\n </form>\n </td>\n </tr>\n </table>\n <hr>\n]; + if ($logtin > 0) { + print q[<div>Folgende Personen sind eingeloggt:<br><font size='1'>]; + foreach $_ (@users) { + print "$_ " if -f "data/online/users/$_"; + } + print '</font></div>'; + } + print " </td>\n </tr>\n </table>\n </center>\n</body>\n</html>\n"; + unless (-d 'data/online/rooms') { + mkdir 'data/online/rooms', 511; + } +} +sub create_alias_html { + open BAN, '<data/ban'; + my(@ban) = <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 " <center>\n <table width=500>\n <tr>\n <td>\n"; + if ($reload eq 'alias_exists') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Der von Dir gew\344hlte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit\n einem anderen Benutzernamen !\n </div>\n <hr>\n]; + } + elsif ($reload eq 'pw_wrong') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Deine beiden Passworteingaben stimmen nicht \374berein. Bitte geb das Passwort erneuert an um sicherzugehen, da\337\n kein falsches Passwort abgespeichert wird !\n </div>\n <hr>\n"; + } + elsif ($reload eq 'alias_prohibited') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt illegale Zeichen. Bitte versuch einen anderen Benutzernamen!\n </div>\n <hr>\n]; + } + elsif ($reload eq 'alias_length') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!\n </div>\n <hr>\n]; + } + else { + print " <div>\n Hier kannst Du Dich registrieren. Bitte beachte, da\337 die Passworteingabefelder \374bereinstimmen!\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias">\n <div>\n Dein Alias:\n <font color="ffa500">\n (Mu\337 angegeben werden)\n </font>\n <br>\n <input name="alias" VALUE="$alias">\n </div>\n <br>\n <div>\n Dein gew\374nschtes Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n <br>\n <div>\n Geb hier Dein Passwort erneuert ein:\n <br>\n <input type="password" name="tmp">\n </div>\n <br>\n <font color=ffffff>\n <input type="submit" value="Registrieren">\n </font>\n <br>\n </form>\n <hr>\n <div>\n Um den Chat zu betreten m\374ssen die Daten nach der Registration auf der Startseite erneuert best\344tigt werden !\n </div>\n </td>\n </tr>\n </table>\n</center>\n</body>\n</html>\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, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + foreach $_ (@options) { + chomp $_; + } + if ($options[0] eq $pw) { + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq $alias or $_ eq 'ip://' . $client->peerhost) { + if (-f "data/online/users/$admin") { + &post_prv($admin, "<font color=ffffff><font color=ffa500>$_</font> kann sich nicht einloggen (Ist verbannt)!!</font>"); + } + $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[<html>\n <head>\n <title>\n $title\n </title>\n </head>\n<frameset border=0 frameborder=0 framespacing=0 cols="130,*">\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name="online" src="chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid">\n <frameset border=0 frameborder=0 framespacing=0 cols="70,*">\n <frame name="logo" src="chat?request=htdocs&var=logo_html" scrolling="no">\n <frame name="reload" src="chat?request=htdocs" scrolling="no">\n </frameset>\n </frameset>\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name='main' src='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder'>\n <frame name="input" src="chat?request=htdocs" scrolling="no">\n </frameset>\n</frameset>\n</html>\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 '<div>'; + 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, "<data/user/counts/$_.online"; + my $total = <TOTAL>; + close TOTAL; + $online{sprintf '%.2f', $total / 3600} = $_; + } + } + } + print '<div>', $q->b('Rankings:'), $q->br, '<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>'; + 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[<tr><td><font color='ffffff' size='1' face='arial'>] . $nr . q[</font></td><td><font color='ffffff' size='1' face='arial'> ] . $wert . "h </font></td><td> <a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n"; + } + print '</table>', $q->hr; + $nr_start -= 20; + $nr_end -= 20; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" if $nr_start > 0; + $nr_start += 40; + $nr_end += 40; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...", $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>"); + } + elsif ($var eq 'del') { + print '<div>', $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, "<data/user/lastlogin/$_"; + my $login = <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 '</div>', $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 '<div>', $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 '</div>'; + } + 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[<font size='1'>]; + 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 '</font>', $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[<html>\n <head>\n<script language="JavaScript">\n<!--\n open('chat?request=online&room=$room&alias=$alias&tmpid=$tmpid','online');\n open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// Scroll-Routine von Anklepper (http://www.anklepper.de)\n// speziell f\374r yChat (http://www.yChat.de), Copyright 2000\nscrolling = true;\nmoves_steps = 4;\nmoves_interval = 4;\nfunction moves()\n{\n if( scrolling != false )\n window.scrollBy( 0, moves_steps );\n window.setTimeout( "moves()", moves_interval );\n}\nmoves();\n//-->\n</script>\n</head>\n<body bgcolor="$chatbg">\n]; + &check_online; + print "<font size=1 color=ffffff face=arial>$title - Letzte Änderung $datum\n; Der Chat wird geladen...\n<br>"; + sleep 1; + print "<b>Hallo <font color=$col>$alias</font></b>, mit dem Befehl /menu kannst du das Chat-Menü aufrufen!<br>"; + sleep 1; + print "Du befindest dich im Raum <b>$room</b>: " . get_theme($room) . "<br>\n"; + print "</font>\n"; + + if (-f "data/user/memos/$alias") { + open MEMOS, "<data/user/memos/$alias"; + my(@memos) = <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/msgs/$room"; + mkdir 'data/online/pids', 511 unless -d 'data/online/pids'; + mkdir "data/online/pids/$room", 511 unless -d "data/online/pids/$room"; + open PID, ">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($_ = <MSGFILE>); $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 "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias ignoriert!</font>"); + } + else { + @ignore = @temp; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun nicht mehr ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias nicht mehr ignoriert!</font>"); + } + } + elsif ($command eq 'igl') { + my $ignored; + foreach $_ (@ignore) { + $ignored .= "$_ "; + } + if ($#ignore == -1) { + print "<font color='#ffffff'>Momentan wird keine Person von dir ignoriert!</font><br>\n"; + } + else { + print "<font color='#ffffff'>Folgende Personen werden von dir ignoriert: <font color='#ffa500'>$ignored</font>!</font><br>\n"; + } + } + elsif ($command eq 'quit') { + print "<script language='JavaScript'>\n"; + print "open('chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid','online');\n"; + print "open('chat?request=htdocs','input');\n"; + print "open('chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');\n"; + print "</script>\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, "<font color='#ff0000'>Du wirst von $alias ignoriert!</font>") 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 "<i><font color=red>$from flutet den Chat !</font></i><br>\n"; + if ($from eq $alias and $flooding++ and $flooding >= 4) { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='ffa500'><b>Das System</b></font> katapultiert <font color='".&get_ident($alias,3)."'>$alias</font>> wegen Fluten des Chats nach draussen ... </font></i>", $alias); + print "<script language='JavaScript'>open('chat?request=start&tmp=autokick','_top');</script>\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 = <FILE>; + close FILE; + chomp $timestamp; + + $output = $output . "($user)($timestamp)($room)\n"; + } + } + + print $output; +} +1; |
