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.2.6a/INSTALL.txt | 106 ++++++++ 0.2.6a/LIESMICH.txt | 45 ++++ 0.2.6a/TODO.txt | 25 ++ 0.2.6a/UPDATES.txt | 91 +++++++ 0.2.6a/bar.gif | Bin 0 -> 231 bytes 0.2.6a/config.pm | 321 ++++++++++++++++++++++++ 0.2.6a/help.sno | 54 ++++ 0.2.6a/htdocs.pl | 208 ++++++++++++++++ 0.2.6a/index.pl | 369 +++++++++++++++++++++++++++ 0.2.6a/main.pl | 698 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 0.2.6a/main2.pl | 571 ++++++++++++++++++++++++++++++++++++++++++ 0.2.6a/online.pl | 56 +++++ 0.2.6a/push.pl | 105 ++++++++ 0.2.6a/setup.sh | 42 ++++ 0.2.6a/yBanner.gif | Bin 0 -> 5185 bytes 0.2.6a/yBanner2.gif | Bin 0 -> 2105 bytes 0.2.6a/yChat.jpg | Bin 0 -> 50407 bytes 17 files changed, 2691 insertions(+) create mode 100644 0.2.6a/INSTALL.txt create mode 100644 0.2.6a/LIESMICH.txt create mode 100644 0.2.6a/TODO.txt create mode 100644 0.2.6a/UPDATES.txt create mode 100644 0.2.6a/bar.gif create mode 100644 0.2.6a/config.pm create mode 100644 0.2.6a/help.sno create mode 100644 0.2.6a/htdocs.pl create mode 100644 0.2.6a/index.pl create mode 100644 0.2.6a/main.pl create mode 100644 0.2.6a/main2.pl create mode 100644 0.2.6a/online.pl create mode 100644 0.2.6a/push.pl create mode 100644 0.2.6a/setup.sh create mode 100644 0.2.6a/yBanner.gif create mode 100644 0.2.6a/yBanner2.gif create mode 100644 0.2.6a/yChat.jpg (limited to '0.2.6a') diff --git a/0.2.6a/INSTALL.txt b/0.2.6a/INSTALL.txt new file mode 100644 index 0000000..534014d --- /dev/null +++ b/0.2.6a/INSTALL.txt @@ -0,0 +1,106 @@ +############################################################################# +## yChat.de Version 0.2.6 by CXG.de: The chatters of the next generation ## +## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ## +############################################################################# +yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik, +Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine +E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie +möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ... + +Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden. +Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen +Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript +setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden +automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen +mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder +den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du +unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat" +in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien +falsch oder garnicht kopiert. + +Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell +erstellen: + +Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin +Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/: + +config.pm => Configurationsdatei ("Shared subs") +htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich) +index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.) +main.pl => Hauptskript (Alle Hauptfunktionen des Chats) +main2.pl => Skript für editieren der Benutzerdaten etc. +online.pl => Anzeige und Überprüfung der eingelogten Benutzer +push.pl => Server-Push-Routine +setup.sh => Dient zur automatischen Einrichtung des Chats. +LIESMICH.txt => Beinhaltet wichtige Informationen +UPDATES.txt => Updateliste der verschiedenen Versionen +INSTALL.txt => Dieses Dokument +help.sno => Datei beinhaltet alle Chatbefehle + +Folgende Verzeichnisse müssen erstellt werden (chmod 777 sollte +funktionieren): + +- Hier befinden sich alle für den Chat notwenidgen Daten: + ./cgi-bin/yChat/data/* + +- Hier befinden sich alle Logdateien, die vom Chat erstellt werden: + ./cgi-bin/yChat/data/logs/* + +- Hier befinden sich die Message-Dateien der eingelogten Benutzer: + ./cgi-bin/yChat/data/msgs/* + +- Hier befinden sich alle Daten der registrierten Benutzer: + ./cgi-bin/yChat/data/user/* + +- Hier wird abgespeichert, wie oft ein Benutzerprofil insgesant schon + aufgerufen wurde: + ./cgi-bin/yChat/data/user/counts/* + +- Hier werden alle Memos abgespeichert. + ./cgi-bin/yChat/data/user/memos/* + +- Hier befinden sich alle Chat-Optionen und Passwörter der registrierten + Benutzer: + ./cgi-bin/yChat/data/user/options/* + +- Hier befinden sich alle Benutzerprofile der Benutzer: + ./cgi-bin/yChat/data/user/profiles/* + +- Hier befinden sich alle Gästebucheinträge der Benutzer: + ./cgi-bin/yChat/data/user/gbooks/* + +- Hier wird Protokolliert, wann sich die Benutzer zum letzten mal eingelogt haben: + ./cgi-bin/yChat/data/user/lastlogin/* + +- Hier befinden sich alle Daten zu den aktuellen Chaträumen und User die online sind + ./cgi-bin/yChat/data/online/* + +- Hier befinden sich alle offnenen Räume + ./cgi-bin/yChat/data/online/rooms/* + +- Hier befinden sich die Chatter, die sich in den jew. Räumen befinden. Die + Verzeichnisse der Räume werden automatisch erstellt. + ./cgi-bin/yChat/data/online/rooms/RAUMNAME/* + +- Hier befinden sich alle Chatter, die sich z.Z. im System befinden + ./cgi-bin/yChat/data/online/users/* + +- Hier befinden sich alle IP-Nummern der eingelogten Chatter + ./cgi-bin/yChat/data/online/ident/* + +Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B. +nach ./yChat/ + + bar.gif => Der gelb gestreifte Rand auf den meisten Seiten + unten.gif => Der Hintergrund für das Eingabeformular im Chat + yChat.gif => Das yChat-Logo auf der Startseite + yBanner.gif => 400x40 yChat-Banner + yBanner2.gif => 88x31 yChat-Banner + +Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten +die Copyright Hinweise und die Versionsnummern nicht manipuliert werden. + +Folgende Dateien werden von yChat automatisch erstellt: + +Viel Spaß beim Chatten ... + Snooper \ No newline at end of file diff --git a/0.2.6a/LIESMICH.txt b/0.2.6a/LIESMICH.txt new file mode 100644 index 0000000..4f92a14 --- /dev/null +++ b/0.2.6a/LIESMICH.txt @@ -0,0 +1,45 @@ +############################################################################# +## yChat.de Version 0.2.6 by CXG.de: The chatters of the next generation ## +## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ## +############################################################################# +Allgemeine Bedingungen bezgl. yChat: + + - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art + und Weise weitergegeben- oder eingesetzt werden. + + - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit + die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link + auf der Startseite nach servers.yChat.de unverändert bleibt. + Ansonsten darf der gesamte Code manipuliert werden. + + - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte + Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf + die Veränderungen in das Standard-yChat-System integrieren. + + - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die + URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen. + und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew. + Servers steht. + + - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und + für andere, nicht von yChat abhängige Perl-Programme einzusetzen. + +Im Flogenden einige yChat-bezügl. Verknüpfungen: + + www.servers.yChat.de => Liste aller laufenden yChat-Systeme + www.install.yChat.de => Installationsdokumentation + www.liesmich.yChat.de => Allgemeine Bedingungen usw. + www.todo.yChat.de => Funktionen, die später integriert werden + www.updates.yChat.de => Update-Liste + www.yChat.de => Das Skript zum testen + +Vielen Dank an: + + - Andreas Buchwald für die Programmierung des "Nach-UntenScroll-JavaScripts" + (www.anklepper.de). + + - Michi aka Snoopy für die Erstellung und Anregung der Farbtabelle + (www.berlin-singeltreff.de). + + - Peacemaker für die Erstellung des yChat-Logos + (www.peaceplace.de). diff --git a/0.2.6a/TODO.txt b/0.2.6a/TODO.txt new file mode 100644 index 0000000..c2ed8e0 --- /dev/null +++ b/0.2.6a/TODO.txt @@ -0,0 +1,25 @@ +Folgende Funktionen werden demnächst in yChat integriert: + + - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden, + die sich nicht benehmen und noch nicht aus dem Chat + katapultiert werden sollen). + + - Löschung aller Chatter, die sich seit 60 Tagen nicht mehr + eingelogt haben. + + - IP-Adressen ver-/entbannen. + + - E-Mail zusendung bei verlorenem Passwort. + + - Totale Onlinezeit der einzelnen Chatter soll protokolliert + werden. Daraus wird dann eine Top20 der Chatter erstellt. + + - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach + dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu). + + - Der Cybarkeeper (künstlich intilligenter Chatroboter, der + sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt + und von Real-Chattern übernommen werden kann. (Zukunftsmusik) + +Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de +texten oder eine E-Mail an paul@buetow.oxg.de :-) \ No newline at end of file diff --git a/0.2.6a/UPDATES.txt b/0.2.6a/UPDATES.txt new file mode 100644 index 0000000..227afc1 --- /dev/null +++ b/0.2.6a/UPDATES.txt @@ -0,0 +1,91 @@ +########################### yChat.de UPDATE LIST ########################### +## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ## +############################################################################# +Hier sind alle Erneuerungen der Versionen dokumentiert: + +Update von 0.2.5 auf 0.2.6 vom 17.12.2k + - Das Eingabeframe reloaded sich nicht mehr nach jedem Posting. + Vielen Dank an Truhe aka Dave und Klepper aka Andreas Buchwald! + Bei den Chatbefehlen /col /away /j und /ju muß sich das + Eingabeframe weiterhin reloaden. + - Der Befehl // wurde entfernt. Dieser war nicht mehr erforderlich. + weil Nachrichten werden nur noch sehr selten verschluckt. Dieser + Chatbefehl postete die letzte Nachricht nocheinmal. + - Neuer Befehl: mit "/memo Alias hier der Text" hinterläßt man + Alias eine Memo. Logt sich Alias in den Chat ein, dann erhält + er diese sofort. Dafür wurde das Verzeichnis ".data/user/memos/" + angelegt. + - Programmcode wurde ein wenig optimiert. + - Das Design wurde ein wenig geändert. + - Beseitigung diverser Bugs. + +Update von 0.2.4 auf 0.2.5 vom 15.12.2k + - Derjenige, der einen Raum zuerst betritt, hat Raumbesetzerrechte. + - Raumbesetzer, Wächter und Oberwächte können weitere Raumbesetzer + bestimmen. Diese können Raumbeseter auch wieder degradieren. + - Raumbesetzer, Wächter und Oberwächter können dem aktuellen Raum + auf/absperren und Themen geben. Wächter und Oberwächter können + abgesperrte Räume betreten. + - Das Verzeichnis ".data/htdocs" wurde entfernt. Die Datei help_html + heist nun help.sno und befindet sich im yChat-Hauptverzeichnis. + - Das Verzeichnis ".data/user/lastlogin" wurde hinzugefügt. Hier + wird beim erfolgreichen Einloggen ein "Timestamp" gesetzt. Später + sollen Oberwächter "veraltete" Benutzer entfernen können. + - Neuer Oberwächterbefehl: "/kill Alias" entfernt Alias ganz und gar + vom System. Oberwächter und Wächter können nicht entfernt werden. + - Perl-Cache wurde im gesamten System komplett deaktiviert ( Weniger + Ladezeiten der HTML-Dokumente ). + - Nur Nachrichten aus dem Raum "Cyberbar" werden gelogt. + Selbsterstellte Räume werden nichtmehr gelogt. Viele Logfunktionen + wurden entfernt (weniger Serverbalast). + - Beseitigung einiger kleinen Bugs. + - Unter "Optionen" im Chat wir die Farbe nun mit einem Drop-Down-Menü + ausgewählt ( Vielen dank an Michi aka Snoopy ). + - Auf der Startseite wird nun angezeigt wieviele Benutzer eingelogt + sind. Ist keiner eingelogt, dann wird das System "aufgeräumt". D.h. + Dateien die nicht mehr gebraucht werden und noch nicht gelöscht + wurden werden entfernt ( z.B. Nachrichtendateien der einzelnen + Chatter und die Dateien die die IP-Nummern der eingelogten Benutzer + beinhalteten usw.). + - Hunzufügung einer TODO-Liste. Hier sind mehrere Funktionen + vermerkt, die in späteren yChat-Versionen eingebaut werden sollen. + (www.todo.yChat.de oder TODO.txt). + +Update von 0.2.3 auf 0.2.4 - 30.11.2k + - Optimierung bzw. Verbesserung der Push-Routine push.pl. + - Server-Ping wurde von 2-Pings-per-Minute auf 4 erhöht. + - yChat-Banner wurde erstellt und ist unter + documents.yChat.de/yBanner.jpg vorzufinden. + - Unter der URL servers.yChat.de wurde eine Serverliste angelegt, + welche anzeigt wo yChat-Systeme laufen. + - Des weiteren wurden die URLs updates.yChat.de, install.yChat.de + und liesmich.yChat.de eingerichtet. + - Die Menüpunkte wurden zusammengefaßt, damit sie unter einer + Auflösung von 800x600 nur eine Zeile belegen. + - Einige Bugs wurden entfernt. + +Update von 0.2.2 auf 0.2.3 - 25.11.2k + - Smooth scrolling JavaScript ( Vielen Dank an Andreas Buchwald ). + - "IP#-Fehler" wurde so gut wie beseitigt. + - Aufrufe der einzelnen Benutzerprofile wird gezählt und angezeigt. + Diese werden in data/user/counts/* gespeichert. + - Automatische Einrichtung des Chats mit setup.sh und Telnet. + - Menüpunkt "Dein Profil" wurde entfernt da eigenes Profil auch + stets über die Onlineliste aufgerufen werden kann. + +Update von 0.2.1 auf 0.2.2 - 23.11.2k + - Einige Bugs wurden entfernt. + - Geschwindigkeit des Chats wurde optimiert. + - Eine Liste aller eingelogten Benutzer erscheint am Rand. Hierfür + wurde die Datei online.pl eingeführt. Sie aktuallisiert sich alle + 20 Sekunden. + - Die UPDATES.txt wurde eingeführt. + +Update von 0.2.0 auf 0.2.1 + - Einige Bugs wurden entfernt. + - Die IP# der eingelogten Benutzer werden nun anders verwaltet. + +Update von Alpha XVIII auf 0.2.0 + - Die Handhabung der eingelogten Benutzer im System wurde komplett neu + überarbeitet. + - Neue Versionsnumern wurden eingeführt. \ No newline at end of file diff --git a/0.2.6a/bar.gif b/0.2.6a/bar.gif new file mode 100644 index 0000000..61d02b7 Binary files /dev/null and b/0.2.6a/bar.gif differ diff --git a/0.2.6a/config.pm b/0.2.6a/config.pm new file mode 100644 index 0000000..c3f701f --- /dev/null +++ b/0.2.6a/config.pm @@ -0,0 +1,321 @@ +# yChat - Copyright by Paul C. Bütow + +########################### Dieser Teil bestimmt die Standart-Variabeln. +##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.) +########################### +$alias = $q->param("alias"); +$var = $q->param("var"); +$room = $q->param("room"); +$col = $q->param("col"); +$secol = $q->param("secol"); +$msg = $q->param("msg"); +$tmp = $q->param("tmp"); +$id = $q->param("id"); +$room = "Cyberbar" if ($room eq ""); +$col = "ffffef" if ($col eq ""); +$secol = "ffffef" if ($secol eq ""); +$datum = "19.12.2k"; +$version = "0.2.6a"; +$title = "yChat.de ($version)"; +$gfxpath = "../../yChat/"; +$style = < + body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 } + body.menu { background-image: none } + body.log { background-color: 000000 } + body.online { background-color: 444444; background-image: none } + div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff } + div.b { font-weight: bold; color: ffa500 } + a { color: ffffef } + a:hover { color: ffffff; text-decoration: none } + +ENDCSS + +############### Dieser Teil enthält Programmcode, der an verschiedenen +##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur +############### Verfügung steht. + +sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus + my ($file2print,$pagetitle,$bodyclass) = @_; + if ($pagetitle ne "") { + &start_html($pagetitle,$bodyclass); + } + print "
Push

