From 630af0ed6c0af69c7df2e45aef7a87722a3c00c0 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 6 Apr 2013 13:14:47 +0200 Subject: tagging ychat-perl-legacy --- 0.7.2/config.pm | 42 +++ 0.7.2/modules/changeroom.pm | 69 ++++ 0.7.2/modules/commands.pm | 784 +++++++++++++++++++++++++++++++++++++++++++ 0.7.2/modules/divcom.pm | 260 ++++++++++++++ 0.7.2/modules/hierachie.pm | 74 ++++ 0.7.2/modules/htdocs.pm | 127 +++++++ 0.7.2/modules/input.pm | 14 + 0.7.2/modules/loggedin.pm | 37 ++ 0.7.2/modules/online.pm | 104 ++++++ 0.7.2/modules/postmessage.pm | 90 +++++ 0.7.2/modules/shared.pm | 307 +++++++++++++++++ 0.7.2/modules/start.pm | 254 ++++++++++++++ 0.7.2/modules/statistic.pm | 148 ++++++++ 0.7.2/modules/stream.pm | 170 ++++++++++ 0.7.2/setup.sh | 18 + 0.7.2/templates/chatiq.sno | 1 + 0.7.2/templates/colors.sno | 290 ++++++++++++++++ 0.7.2/templates/help.sno | 75 +++++ 0.7.2/ychatd.pl | 59 ++++ 19 files changed, 2923 insertions(+) create mode 100644 0.7.2/config.pm create mode 100644 0.7.2/modules/changeroom.pm create mode 100644 0.7.2/modules/commands.pm create mode 100644 0.7.2/modules/divcom.pm create mode 100644 0.7.2/modules/hierachie.pm create mode 100644 0.7.2/modules/htdocs.pm create mode 100644 0.7.2/modules/input.pm create mode 100644 0.7.2/modules/loggedin.pm create mode 100644 0.7.2/modules/online.pm create mode 100644 0.7.2/modules/postmessage.pm create mode 100644 0.7.2/modules/shared.pm create mode 100644 0.7.2/modules/start.pm create mode 100644 0.7.2/modules/statistic.pm create mode 100644 0.7.2/modules/stream.pm create mode 100644 0.7.2/setup.sh create mode 100644 0.7.2/templates/chatiq.sno create mode 100644 0.7.2/templates/colors.sno create mode 100644 0.7.2/templates/help.sno create mode 100644 0.7.2/ychatd.pl (limited to '0.7.2') diff --git a/0.7.2/config.pm b/0.7.2/config.pm new file mode 100644 index 0000000..e606f01 --- /dev/null +++ b/0.7.2/config.pm @@ -0,0 +1,42 @@ +# yChat - Copyright by Paul C. Bütow +########################### Dieser Teil bestimmt die Standart-Variabeln. +##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.) +########################### +$limit = 50; # Benutzerlimit +$datum = "27.12.01"; # Datum der letzten Änderung (ändern erwünscht) +$version = "0.7.0.2"; # Bitte Hauptversionsnummer nicht ändern +$title = "yChat [$version]"; # Erscheint in der Browser-Leiste oben +$standardroom = "Cyberbar"; # Standardchatraum +$loginplace = "Lounge"; # Bezeichnung der Startseite nach dem Login +$localhost = "212.202.190.233"; # Host oder IP# des Chat-Servers +$localport = 2000; # Port über den fer Chat-Server läuft +$gfxpath = "http://$localhost/yChat"; # URL der Binärdaten (Grafiken etc.) +$bgcolor = "#3E535B"; # Hintergrundfarbe der HTML-Seiten +$chatbg = "#000000"; # Hintergrundfarbe des Chat-Frames + +# PS: Um einen Chat-Administrator anzulegen, dann die Datei data/hierachie +# anlegen, in eine Zeile muß folgendes eingetragen werden: "Nickname<;7" +# (Natürlich ohne Anführungsstriche) Nickname ist somit Chat-Administrator +# und kann Oberwächter und Wächter bestimmen! + +sub style { +print < + body { background-color: $bgcolor } + body.blank { background-color: $chatbg } + body.online { background-color: $chatbg } + div { font-family: arial, geneva, verdana, helvetiva; font-size: 12px; color: #ffffff } + div.b { font-weight: bold; color: #ffa500 } + a { color: #ffffef; } + a:hover { color: #ffffff; } + p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; } + + +ENDCSS +} +1; diff --git a/0.7.2/modules/changeroom.pm b/0.7.2/modules/changeroom.pm new file mode 100644 index 0000000..35daa00 --- /dev/null +++ b/0.7.2/modules/changeroom.pm @@ -0,0 +1,69 @@ +sub change_room { + my($method, $newroom, $oldroom, $alias2) = @_; + if ($newroom eq $oldroom) { + &post_prv($alias, "Du befindest dich bereits im Raum $newroom!"); + &reload_html; + } + elsif ($newroom eq $loginplace) { + &post($room, q[] . ×tring . " $alias verlässt den Chat und geht in die $loginplace ... ", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &check_online; + &reload_html; + } + open RSTAT, "; + close RSTAT; + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + &post_prv($alias, "Der Raum $newroom ist leider abgesperrt!"); + &reload_html; + } + } + &private_javascript($alias, $room, "parent.input.document.inf.room.value = '$newroom';open('chat?request=online&room=$newroom&alias=$alias&tmpid=$tmpid','online');"); + open MSGFILE, ">>data/msgs/$newroom"; + print MSGFILE "$alias<;" . time . "<;!<;!<;<;\n"; + close MSGFILE; + open MSGFILE, ">>data/msgs/$room"; + if ($method eq 'j') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;] . ×tring . " Du wechselst aus dem Raum $oldroom herein nach $newroom ...
<;\n"; + } + elsif ($method eq 'ju') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;] . ×tring . " Du folgst $alias2 aus dem Raum $oldroom herein nach $newroom ...
<;\n"; + } + elsif ($method eq 'sep') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;] . ×tring . " Du wechselst aus dem Raum $oldroom herein nach $newroom und sperrst ab...
<;\n"; + } + elsif ($method eq 'beam') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;] . ×tring . " Du wurdest von $alias2 in den Raum $newroom gebeamt...
<;\n"; + } + close MSGFILE; + &post_strmsg($alias, $room, 'cr', $newroom); + $room = $oldroom; + my $tmpstamp = time; + if ($method eq 'j') { + &post($room, q[] . ×tring . " $alias wechselt in den Raum $newroom ...", $alias); + $room = $newroom; + &post($room, q[] . ×tring . " $alias kommt aus dem Raum $oldroom herein nach $newroom ...", $alias); + } + elsif ($method eq 'ju') { + &post($room, q[] . ×tring . " $alias folgt $alias2 in den Raum $newroom ...", $alias); + $room = $newroom; + &post($room, q[] . ×tring . " $alias kommt aus dem Raum $oldroom und folgt $alias2 herein nach $newroom ...", $alias); + } + elsif ($method eq 'sep') { + &post($room, q[] . ×tring . " $alias wechselt in den Raum $newroom und sperrt ab...", $alias); + $room = $newroom; + &post($room, q[] . ×tring . " $alias kommt aus dem Raum $oldroom herein nach $newroom und sperrt ab...", $alias); + } + elsif ($method eq 'beam') { + &post($room, q[] . ×tring . " $alias2 beamt $alias in den Raum $newroom...", $alias2); + $room = $newroom; + &post($room, q[] . ×tring . " $alias2 beamt $alias aus dem Raum $oldroom herein nach $room...", $alias2); + } + unlink "data/online/rooms/$oldroom/$alias"; + &rm_rstat($alias, $oldroom); + &check_online; +} +1; diff --git a/0.7.2/modules/commands.pm b/0.7.2/modules/commands.pm new file mode 100644 index 0000000..c191f6e --- /dev/null +++ b/0.7.2/modules/commands.pm @@ -0,0 +1,784 @@ +sub command { + $_[0] = $_[0] . ' '; + $_[0] = substr($_[0], 1, length($_[0]) - 1); + my(@cmd) = split(/ /, $_[0], 0); + my $cmd = substr($_[0], 0, index($_[0], ' ')); + my $tmp = $_[1]; + sub lock { + my $method = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = ; + close RSTAT; + my $lock = "0\n"; + if ($room eq $standardroom) { + &post($room, '' . ×tring . " $alias sperrt den Raum ohne Erfolg ab ...", $alias); + } + else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '' . ×tring . " $alias sperrt den Raum ab ...", $alias) if $method ne 'separee'; + } + else { + &post($room, '' . ×tring . " $alias sperrt den Raum auf ...", $alias) if $method ne 'separee'; + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $lock; + close RSTAT; + } + &reload_html; + } + if ($cmd eq 'about') { + &post_prv($alias, "Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. B\374tow (2000 - 2001)."); + &reload_html; + } + elsif ($cmd eq 'away') { + for ($i = 1; $i <= $#cmd; ++$i) { + $away_msg = $away_msg . ' ' . $cmd[$i]; + } + my $room = &get_room($alias); + if ($tmp eq 'autoaway') { + $away_msg = "$alias wurde vom System agbemeldet ..."; + &post($room, '' . ×tring . " Das System meldet $alias wegen Inaktivität ab ...", $alias); + } + else { + &post($room, '' . ×tring . " $alias meldet sich ab ($away_msg ) ...", $alias); + } + open AWAY, ">>data/online/rstat/$room.away"; + print AWAY "$alias<;$away_msg\n"; + close AWAY; + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'away'; parent.online.location.reload();]); + &reload_html; + } + elsif ($cmd eq 'clear') { + &post_prv($alias, ""); + &reload_html; + } + elsif ($cmd eq 'col') { + my $col, $secol; + if ($cmd[1] ne undef) { + $col = $cmd[1]; + &prove_color($alias, $col); + my $tmpsecol = $cmd[2]; + my $length = length $tmpsecol; + if ($tmpsecol eq '' or $length < 6 or $length > 6) { + $secol = $col; + } + else { + $secol = $tmpsecol; + } + } + else { + $col = &random_color; + $secol = &random_color; + } + open OPTIONS, "; + close OPTIONS; + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $options[0] . $col . "\n" . $secol; + close OPTIONS; + &post($room, '' . ×tring . " $alias hat die Farbe gewechselt...", $alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &reload_html; + } + elsif ($cmd eq 'date') { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + &post_prv($alias, "Heute ist der $days.$months. Jahr $years. Es ist genau $hours:$mins Uhr und $secs Sekunden."); + &reload_html; + } + elsif ($cmd eq 'exit') { + my $room = &get_room($alias); + if ($tmp eq 'autologout') { + &private_javascript($alias, $room, q[open('chat?request=start&tmp=autologout','_top');]); + &post($room, '' . ×tring . " Das System loggt $alias wegen Inaktivität aus ... ", $alias); + } + else { + &post($room, '' . ×tring . " $alias loggt sich ganz aus ... ", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=quit','_top');]); + } + &rm_alias($alias, $room); + &rm_away($alias, $room); + &reload_html; + } + elsif ($cmd eq 'hits' or $cmd eq 'uptime') { + &post_prv($alias, "Uptime: $startime " . &calculate_uptime_hours($STARTIME) . "h; $HITS Hits; " . &calculate_hpm($HITS, $STARTIME) . ' Hits pro Minute'); + &reload_html; + } + elsif ($cmd eq 'ig') { + my $alias2ignore = $cmd[1]; + if ($alias2ignore) { + if (-f "data/user/options/$alias2ignore") { + &post_strmsg($alias, $room, 'ig', $alias2ignore); + } + else { + &post_prv($alias, "$alias2ignore existiert nicht in der Datenbank!"); + } + } + else { + &post_strmsg($alias, $room, 'igl'); + } + &reload_html; + } + elsif ($cmd eq 'j' or $cmd eq 'sep') { + if ($cmd[1] =~ /\W/ or $cmd[1] eq '') { + &post_prv($alias, "Der Raum $cmd[1] enth\344lt illegale Zeichen!"); + &reload_html; + } + else { + if ($cmd eq 'j') { + &change_room('j', $cmd[1], $room); + &reload_html; + } + else { + if ($cmd[1] eq $standardroom) { + &post_prv($alias, "Der Raum $cmd[1] ist ein Standardraum und kann nicht als Separee eröffnet werden!"); + } + else { + &change_room('sep', $cmd[1], $room); + &lock('separee'); + } + &reload_html; + } + } + } + elsif ($cmd eq 'me' or $cmd eq 'm') { + my $me_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $me_msg = $me_msg . ' ' . $cmd[$i]; + } + $me_msg =~ s[/me/][$alias]g; + $me_msg =~ s[/m/][$alias]g; + if ($cmd eq 'm') { + &post($room, "$alias $me_msg", $alias); + } + else { + &post($room, "$alias $me_msg", $alias); + } + &reload_html; + } + elsif ($cmd eq 'memo') { + my $alias2memo = $cmd[1]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if (-f "data/user/options/$alias2memo") { + my $memo_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $memo_msg = $memo_msg . ' ' . $cmd[$i]; + } + &post_prv($alias, "$alias2memo wurde folgende memo erfolgreich hinterlassen: $memo_msg"); + open MEMO, ">>data/user/memos/$alias2memo"; + print MEMO "($days.$months.$years - $hours:$mins:$secs) $alias hat Dir eine Memo hinterlassen: $memo_msg
\n"; + close MEMO; + &reload_html; + } + &post_prv($alias, "$alias2memo existiert in der Datenbank nicht !"); + &reload_html; + } + elsif ($cmd eq 'menu') { + &private_javascript($alias, $room, "window.open('chat?request=htdocs&alias=$alias&var=menu_html&room=$standardroom&col=$col&secol=$secol&tmpid=$tmpid','_new','width=500,height=500,screenX=100,screenY=100,scrollbars');"); + &reload_html; + } + elsif ($cmd eq 'online') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + open ONLINE, "; + close ONLINE; + my $totaltime = sprintf('%.2f', $online / 3600); + &post_prv("$alias", "$alias2prove war insgesamt schon $totaltime Stunden online!"); + } + else { + &post_prv("$alias", "$alias2prove existiert nicht in der Benutzerdatenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'q') { + &post($room, '' . ×tring . " $alias verlässt den Chat ... ", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &rm_away($alias, $room); + &check_online; + &reload_html; + } + elsif ($cmd eq 'rmgb') { + &post($room, '' . ×tring . " $alias l\366scht das eigene G\344stebuch ...", $alias); + unlink "data/user/gbooks/$alias"; + &reload_html; + } + elsif ($cmd eq 's') { + my $msg2scream; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2scream = $msg2scream . ' ' . $cmd[$i]; + } + $msg2scream =~ s/\344/\304/g; + $msg2scream =~ s/\366/\326/g; + $msg2scream =~ s/\374/\334/g; + $msg2scream = "\U$msg2scream\E"; + &post($room, "$alias schreit: $msg2scream", $alias); + &reload_html; + } + elsif ($cmd eq 'seen') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + if (-f "data/user/lastlogin/$alias2prove") { + open LASTLOGIN, "; + close LASTLOGIN; + my $timestamp = sprintf('%.2f', (time - $lastlogin) / 3600); + &post_prv("$alias", "$alias2prove hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!"); + } + else { + &post_prv("$alias", "$alias2prove hat sich seit der Einf\374hrung dieses Befehls noch nie eingeloggt!"); + } + } + else { + &post_prv("$alias", "$alias2prove exsistiert nicht in der Benutzerdatenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'selfkill') { + &post($room, q[] . ×tring . " $alias entfernt sich ganz und gar aus dem System und loggt sich aus ... ", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=selfkill','_top');]); + &kill_alias($alias); + &reload_html; + } + elsif ($cmd eq 'w') { + my $theme = &get_theme($room); + my $door = '[Abgesperrt!]' if $rstat[0] eq "1\n"; + my($is, $nr) = ('t', 0); + my $persons; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-f "data/online/rooms/$room/$_") { + $persons = $persons . ' ' . $_; + ++$nr; + } + } + &post_prv($alias, "Der aktuelle Raum: $room $theme $door ($nr): $persons"); + &reload_html; + } + elsif ($cmd eq 'wc' or $cmd eq 'wc/') { + my $raum = $cmd[1]; + my $persons; + if ($raum eq '' and $cmd eq 'wc') { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + close USERS; + foreach $_ (@users) { + $persons = $persons . ' ' . $_ if -f "data/online/users/$_"; + } + my $nr = $#users - 1; + my($nrs, $is) = ('', 'ist'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'sind'; + } + &post_prv("$alias", "$nr Person$nrs $is insgesamt eingeloggt: $persons"); + } + elsif ($raum eq '' and $cmd eq 'wc/') { + my $msg2post; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + opendir DIR, "data/online/rooms/$_"; + my(@dir2) = readdir DIR; + closedir DIR; + open RSTAT, "; + close RSTAT; + chomp $rstat[1]; + my $door = '[Abgesperrt!]' if $rstat[0] eq "1\n"; + my $nr = $#dir2 - 1; + $msg2post = $msg2post . "$_ $door ($nr) [" . $rstat[1] . q(]: ); + foreach $chatter (@dir2) { + $msg2post = $msg2post . "$chatter " if -f "data/online/rooms/$_/$chatter"; + } + print ''; + } + } + &post_prv($alias, "Folgende Räume sind offen:$msg2post
"); + } + elsif ($raum ne '') { + my $persons; + opendir DIR, "data/online/rooms/$raum"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + $persons = $persons . ' ' . $_ if -f "data/online/rooms/$raum/$_"; + } + my($nr, $is) = ($#dir - 1, 't'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'n'; + } + &post_prv($alias, " $nr Person$nrs befinde$is sich im Raum $raum $persons"); + } + &reload_html; + } + elsif ($cmd eq 'wj' or $cmd eq 'ju') { + my $alias2search = $cmd[1]; + my $roomofalias = &get_room($alias2search); + if ($roomofalias) { + if ($cmd eq 'wj') { + &post_prv($alias, "$alias2search befindet sich im Raum $roomofalias !"); + } + else { + &change_room('ju', $roomofalias, $room, $alias2search); + } + } + else { + &post_prv($alias, "$alias2search ist nicht eingeloggt!"); + } + &reload_html; + } + elsif (1 <= &hierachie($alias, $room)) { + if ($cmd eq 'l') { + &lock; + } + elsif ($cmd eq 'su') { + my $alias2su = $cmd[1]; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2su) { + open DATEI, "; + close DATEI; + if (1 <= hierachie($alias2su, $room)) { + &post_prv($alias, "$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, W\304 oder OW)"); + &reload_html; + } + open RSTAT, ">>data/online/rstat/$room"; + print RSTAT "$alias2su<;1\n"; + close RSTAT; + &post($room, q[] . ×tring . " $alias verleiht $alias2su Raumbesetzerrechte ...", $alias); + &reload_html; + } + } + &post_prv($alias, "$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)"); + &reload_html; + } + elsif ($cmd eq 'rsu') { + my $alias2rsu = $cmd[1]; + if (1 == hierachie($alias2rsu, $room)) { + &rm_rstat($alias2rsu, $room); + &post($room, '' . ×tring . " $alias entzieht $alias2rsu die Raumbesetzerrechte ...", $alias); + } + else { + &post_prv($alias, "$alias2rsu ist gar kein Raumbesetzer!"); + } + &reload_html; + } + elsif ($cmd eq 't') { + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = ; + close RSTAT; + my $theme; + if ($cmd[1] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, q[] . ×tring . qq[ $alias gibt dem Raum das Thema "$theme" ...], $alias); + } + else { + &post($room, '' . ×tring . " $alias l\366scht das Thema des Raums ...", $alias); + } + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i] . "\n"; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $theme; + close RSTAT; + &reload_html; + } + elsif (3 <= &hierachie($alias)) { + if ($cmd eq 'ban' or $cmd eq 'banip') { + my $alias2ban = $cmd[1]; + my $hierachie = &hierachie($alias2ban); + open BAN, '; + close BAN; + if ($cmd[1] eq undef) { + my $nr = @ban; + my $banned; + foreach $_ (@ban) { + chomp $_; + $banned .= " $_"; + } + &post_prv($alias, "Folgende Benutzer sind verbannt [$nr]: $banned"); + &reload_html; + } + elsif (-f "data/user/options/$alias2ban") { + if (3 <= $hierachie eq 'wa') { + &post_prv($alias, "$alias2ban kann nicht verbannt werden!"); + &reload_html; + } + if ($cmd eq 'ban') { + if (&add_entry($alias2ban, 'ban') == 1) { + &post($room, '' . ×tring . " $alias verbannt $alias2ban aus dem Chat ...", $alias); + } + else { + &post_prv($alias, "$alias2ban ist bereits verbannt!"); + } + } + elsif ($cmd eq 'banip') { + open DATEI, "; + close DATEI; + chomp $ipnr; + if (add_entry("ip://$ipnr", 'ban') == 1) { + &post_prv($alias, "IP-Nummer von $alias2ban ($ipnr) wurde verbannt!"); + } + else { + &post_prv($alias, "Die IP-Nummer $ipnr von $alias2ban ist bereits verbannt!"); + } + &reload_html; + } + &reload_html; + } + &post_prv($alias, "$alias2ban kann nicht verbannt werden, da Benutzername nicht existiert!"); + &reload_html; + } + elsif ($cmd eq 'rban' or $cmd eq 'rbanip') { + my $alias2rban = $cmd[1]; + open BAN, '; + close BAN; + foreach $ban (@ban) { + if (&rm_entry($alias2rban, 'ban') == 1) { + if ($alias2rban =~ /ip:/) { + &post_prv($alias, "Die IP-Nummer $alias2rban wurde aus der Banliste ausgetragen!"); + } + else { + &post($room, '' . ×tring . " $alias entbannt $alias2rban ...", $alias); + } + &reload_html; + } + } + &post_prv($alias, "$alias2rban ist nicht verbannt!"); + &reload_html; + } + elsif ($cmd eq 'img') { + my $hierachie = &hierachie($alias); + &hierachie_rm($alias); + if ($hierachie % 2 > 0) { + &post_prv($alias, q[Dein Superuserlogo wurde versteckt!]); + &hierachie_add($alias, $hierachie + 1); + } + else { + &post_prv("$alias", q[Dein Superuserlogo wurde wieder sichtbar gemacht!]); + &hierachie_add($alias, $hierachie - 1); + } + &reload_html; + } + elsif ($cmd eq 'ip') { + my $alias2prove = $cmd[1]; + opendir DIR, 'data/online/ident'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2prove) { + open DATEI, "; + close DATEI; + chomp $ipnr; + &post_prv($alias, "$_ hat die IP-Nummer $ipnr !"); + } + } + &reload_html; + } + elsif ($cmd eq 'k' or $cmd eq 'o') { + my $alias2kick = $cmd[1]; + if (-f "data/online/users/$alias2kick") { + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $raum (@dir) { + opendir DIR, "data/online/rooms/$raum"; + my(@dir2) = readdir DIR; + closedir DIR; + foreach my $chatter (@dir2) { + if ($chatter eq $alias2kick) { + my $hierachie2 = &hierachie($alias2kick); + if (&hierachie($alias) <= &hierachie($alias2kick)) { + &post_prv($alias, "$alias2kick besitzt einen höheren oder gleichen Rang und kann nicht gekickt/ausgeloggt werden!"); + } + else { + if ($cmd eq 'k') { + &post_prv($alias2kick, ''); + } + else { + &post_prv($alias2kick, ''); + } + $_ = undef if $room eq $raum; + if ($cmd eq 'k') { + &post($room, '' . ×tring . " $alias katapultiert $alias2kick aus dem Chat ...", $alias, $raum); + } + else { + &post($room, '' . ×tring . " $alias loggt $alias2kick aus dem Chat aus ...", $alias, $alias); + } + &rm_alias($alias2kick, $raum); + &check_online; + } + &reload_html; + } + } + } + } + &post_prv($alias, "$alias2kick ist nicht anwesend und kann nicht aus dem System katapultiert werden werden!"); + &reload_html; + } + elsif ($cmd eq 'sl') { + my $sl_room = $cmd[1]; + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + open RSTAT, "; + close RSTAT; + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '' . ×tring . " $alias sperrt den Raum $sl_room von aussen ab ...", $alias, $sl_room); + } + else { + &post($room, '' . ×tring . " $alias sperrt den Raum $sl_room von aussen auf ...", $alias, $sl_room); + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$sl_room"; + print RSTAT $lock; + close RSTAT; + } + else { + &post_prv($alias, "Der Raum $sl_room existiert nicht!"); + } + &reload_html; + } + elsif ($cmd eq 'ss') { + my $ss_room = $cmd[1]; + if (-e "data/online/rooms/$ss_room") { + my $ss_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $ss_msg = $ss_msg . ' ' . $cmd[$i]; + } + my $msg2scream = "\U$ss_msg\E"; + &post($room, q[] . ×tring . " $alias ruft in den Raum $ss_room hinein: $msg2scream ...", $alias, $ss_room); + &reload_html; + } + else { + &post_prv($alias, "Der Raum $ss_room existiert nicht!"); + } + &reload_html; + } + elsif ($cmd eq 'st') { + my $st_room = $cmd[1]; + if (-e "data/online/rooms/$st_room") { + my $theme; + if ($cmd[2] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, '' . ×tring . qq[ $alias gibt dem Raum $st_room das Thema "$theme" ...], $alias, $st_room); + } + else { + &post($room, '' . ×tring . " $alias l\366scht das Thema des Raums $st_room ...", $alias, $st_room); + } + open RSTAT, "; + close RSTAT; + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$st_room"; + print RSTAT $theme; + close RSTAT; + } + else { + &post_prv($alias, "Der Raum $st_room existiert nicht!"); + } + &reload_html; + } + elsif (5 <= &hierachie($alias)) { + if ($cmd eq 'kill') { + my $alias2kill = $cmd[1]; + if (-f "data/user/options/$alias2kill") { + if (5 <= &hierachie($alias2kill)) { + &post_prv($alias, "$alias2kill hat einen höheren Rang und kann nicht aus dem System entfernt werden !"); + } + else { + &post($room, '' . ×tring . " $alias2kill existiert nicht in der Datenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'sys') { + my $sys_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $sys_msg = $sys_msg . ' ' . $cmd[$i]; + } + $sys_msg = q[] . ×tring . " SYSTEMNACHRICHT: $sys_msg ..."; + opendir ROOMS, 'data/msgs'; + my(@rooms) = readdir ROOMS; + close ROOMS; + foreach $_ (@rooms) { + &post($_, $sys_msg, $alias) unless /\./; + } + &log($sys_msg); + &reload_html; + } + elsif ($cmd eq 'wa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + if (3 <= &hierachie($alias2wa)) { + &post_prv($alias, "$alias2wa kann nicht zum Wächter ernannt werden!"); + } + else { + &hierachie_add($alias2wa, 3); + &post($room, '' . ×tring . " $alias ernennt $alias2wa zum W\344chter ...", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "$alias2wa existiert nicht in der Datenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'rwa') { + my $alias2rwa = $cmd[1]; + my $hierachie = &hierachie($alias2rwa); + if (3 == $hierachie or 4 == $hierachie) { + &hierachie_rm($alias2rwa); + &post($room, q[] . ×tring . " $alias hat $alias2rwa vom W\344chter zum normalen Chatter degradiert ...", $alias); + } + else { + &post_prv($alias, "$alias2rwa ist kein W\344chter und k\366nnen diese Rechte nicht entzogen werden!"); + } + &reload_html; + } + elsif (7 <= &hierachie($alias)) { + if ($cmd eq 'ow') { + my $alias2ow = $cmd[1]; + if (-f "data/user/options/$alias2ow") { + if (5 <= &hierachie($alias2ow)) { + &post_prv($alias, "$alias2ow kann nicht zum Oberwächter ernannt werden!"); + } + else { + &hierachie_add($alias2ow, 5); + &post($room, '' . ×tring . " $alias ernennt $alias2ow zum Oberwächter ...", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "$alias2wa existiert nicht in der Datenbank!"); + } + &reload_html; + } + elsif ($cmd eq 'row') { + my $alias2row = $cmd[1]; + my $hierachie = &hierachie($alias2row); + if (5 == $hierachie or 6 == $hierachie) { + &hierachie_rm($alias2row); + &post($room, q[] . ×tring . " $alias hat $alias2row vom Oberw\344chter zum normalen Chatter degradiert ...", $alias); + } + else { + &post_prv($alias, "$alias2row ist kein Oberw\344chter und k\366nnen diese Rechte nicht entzogen werden!"); + } + &reload_html; + } + elsif ($cmd eq 'pw') { + my $pw2show = $cmd[1]; + if (-f "data/user/options/$pw2show") { + open PW, "; + close PW; + chomp $pw[0]; + &post_prv($alias, "$pw2show hat das Passwort $pw[0] !"); + &reload_html; + } + &post_prv($alias, "$pw2show existiert nicht in der Benutzerdatenbank!"); + &reload_html; + } + elsif ($cmd eq 'id' or $cmd eq 'agent') { + my $id2show = $cmd[1]; + if (-f "data/online/ident/$id2show") { + open ID, "; + close ID; + if ($cmd eq 'id') { + chomp $id[1]; + &post_prv($alias, "$id2show hat die Temp-ID $id[1] !"); + } + else { + chomp $id[2]; + &post_prv($alias, "$id2show verwendet $id[2] !"); + } + &reload_html; + } + &post_prv($alias, "$id2show ist nicht eingeloggt !"); + &reload_html; + } + elsif ($cmd eq 'cool') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + &post($room, '' . ×tring . " $msg2post", $alias); + &reload_html; + } + elsif ($cmd eq 'rev') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post = reverse($msg2post); + &post($room, "$alias: $msg2post", $alias); + &reload_html; + } + } + } + } + } + my($alias2post, $msg2post, $action); + if ($cmd eq 'msg') { + $alias2post = $cmd[1]; + for ($i = 2; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + elsif ($cmd eq '') { + $alias2post = $whisper; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + else { + $alias2post = $cmd; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + $msg2post =~ s[/me/][$alias]g; + $msg2post =~ s[/m/][$alias]g; + if (-f "data/online/users/$alias2post" and not -f "data/online/rooms/$loginplace/$alias2post") { + &post_prv($alias, "Zu $alias2post gefl\374stert: $msg2post"); + &post_prv($alias2post, "$alias fl\374stert: $msg2post"); + &private_javascript($alias, $room, "parent.input.document.inf.whisper.value = '$alias2post';"); + &reload_html; + } + &post_prv($alias, qq[ Benutzer oder Befehl $alias2post ist nicht anwesend/verf\374gbar! Bitte den Befehl "/menu" eingeben, um das Chat-Menü zu öffnen.]); + &reload_html; +} +1; diff --git a/0.7.2/modules/divcom.pm b/0.7.2/modules/divcom.pm new file mode 100644 index 0000000..38685bf --- /dev/null +++ b/0.7.2/modules/divcom.pm @@ -0,0 +1,260 @@ +sub divcom { + if ($var eq 'list_alias_html') { + &list_alias_html; + } + elsif ($var eq 'alias_html') { + &alias_html; + } + elsif ($var eq 'edit_profile_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_profile_html'); + } + elsif ($var eq 'edit_options_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_options_html'); + } + elsif ($var eq 'gb_html') { + &gb_html; + } + elsif ($var eq 'post_gb') { + &secure_checkid($alias, $tmpid); + &post_gb; + } + elsif ($var eq 'edit_profile') { + &secure_checkid($alias, $tmpid); + &edit('edit_profile'); + } + elsif ($var eq 'edit_options') { + &secure_checkid($alias, $tmpid); + &edit('edit_options'); + } + elsif ($var eq 'rm_gb_alias') { + &secure_checkid($alias, $tmpid); + &rm_gb; + } + else { + &error('Parameter fehlt'); + } +} +sub gb_html { + my ($message,$method) = @_; + unless ($method eq 'loggedin') { + &start_html('Benutzerboard'); + &menu(); + } + if ($message eq 'post_empty') { + print "
\n ACHTUNG!\n
\n
\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n \n zuerst\n \n einen Text und poste\n dann\n !\n
\n
\n"; + } + elsif ($message eq 'post_ok') { + print "
\n Meldung:\n
\n
\n Vielen Dank f\374r Deinen Beitrag. Wenn Du willst, kannst Du jetzt gleich noch einen Eintrag posten ...\n
\n
\n"; + } + else { + print "
\n Falls Du Anregungen oder Verbesserungsvorschl\344ge f\374r die Community hast, dann poste doch einen kleinen Eintrag :-)\n
\n
\n"; + } + print qq[
\n \n\n\n\n\n \n \n \n \n \n \n \n \n \n \n
\n
\n]; + if (-e 'data/guestbook') { + &error("Konnte dat/guestbook nicht \366ffnen") unless open DATEI, '; + close DATEI; + print $q->div(@datei); + } + print $q->end_html; +} +sub post_gb { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if ($msg eq '') { + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_empty'); + } else { + &gb_html('post_empty'); + } + } + else { + &alias_html('post_empty'); + } + $client->shutdown(2); + exit 0; + } + $msg =~ s//g; + my $tmpath = ''; + if ($id eq 'y') { + $tmpath = 'data/guestbook'; + } + else { + $tmpath = "data/user/gbooks/$tmp"; + } + open GB, "$tmpath"; + my(@gb) = ; + close GB; + pop @gb if $#gb > 99; + my(@newdatei) = "
$alias schrieb am $days.$months.$years um $hours:$mins:$secs ...
$msg
\n"; + push @newdatei, @gb; + open GB, ">$tmpath"; + print GB @newdatei; + close GB; + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_ok'); + } else { + &gb_html('post_ok'); + } + $client->shutdown(2); + exit 0; + } + &post_prv ($tmp, "$alias hat soeben einen Pin in Dein Profil geh\344ngt ... "); + &gb_html('post_ok');### + $client->shutdown(2); + exit 0; +} +sub rm_gb { + open GB, "; + close GB; + my(@newgbfile) = (); + for ($i = 0; $i <= $#gbfile; ++$i) { + push @newgbfile, $gbfile[$i] if $i != $id; + } + open GB, ">data/user/gbooks/$alias"; + print GB @newgbfile; + close GB; + &alias_html('rm_ok'); +} +sub list_alias_html { + &start_html('Alle Benutzer'); + opendir REGISTERED, 'data/user/options'; + my(@users) = readdir REGISTERED; + closedir REGISTERED; + my(@liste) = sort(@users); + my $nr = $#users - 1; + &menu(); + print "
\n Es sind z.Z. genau $nr Benutzernamen in der Datenbank vorhanden! (Sortiert nach #, A-Z, a-z)\n
\n
\n
\n"; + foreach $_ (@liste) { + if (-f "data/user/options/$_") { + print $q->a({-'href', "chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid"}, "$_"), ' '; + } + } + print "
\n\n\n"; +} +sub alias_html { + my $message = $_[0]; + open COUNTS, "; + close COUNTS; + ++$counter; + open COUNTS, ">data/user/counts/$tmp"; + print COUNTS $counter; + close COUNTS; + &start_html($tmp); + &menu(); + print ""; + if ($message eq 'rm_ok') { + print "
\n Meldung:\n
\n
\n Der von Dir gew\344hlte Eintrag wurde erfolgreich gel\366scht.\n
\n
\n"; + } + elsif ($message eq 'post_empty') { + print "
\n ACHTUNG!\n
\n
\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n \n zuerst\n \n einen Text und poste\n dann\n !\n
\n"; + } + open PROFILE, "; + close PROFILE; + print qq[
\n Dieses Profil wurde insgesamt schon $counter mal aufgerufen !\n

Alias: $tmp\n

Nachname: $data[0]\n

Vorname: $data[1]\n

Alter: $data[2]\n

Wohnort: $data[3]\n

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

ICQ-Nummer: $data[5]\n

Homepage: $data[6]\n

Weiteres:
$data[7]\n
\n Hier kannst Du $tmp eine Nachricht hinterlassen!\n
\n \n \n \n \n \n \n \n \n \n
\n
\n]; + if (-e "data/user/gbooks/$tmp") { + &error("Konnte data/user/gbooks/$tmp nicht \366ffnen") unless open DATEI, "; + close DATEI; + my $nr = 1; + if ($alias ne $tmp) { + foreach $_ (@datei) { + print "
Eintrag # $nr: $_"; + ++$nr; + } + } + else { + print qq[ \n \n \n \n \n \n \n]; + for ($i = 0; $i <= $#datei; ++$i) { + print qq[ \n \n \n \n]; + ++$nr; + } + print qq[
\n \n \n
\n
\n Eintrag # $nr:\n $datei[$i]\n
\n
\n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n \n]; + } + } + print $q->end_html; +} +sub edit_html { + my($method, $message) = @_; + &start_html("Benutzerprofil \344ndern"); + if ($method eq 'edit_options_html') { + open DATEI, "; + close DATEI; + foreach $_ (@data) { + chomp $_; + } + &menu(); + if ($method eq 'edit_options_html') { + if ($message eq 'edit_options_ok') { + print "
\n Hinweis:\n
\n
\n Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um\n weiterzuchatten einfach Fenster schliessen!\n
\n
\n"; + } + elsif ($message eq 'edit_pw_wrong') { + print "
\n ACHTUNG!\n
\n
\n Du hast soeben versucht, dein Passwort zu \344ndern. Jedoch stimmte die Erste Eingabe nicht mit der Zweiten \374berein.\n Bitte versuch es erneuert ...\n
\n
\n"; + } + else { + print $q->div('Hier kannst Du Deine Chat-Optionen editieren!'), $q->hr; + } + print qq[\n\n
\n \n \n \n \n \n \n \n
\n
\n Dein Passwort\n \n (Gut merken !!)\n \n
\n \n
\n
\n \n
\n Geb hier das Passwort erneuert ein:\n
\n \n
\n
\n
\n
Einstellungen f\374r den Nachrichten-Verlauf
\n \n \n \n \n \n \n \n
\n
\n
Anzahl der Nachrichten im Verlauf (Standart = 10)
\n \n \n \n
\n
\n
Wie sollen die Nachrichten im Verlauf angeordnet sein?
\n \n \n \n
\n
\n
PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.
\n
\n \n \n \n \n \n \n
\n
\n \n Auswahl von Farbe 1\n
\n (Farbe Deines Nicks):\n
\n \n
\n
\n \n
\n \n Auswahl von Farbe 2\n
\n (Farbe Deiner Nachrichten):\n
\n \n
\n
\n
\n
\n Beliebige Auswahl markieren und Farbe w\344hlen. Um Deine Optionen abzuspeichern,\n auf "Daten \344ndern" klicken!\n
\n
\n]; + open COLORS, '; + close COLORS; + print @colors; + } + elsif ($method eq 'edit_profile_html') { + if ($message eq 'edit_profile_ok') { + print "
\n Hinweis:\n
\n
\n Du hast soeben Dein Profil erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren:\n
\n"; + } + else { + print $q->div('Hier kannst Du Dein Profil editieren!'), $q->hr; + } + print qq[ \n \n
\n Dein Nachname:\n
\n \n
\n
\n
\n Dein Vorname:\n
\n \n
\n
\n
\n Dein Alter:\n
\n \n
\n
\n
\n Dein Wohnort:\n
\n \n
\n
\n
\n Deine E-Mail Adresse:\n
\n \n
\n
\n
\n Deine ICQ-Nummer:\n
\n \n
\n
\n
\n Deine Homepage:\n
\n \n
\n
\n
\n Weiteres:\n
\n \n
\n]; + } + print qq[
\n \n \n \n \n \n \n \n \n\n\n]; +} +sub edit { + my $method = $_[0]; + if ($method eq 'edit_profile') { + my $url = $homepage; + $url =~ s[^http://*][]; + open PROFILE, ">data/user/profiles/$alias"; + my $profile = "$nachname\n$vorname\n$alter\n$wohnort\n$email\n$icq\nhttp://$url\n$weiteres"; + $profile =~ s/shutdown(2); + exit 0; + } + open OPTIONS, ">data/user/options/$alias"; + my $options = "$id\n$col\n$secol\n$maxVerlauf\n$verlaufOrder"; + $options =~ s/' . ×tring . " $alias hat seine Chat-Einstellungen geändert ...
", $alias); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &edit_html('edit_options_html', 'edit_options_ok'); + } +} +1; diff --git a/0.7.2/modules/hierachie.pm b/0.7.2/modules/hierachie.pm new file mode 100644 index 0000000..3a9e13c --- /dev/null +++ b/0.7.2/modules/hierachie.pm @@ -0,0 +1,74 @@ +sub hierachi