" if ($bodyclass eq "log"); + &read_file($file2print); + @file2print = ; + close DATEI; + print @file2print; +} + + +sub start_html { # Der HEADER einer HTML-Datei +print ""; +print "" if ($_[1] eq "online"); +print < + $title - $_[0] + + $style + +END + if ($_[1] ne "") { + print ""; + } else { + print ""; + } +} + +sub post { # Öffentliche Nachricht im aktuellen Raum $room posten. + my ($msg2post,$secroom) = @_; + my @rooms = ($room,$secroom); + foreach(@rooms) { + my $room2post = $_; + &list_dir("data/online/rooms/$room2post"); + foreach(@dir) { + my $alias2post = $_; + if (-f "data/online/rooms/$room2post/$alias2post") { + &write_file("data/msgs/$alias2post"); + print DATEI "$msg2post
\n"; + close DATEI; + } + } + } + &log("$msg2post") if ($room eq "Cyberbar"); +} + + +sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten. + my $msg2post = $_[0]; + &list_dir("data/online/users"); + foreach(@dir) { + my $alias2post = $_; + if (-f "data/online/users/$alias2post") { + &write_file("data/msgs/$alias2post"); + print DATEI "$msg2post
\n"; + close DATEI; + } + } + &log("$msg2post"); +} + +sub post_prv { # Private Nachricht posten (flüstern). + my $alias2post = $_[0]; + my $msg2post = $_[1]; + &write_file("data/msgs/$alias2post"); + print DATEI "$msg2post
\n"; + close DATEI; +} + +sub log { # Protokollieren der Nachrichten etc. + my ($msg2log) = @_; + &zeit; + &write_file("data/logs/$day.$month.$year"); + print DATEI "
($hours:$min:$sec) $msg2log\n"; + close DATEI; +} + + +sub zeit { # Aktuelles Datum und Uhrzeit bestimmen. + ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5]; + $month += 1; + $hours = "0".$hours if ($hours < 10); + $min = "0".$min if ($min < 10); + $sec = "0".$sec if ($sec < 10); + $day = "0".$day if ($day < 10); + $month = "0".$month if ($month < 10); + $year = $year - 100; + if ($year < 10) { + $year = "200".$year; + } else { + $year = "20".$year; + } +} + +sub count { # Zeilen in einer Datei Zählen. + my $file2count = $_[0]; + &read_file($file2count); + my @datei = ; + close DATEI; + $number = $#datei+1; +} + +sub read_file { # Datei öffnen. + my $file2read = $_[0]; + if (-e "$file2read") { + open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen"); + } +} + +sub write_file { # Text an eine Datei anhängen. + my $file2write = $_[0]; + if (-e "$file2write") { + open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen"); + } else { + &create_file("$file2write"); + open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen"); + } +} + +sub write_file_new { # Datei neu schreiben. + my $file2write = $_[0]; + if (-e "$file2write") { + open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen"); + } else { + &create_file("$file2write"); + open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen"); + } +} + +sub create_file { # Datei erstellen. + my $file2create = $_[0]; + open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen!"); + print CREATE ""; + close CREATE; +} + +sub error { # Error-Ausgabe. + my $error_msg = $_[0]; + &start_html( "Error: ($error_msg)" ); + print $q->div( "Error: ($error_msg)" ), + $q->end_html; + exit; +} + +sub remove_online { # Chatter entfernen + my ($alias,$room,$method) = @_; + unlink("data/online/users/$alias"); + unlink("data/online/rooms/$room/$alias") if ($room ne undef); + unlink("data/online/ident/$alias"); + unlink("data/msgs/$alias"); + &rm_rooms; + &zeit; + if ($method eq undef) { + &post("($hours:$min:$sec) $alias verläßt den Chat ..."); + } elsif ($method ne "kick") { + &post("($hours:$min:$sec) $_ hat den Chat verlassen ... "); + } + &rm_rstat($room,$alias) if ($room ne undef); +} + +sub rm_alias { # Chatter aus dem System entfernen, dessen Timestamps älter als 60 Sekunden sind + my ($dir2rm,$rstatroom) = @_; + &list_dir($dir2rm,2); + foreach(@dir2) { + if (-f "$dir2rm/$_" && $_ ne undef) { + &read_file("$dir2rm/$_"); + my $timestamp = ; + close DATEI; + if ($timestamp < (time - 60)) { + if ($dir2rm eq "data/online/users") { + &remove_online($_,undef,1); + } else { + unlink("$dir2rm/$_"); + &rm_rstat($rstatroom,$_) if ($rstatroom ne undef); + } + } + } + } +} + +sub rm_rooms { # Leere Räume aus dem System entfernen + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-d "data/online/rooms/$_") { + &rm_alias("data/online/rooms/$_",$_); + &list_dir("data/online/rooms/$_",2); + if ($#dir2 = 1) { + rmdir("data/online/rooms/$_"); + } + } + } +} + +sub rm_rstat { # Benutzer als Raumbesetzer austragen + my ($rstatroom,$r_alias) = @_; + &read_file("data/online/rstat/$rstatroom"); + my @rstat = ; + close DATEI; + my $newfile = $rstat[0].$rstat[1]; + for ($i=2;$i<=$#rstat;$i++) { + $newfile = $newfile."\n".$rstat[$i] if ($rstat[$i] ne $r_alias."\n"); + } + write_file_new("data/online/rstat/$rstatroom"); + print DATEI $newfile; + close DATEI; +} + +sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen. + my $alias2rm = $_[0]; + unlink("data/online/ident/$alias2rm"); +} + +sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen. + my ($alias2check,$method) = @_; + my $ip; + for($i=0 ;$i<=5;) { + &read_file("data/online/ident/$alias2check"); + $ip = ; + close DATEI; + if ($ip ne $ENV{'REMOTE_ADDR'}) { + $i++; + } else { + goto ENDCHECKIP + } + if ($i<=5) { + if ($method eq undef) { + &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein."); + } else { + &post_prv("$alias2check","Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein."); + &input_html("true") if ($method = 2); + } + exit; + } + } +ENDCHECKIP: +} + +sub remove_rooms { # Leere Räume entfernen. + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-d "data/online/rooms/$_") { + &list_dir("data/online/rooms/$_"); + rmdir("data/online/rooms/$_") if ($#dir = 1); + } + } +} + +sub list_dir { # Beliebigen Verzeichnisbaum einlesen. + my ($dir,$method) = @_; + opendir(DIR, $dir); + if ($method eq undef) { + @dir = readdir(DIR); + } elsif ($method = 2) { + @dir2 = readdir(DIR); + } + closedir(DIR); +} + +sub hirachie { # Chatter nach Sonderrechte überprüfen. + my $alias2prove = $_[0]; + $hirachie = undef; + &read_file("data/wa"); + @was = ; + close DATEI; + foreach(@was) { + if ($_ eq $alias2prove || $_ eq "$alias2prove\n") { + $hirachie = "wa"; + } + } + &read_file("data/ow"); + @ows = ; + close DATEI; + if ($hirachie ne "wa" || $_ eq "$alias2prove\n") { + foreach(@ows) { + if ($_ eq $alias2prove || $_ eq "$alias2prove\n") { + $hirachie = "ow"; + } + } + } +} + +$| = 1; # Cache von Perl ausschalten \ No newline at end of file diff --git a/0.2.6a/help.sno b/0.2.6a/help.sno new file mode 100644 index 0000000..2543c5c --- /dev/null +++ b/0.2.6a/help.sno @@ -0,0 +1,54 @@ +
+ Alle Chat-Befehle: +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SU
Befehl
Beschreibung
NC
/about
Zeigt aktuelle Version und andere Infos der Community an
NC
/away Nachricht
Abmelden mit einerAbmeldenachricht
NC
/clear
Bildschirm wird gelöscht
NC
/col XXXXXX XXXXXX
Farbe/n (Namensfarbe / Textfarbe) wechseln. Angabe in Hexadezimal.
NC
/date
Zeigt aktuelles Datum und Urzeit an
NC
/j Raumname
Raum wechseln/erstellen
NC
/ju Alias
In den Raum wechseln/folgen, wo sich Alias befindet.
NC
/m Aktion
Handeln mit 2 Farben
NC
/me Aktion
Handeln mit einer Farbe
NC
/memo Alias Nachricht
Alias eine Memonachricht hinterlassen.
NC
/msg Alias Nachricht
Alias eine private Nachricht flüstern.
NC
/ Nachricht
Eine private Nachricht demjenigen flüstern, dem zuletzt eine geflüstert wurde
NC
/q
Cumunnity verlassen
NC
/s Nachricht
Nachricht schreien
NC
/w
Zeigt an, wer sich im aktuellen Raum befindet
NC
/wc Raum
Zeigt an, wer sich im Raum befindet. Wird kein Raum angegeben, dann wird jedeglich angezeigt, wer sich im System befindet
NC
/wc/
Zeigt alle offenen Räume und deren Chatter an
NC
/wj Alias
Zeigt an, in welchen Raum sich Alias befindet
RB
/l
Der aktuelle Raum wird ab- bzw. aufgesperrt
RB
/rsu Alias
Alias die Raumbesetzerrechte entnehmen
RB
/su Alias
Alias zum Raumbesetzer ernennen
RB
/t Thema
Dem aktuellen Raum wird ein Thema gegeben
/k Alias
Alias wird aus dem Chat katapultiert!
OW
/ban
Zeigt alle verbannten Benutzer an
OW
/ban Alias
Alias verbannen
OW
/rban Alias
Alias "entbannen"
OW
/ip Alias
Zeigt die IP-Nummer von Alias an
OW
/kill Alias
Alias wird ganz und gar aus dem System entfernt
OW
/wa Alias
Alias zum Wächter ernennen
OW
/rwa Alias
Alias vom Wächter zum normalen Chatter degradieren
OW
/sys Nachricht
Systemnachricht schreiben. (Erscheint in allen existierenden Räumen)

+
+ Zur Erklärung: NC steht für "Normale Chatter", RB für "Raumbesetzer", WÄ für "Wächter" und OW für "Oberwächter". + Obrige Befehle können nur von der/den jeweiligen Benutzergruppe/n werden.

+ Allerdings gibt es folgendes zu beachten: Oberwächter verfügen über alle Chatbefehle. Normale Wächter über alle Chatbefehle, außer über die der Oberwächter. + Raumbesetzer können nur Raumbesetzerbefehle und die Befehle der normalen Chatter durchführen. Normale Chatter haben jedeglich die Standardbefehle zu verwenden.

+ Weitere Besonderheiten der Wächter und Oberwächter:

+ Wächter und Oberwächter können ....
+ ... abgesperrte Chaträume problemlos betreten.
+ ... nicht gekickt, verbannt oder gekillt werden.
+ ... Logdateien der Cyberbar lesen.

+ + Des weiteren: Oberwächter ernennt nur der Systemadministrator! +
+ + \ No newline at end of file diff --git a/0.2.6a/htdocs.pl b/0.2.6a/htdocs.pl new file mode 100644 index 0000000..68c8a8a --- /dev/null +++ b/0.2.6a/htdocs.pl @@ -0,0 +1,208 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "help_html") { + &printfile("help.sno","Alle Chatbefehle"); +} elsif ($var eq "menu_html") { + &menu_html; +} elsif ($var eq "blank_html") { + print "",$q->end_html; +} elsif ($var eq "werda_html") { + &werda_html; +} elsif ($var eq "logs_html") { + &logs_html; +} elsif ($var eq "view_sulogs_html") { + &hirachie($alias); + if ($hirachie eq "ow") { + &start_html("Oberwächter-Logdateien"); + print "
Push
"; + &printfile($tmp); + print "
"; + } +} elsif ($var eq "view_logs_html") { + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + &printfile($tmp,$tmp,"log"); + } +} elsif ($var eq "superuser_html") { + &superuser_html; +} elsif ($var eq "bar_html") { + print + $q->start_html(-bgcolor=>"ffa500"), + $q->end_html; +} else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; +} + +sub menu_html { + if ($tmp eq "quit") { + print + $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" ); + sleep 1; + &remove_online($alias); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + } + &start_html("Menü","menu"); +print < + + + + +END +} + + +sub werda_html { # Anzeige, wer eingelogt ist. + &start_html("Wer ist da?"); + print < + $alias, schön daß Du hier bist :-) + +
+
+ Folgende Personen befinden sich im Chat: +
+
+
+END + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + my $room = $_; + &read_file("data/online/rstat/$room"); + my @rstat = ; + close DATEI; + my $door = "[Abgesperrt!]" if ($rstat[0] eq "1\n"); + &list_dir("data/online/rooms/$room",2); + local $nr = $#dir2-1; + print $q->b( $_ ), + " $door ($nr) Raumthema: $rstat[1]", + $q->br; + foreach(@dir2) { + if ($_ ne ".." && $_ ne ".") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " "; + } + } + print $q->br, $q->br; + } + } + print + "
", + $q->end_html; +} + +sub logs_html { + &secure_checkip($alias); + &start_html("Logdateien"); + print < + Hier befinden sich alle Logdateien + +
+END + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + &list_dir("data/logs"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/$_") { + print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_", + -target=>"_new" }, + "$_" ), + " "; + } + } + } else { + print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ", + "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde." ), + $q->hr; + &printfile("data/htdocs/logs_html"); + } + print + $q->end_html; +} + +sub superuser_html { # Zeigt an, wer Superuser ist + &start_html("Superuser"); + print "
Hallo $alias. Du bist als "; + &hirachie($alias); + if ($hirachie eq "ow") { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.
", + $q->hr; + } elsif ( $hirachie eq "wa") { + print + $q->b( "Wächter" ), + " (WÄ) eingetragen.", + $q->hr; + } else { + print + $q->b( "normaler Chatter" ), + " (NC) eingetragen.", + $q->hr; + } + + my $nrow = $#ows+1; + print + "
", + $q->b( "OW" ), + "s ($nrow Stück)"; + foreach(@ows) { + print + $q->font( { -color=>"FFA500" }, + " ".$_); + } + my $nrwa = $#was+1; + print + "
", + $q->hr, + "
", + $q->b( "WÄ" ), + "s ($nrwa Stück)"; + foreach(@was) { + print + $q->font( { -color=>"FFA500" }, + " ".$_); + } +print < + Die jeweiligen Fähigkeiten der Oberwächter (OW) und der Wächter (WÄ) sind unter + "Chat-Befehle" + dokumentiert. +
+ + +END +} \ No newline at end of file diff --git a/0.2.6a/index.pl b/0.2.6a/index.pl new file mode 100644 index 0000000..838ff44 --- /dev/null +++ b/0.2.6a/index.pl @@ -0,0 +1,369 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = ; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&list_dir("data/online/users"); +my $logtin = $#dir-1; +&start_html("Created by Paul C. Bütow 2k"); +print < + + + + +
+ +
+ $title - ( yChat-Servers ) + +
+
+END + if ($tmp eq "true") { +print < + ACHTUNG! + +
+ Wahrscheinlich existiert Dein Alias "$alias" nicht, +
+ Du hast Dich verschrieben oder das Passwort ist falsch. +
+ Versuch es erneuert ! +
+END + } elsif ($tmp eq "quit") { +print < + Du hast soeben den Chat verlassen. +
+ Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-) + +END + } elsif ($tmp eq "banned") { +print < + ACHTUNG! + +
+ Dein Alias "$alias" wurde verbannt. +
+ Z.z. kannst Du Dich leider nicht in den Chat einloggen. +
+ Sorry! +
+END + } elsif ($tmp eq "kick") { +print < + ACHTUNG! + +
+ Du wurdest soeben aus dem Chat katapultiert! +
+ Schlechtes Verhalten mag die Ursache hierfür sein. +
+ Sorry! +
+END + } elsif ($var eq "create_alias") { +print "
Du hast sich soeben in die Datenbank eingetragen. Einfach auf \"Los Geht's\" klicken :-)
"; + } else { +print < + Herzlich willkommen! +
+ Einfach Daten eingeben und auf "Los Geht's" klicken :-) + +END + } +print < +
+ + + + + + +
+
+ Dein Alias: +
+ +
+
+
+ Dein Passwort: +
+ +
+
+
+
+
+ Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken! +
+
+ + + + + +
+ + + + + +
+ + + + +
+
+
+
+ yChat befindet sich momentan noch in der Entwicklungsphase ! +
+ Fragen gehen an Paul Bütow ( + + paul\@buetow.oxg.de + + ) :-) +
+
+ Diese Seite wurde schon $counter mal aufgerufen. Es sind z.Z. $logtin Benutzer online. +
+ + + +END + if ($logtin == 0) { + &list_dir("data/msgs"); + &list_dir("data/online/rstat",2); + foreach(@dir) { + unlink("data/msgs/$_"); + unlink("data/online/ident/$_"); + } + foreach(@dir2) { + unlink("data/online/rstat/$_"); + } + } + # Falls d. Skript das Raumverz. gelöscht hat, neu anlegen + if (-d "data/online/rooms") { + } else { + mkdir "data/online/rooms", 0777; + } +} + + +sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers. +my $reload = $_[0]; +&start_html("Registration"); +print < + + + + +
+END + if ($reload eq "alias_exists") { +print < + ACHTUNG! + +
+ Der von Dir gewählte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit + einem anderen Benutzernamen ! +
+
+END +} elsif ($reload eq "pw_wrong") { +print < + ACHTUNG! + +
+ Deine beiden Passworteingaben stimmen nicht überein. Bitte geb das Passwort erneuert an um sicherzugehen, daß + kein falsches Passwort abgespeichert wird ! +
+
+END +} elsif ($reload eq "alias_prohibited") { +print < + ACHTUNG! + +
+ Dein gewählter Benutername "$alias" enthält illegale Zeichen. Bitte versuch einen anderen Benutzernamen! +
+
+END +} else { +print < + Hier kannst Du Dich registrieren. Bitte beachte, daß die Passworteingabefelder übereinstimmen! + +
+END +} +print < + +
+ Dein Alias: + + (Muß angegeben werden) + +
+ +
+
+
+ Dein gewünschtes Passwort: +
+ +
+
+
+ Geb hier Dein Passwort erneuert ein: +
+ +
+
+ + + +
+ +
+
+ Um den Chat zu betreten müssen die Daten nach der Registration auf der Startseite erneuert bestätigt werden ! +
+
+ + + +END +} + +sub checklogin { # Überprüfen, ob die Login-Daten korrekt sind. + my $lognotexists = "true"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = ; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = ; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + &write_file_new("data/online/ident/$alias"); + print DATEI $ENV{'REMOTE_ADDR'}; + close DATEI; + &write_file_new("data/user/lastlogin/$alias"); + print DATEI time; + close DATEI; + &frameset_html; + exit; + } else { + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("($hours:$min:$sec) $alias [$number] hat sich soeben als neuer Benutzer registriert :-) ..."); + &login_html; +} + +sub frameset_html { +print < + + + $title - Created & Copyright by Paul C. Bütow + + + + + + + + + + + + +END +} diff --git a/0.2.6a/main.pl b/0.2.6a/main.pl new file mode 100644 index 0000000..a59800d --- /dev/null +++ b/0.2.6a/main.pl @@ -0,0 +1,698 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden + +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "input_html") { + &input_html; +} elsif ($var eq "reload_html") { + &reload_html; +} elsif ($var eq "post_msg") { + &post_msg; +} elsif ($var eq "change_room") { + &change_room; +} else { + &error("Parameter fehlt"); +} + +sub input_html { # Eingabemaske für den Chat. + if ($tmp eq "login") { + &remove_rooms; + &zeit; + &post("($hours:$min:$sec) $alias hat den Chat betreten ..."); + } + my $whisper = @_; + $whisper = $q->param('whisper') if ($whisper == 0); +print < + + + + +
+END + print < + + + + + + + + + + + +END +} + +sub reload_html { # Wird neugeladen, wenn eine Nachricht getextet wird! + my ($whisper,$action) = @_; + print ""; + print + $q->end_html; +} + +sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde. + if ($tmp eq "noaway") { + &zeit; + &post("($hours:$min:$sec) $alias meldet sich zurück ... "); + &post(""); + } + $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren + if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht + $msg = "$alias: ".$msg.""; + &reload_html($id,$tmp); # -> Action=none, Whisper=$id, $tmp =? noaway + &secure_checkip($alias,1); + &post($msg); + } else { + &secure_checkip($alias,2); + &cmd($msg); + } +} + +sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können. + $_[0] = $_[0]." "; + $_[0] = substr($_[0], 1, length($_[0])-1); + my @cmd = split(/ /, $_[0]); + my $cmd = substr($_[0],0 , index($_[0], " ")); + my ($whisper,$action) = ($id); +#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< +#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< + if ($cmd eq "about") { + &post_prv("$alias","Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k."); +#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< + } elsif ($cmd eq "away") { + if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde + my $away_msg = ""; + } + for ($i=1; $i <= $#cmd; $i++) { + $away_msg = $away_msg." ".$cmd[$i]; + } + &zeit; + &post("($hours:$min:$sec) $alias meldet sich ab ($away_msg ) ..."); + &reload_html($whisper,"away"); + exit; +#############>- EIGENEN CHATBILDSCHIRM LÖSCHEN -< + } elsif ($cmd eq "clear") { + &post_prv("$alias",""); + &reload_html($whisper); + exit; +#############>- FARBEN WECHSELN -< + } elsif ($cmd eq "col") { + $col = $cmd[1]; + my $tmpsecol = $cmd[2]; + if ($tmpsecol eq "") { + $secol = $col + } else { + $secol = $tmpsecol; + } + &read_file("data/user/options/$alias"); + my @pro = ; + close DATEI; + &write_file_new("data/user/options/$alias"); + print DATEI $pro[0]."".$col."\n".$secol; + close DATEI; + &zeit; + &post("($hours:$min:$sec) $alias hat die Farbe gewechselt ..."); + &reload_html($whisper,"change_colors"); + exit; +#############>- AKTUELLES DATUM UND URZEIT AUSGEBEN -< + } elsif ($cmd eq "date") { + &zeit; + &post_prv("$alias","Heute ist der $day.$month. Jahr $year. Es ist genau $hours:$min Uhr und $sec Sekunden."); + &reload_html($whisper); + exit; +#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< + } elsif ($cmd eq "j") { + &change_room("j",$cmd[1],$room); + &reload_html($whisper,"change_room"); + exit; +#############>- HANDELN -< + } elsif ($cmd eq "me" || $cmd eq "m") { + for ($i=1; $i <= $#cmd; $i++) { + $me_msg = $me_msg." ".$cmd[$i]; + } + if ($cmd eq "m") { + &post("$alias $me_msg"); + } else { + &post("$alias $me_msg"); + } + &reload_html($whisper); + exit; +#############>- MEMO SCHREIBEN -< + } elsif ($cmd eq "memo") { + my $alias2memo = $cmd[1]; + &list_dir("data/user/options"); + foreach(@dir) { + if(-f "data/user/options/$alias2memo") { + for ($i=2; $i <= $#cmd; $i++) { + $memo_msg = $memo_msg." ".$cmd[$i]; + } + &post_prv("$alias","$alias2memo wurde folgende memo erfolgreich hinterlassen: $memo_msg"); + &zeit; + &write_file("data/user/memos/$alias2memo"); + print DATEI "($day.$month. - $hours:$min:$sec) $alias hat Dir eine Memo hinterlassen: $memo_msg
"; + close DATEI; + &reload_html($whisper); + exit; + } + } + &post_prv("$alias","$alias2memo existiert in der Datenbank nicht !"); + &reload_html($whisper); + exit; +#############>- FLÜSTERN ( Auch mit '/' ) -< + } elsif ($cmd eq "msg" || $cmd eq "") { + my ($alias2post,$msg2post) = ($cmd[1],""); + if ($cmd eq "msg") { + for ($i=2; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + $action = "whisper"; + } else { + $alias2post = $id; + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } + &list_dir("data/online/users"); + foreach(@dir) { + if ($_ eq $alias2post) { + &write_file("data/msgs/$alias2post"); + print DATEI "$alias flüstert =>$msg2post
\n"; + close DATEI; + &write_file("data/msgs/$alias"); + print DATEI "Zu $alias2post geflüstert =>$msg2post
\n"; + close DATEI; + &reload_html($alias2post,$action); + exit; + } + } + &post_prv("$alias","$alias2post ist momentan nicht anwesend !"); +#############>- DAS SYSTEM VERLASSEN -< + } elsif ($cmd eq "q") { + &post_prv("$alias",""); + sleep 2; + &remove_online($alias,$room); + &secure_removeip($alias); + exit; +#############>- SCHREIEN -< + } elsif ($cmd eq "s") { + my ($msg2scream,$msg2post); + for ($i=1; $i <= $#cmd; $i++) { + $msg2scream = $msg2scream." ".$cmd[$i]; + } + $msg2post = "\U$msg2scream"; + &post("$alias schreit: ".$msg2post.""); + &reload_html($whisper); + exit; +#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< +} elsif ($cmd eq "w") { + &list_dir("data/online/rooms/$room"); + &read_file("data/online/rstat/$room"); + my @rstat = ; + close DATEI; + my $door = "[Abgesperrt!]" if ($rstat[0] eq "1\n"); + my ($is,$nr) = ("t",0); + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $personen = $personen." ".$_; + $nr++; + } + } + &post_prv("$alias","$room $door ($nr) [".$rstat[1]."] : $personen"); + &reload_html($whisper); + exit; + #############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< + } elsif ($cmd eq "wc" || $cmd eq "wc/") { + $raum = $cmd[1]; + if ($raum eq "" && $cmd eq "wc") { + &list_dir("data/online/users"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/users/$_"); + } + my $nr = ($#dir-1); + my ($nrs,$is) = ("","ist"); + if ($nr != 1) { + $nrs = "en"; + $is = "sind"; + } + &post_prv("$alias","$nr Person$nrs $is insgesamt eingelogt: $personen"); + } elsif ($raum eq "" && $cmd eq "wc/") { + my $msg2post; + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + &list_dir("data/online/rooms/$_",2); + &read_file("data/online/rstat/$_"); + my @rstat = ; + close DATEI; + my $door = "[Abgesperrt!]" if ($rstat[0] eq "1\n"); + my $nr = $#dir2-1; + $msg2post = $msg2post."$_ $door ($nr) [".$rstat[1]."] "; + foreach $chatter (@dir2) { + if (-f "data/online/rooms/$_/$chatter") { + $msg2post = $msg2post."$chatter "; + } + } + print ""; + } + } + &post_prv("$alias","Folgende Räume sind offen:$msg2post
"); + } elsif ($raum ne "") { + my $personen; + &list_dir("data/online/rooms/$raum"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_"); + } + my ($nr,$is) = (($#dir-1),"t"); + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias"," $nr Person$nrs befinde$is sich im Raum \"$raum\": $personen"); + } + &reload_html($whisper); + exit; +#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< + } elsif ($cmd eq "wj" || $cmd eq "ju") { + my $alias2search = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum"); + foreach $user (@dir2) { + if (-f "data/online/rooms/$raum/$user") { + if ($user eq $alias2search) { + if ($cmd eq "wj") { + &post_prv("$alias","$alias2search befindet sich im Raum \"$raum\" !"); + } else { + &change_room("ju",$raum,$room,$alias2search); + } + &reload_html($whisper,"change_room"); + exit; + } + } + } + } + &post_prv("$alias","$alias2search ist nicht eingelogt !"); + &reload_html($whisper); + exit; +#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -< + } elsif ($cmd eq "l") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $lock = "0\n"; + &zeit; + if ($room eq "Cyberbar") { + &post("($hours:$min:$sec) $alias sperrt den Raum ohne Erfolg ab ..."); + } else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post("($hours:$min:$sec) $alias sperrt den Raum ab ..."); + } else { + &post("($hours:$min:$sec) $alias sperrt den Raum auf ..."); + } + for ($i=1;$i<=$#r_stat;$i++) { + $lock = $lock.$r_stat[$i]; + } + write_file_new("data/online/rstat/$room"); + print DATEI $lock; + close DATEI; + } + } + &reload_html($whisper); + exit; +#############>- RAUMBESETZER ERNENNEN -< + } elsif ($cmd eq "su") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $alias2su = $cmd[1]; + &list_dir("data/online/rooms/$room"); + foreach(@dir) { + if ($_ eq $alias2su) { + &read_file("data/online/rstat/$room"); + my @rstat = ; + close DATEI; + &hirachie($alias2su); + &prove_besetzer($alias2su,$room); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + &reload_html($whisper); + &post_prv($alias,"$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)"); + exit; + } + &zeit; + &post("($hours:$min:$sec) $alias ernennt \"$alias2su\" zum Raumbesetzer ..."); + &write_file("data/online/rstat/$room"); + print DATEI $alias2su."\n"; + close DATEI; + &reload_html($whisper); + exit; + } + } + &post_prv($alias,"$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)"); + } + &reload_html($whisper); + exit; +#############>- RAUMBESETZER ENTNENNEN -< + } elsif ($cmd eq "rsu") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $alias2rsu = $cmd[1]; + &read_file("data/online/rstat/$room"); + my @rstat = ; + close DATEI; + &prove_besetzer($alias2rsu,$room); + if ($r_besetzer eq "true") { + &zeit; + &post("($hours:$min:$sec) $alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ..."); + my $newrstat = $rstat[0].$rstat[1]; + for ($i=2;$i<=$#r_stat;$i++) { + $newrstat = $newrstat.$r_stat[$i] if ($r_stat[$i] ne $alias2rsu."\n"); + } + &write_file_new("data/online/rstat/$room"); + print DATEI $newrstat; + close DATEI; + } else { + &post_prv($alias,"$alias2rsu ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !"); + } + } + &reload_html($whisper); + exit; +#############>- RAUM EIN THEMA GEBEN -< + } elsif ($cmd eq "t") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $theme; + for ($i=1; $i <= $#cmd; $i++) { + $theme = $theme." ".$cmd[$i]; + } + &zeit; + &post("($hours:$min:$sec) $alias gibt dem Raum das Thema ( $theme ) ..."); + $theme = $r_stat[0].$theme."\n"; + for ($i=2;$i<=$#r_stat;$i++) { + $theme = $theme.$r_stat[$i]; + } + write_file_new("data/online/rstat/$room"); + print DATEI $theme; + close DATEI; + } + &reload_html($whisper); + exit; +#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- ALIAS VERBANNEN BZW. ENTBANNEN -< + } elsif ($cmd eq "ban" || $cmd eq "rban") { + &hirachie($alias); + if ($hirachie eq "ow") { + my ($alias2handle,$registriert) = $cmd[1]; + &list_dir("data/user/options"); + foreach(@dir) { + $registriert = "true" if ($_ eq $alias2handle); + } + if ($registriert ne "true") { + if ($cmd eq "ban") { + if ($alias2handle ne "") { + &post_prv("$alias","$alias2handle existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !"); + } else { + &read_file("data/ban"); + my @banned = ; + my ($benutzer); + my $nr = $#banned+1; + close DATEI; + foreach(@banned) { + $benutzer = $benutzer." ".$_; + } + &post_prv("$alias","Folgende Benutzer sind verbannt [$nr]: $benutzer"); + } + } else { + &post_prv("$alias","$alias2handle existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !"); + } + &reload_html($whisper); + exit; + } + &read_file("data/ban"); + my @banlist = ; + close DATEI; + foreach(@banlist) { + if ($_ eq "$alias2handle\n") { + if ($cmd eq "ban") { + &post_prv("$alias","$alias2handle ist bereits verbannt worden !"); + } else { + my $banned = "false"; + foreach(@banlist) { + $banned = "true" if ($_ eq "$alias2handle\n"); + } + if ($banned eq "true") { + my @newbanlist; + foreach(@banlist) { + push @newbanlist,$_ if ($_ ne "$alias2handle\n"); + } + &write_file_new("data/ban"); + print DATEI @newbanlist; + close DATEI; + &post_prv("$alias","$alias2handle wurde soeben \"entbannt\" !"); + } + } + &reload_html($whisper); + exit; + } + } + if ($cmd eq "ban") { + &hirachie($alias2handle); + if ($hirachie ne "ow") { + &write_file("data/ban"); + print DATEI "$alias2handle\n"; + close DATEI; + &post_prv("$alias","$alias2handle wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !"); + } else { + &post_prv("$alias","$alias2handle