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.4.7a2 | |
| parent | 2860b03f00e48264ed15c132ad90b240ebe6070b (diff) | |
tagging ychat-perl-legacyychat-perl-legacy
Diffstat (limited to '0.4.7a2')
| -rw-r--r-- | 0.4.7a2/CREDITS.txt | 30 | ||||
| -rw-r--r-- | 0.4.7a2/README.txt | 24 | ||||
| -rw-r--r-- | 0.4.7a2/SETUP.txt | 136 | ||||
| -rw-r--r-- | 0.4.7a2/TODO.txt | 36 | ||||
| -rw-r--r-- | 0.4.7a2/UPDATES.txt | 192 | ||||
| -rw-r--r-- | 0.4.7a2/colors.sno | 290 | ||||
| -rw-r--r-- | 0.4.7a2/config.pm | 247 | ||||
| -rw-r--r-- | 0.4.7a2/help.sno | 57 | ||||
| -rw-r--r-- | 0.4.7a2/htdocs.pl | 241 | ||||
| -rw-r--r-- | 0.4.7a2/index.pl | 421 | ||||
| -rw-r--r-- | 0.4.7a2/input.pl | 194 | ||||
| -rw-r--r-- | 0.4.7a2/main.pl | 912 | ||||
| -rw-r--r-- | 0.4.7a2/main2.pl | 594 | ||||
| -rw-r--r-- | 0.4.7a2/online.pl | 71 | ||||
| -rw-r--r-- | 0.4.7a2/push.pl | 112 | ||||
| -rw-r--r-- | 0.4.7a2/setup.sh | 50 | ||||
| -rw-r--r-- | 0.4.7a2/y.gif | bin | 0 -> 5408 bytes | |||
| -rw-r--r-- | 0.4.7a2/yIntro.swf | bin | 0 -> 15455 bytes | |||
| -rw-r--r-- | 0.4.7a2/ySymbol.swf | bin | 0 -> 9548 bytes | |||
| -rw-r--r-- | 0.4.7a2/y_.gif | bin | 0 -> 1518 bytes |
20 files changed, 3607 insertions, 0 deletions
diff --git a/0.4.7a2/CREDITS.txt b/0.4.7a2/CREDITS.txt new file mode 100644 index 0000000..6f2a6cc --- /dev/null +++ b/0.4.7a2/CREDITS.txt @@ -0,0 +1,30 @@ +########################### yChat.de CREDITS ################################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+
+Vielen Dank an alle Personen, dir mit geholfen haben ( und immernoch helfen )
+yChat besser zu machen:
+
+ - Andreas Buchwald aka Anklepper, für ...
+ ... die Programmierung des "Nach-UntenScroll-JavaScripts", des
+ "Nachrichten-Verlauf-JavaScripts" im Texteingabeframe.
+ ... die technische Umsetzung, daß sich das Inputframe bei jedem
+ Textposting nicht wieder reloadet.
+ ... ein nettes JavaScript, welches erlaubt, Formularwerte
+ frameübergreifend zu ändern.
+ ... die Erstellung der Flashanimationen.
+ ... die Programmierung der Auto-Away- und der Auto-Logout Funktion.
+ ( www.anklepper.de ).
+
+ - Dave aka Truhe, für ...
+ ... die Erstellung der Farbtabelle unter Chatoptionen inkl.
+ Auswähl-JavaScript!
+ ... die Erstellung einiger CSS.
+ ... die Unterstützung der Umsetzung der Auto-Away- und Auto-Logout
+ Funktion.
+ ( maligree.yi.org )
+
+ - Florian Bütow aka Coke, für die Programmierung des Top 20 Ranking Skripts
+ in PHP4 !
+
+ - Larry Wall, für die Erfindung von Perl !
\ No newline at end of file diff --git a/0.4.7a2/README.txt b/0.4.7a2/README.txt new file mode 100644 index 0000000..b67f15e --- /dev/null +++ b/0.4.7a2/README.txt @@ -0,0 +1,24 @@ +############################## yChat.de README ##############################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.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 www.home.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 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.
\ No newline at end of file diff --git a/0.4.7a2/SETUP.txt b/0.4.7a2/SETUP.txt new file mode 100644 index 0000000..b1e17f8 --- /dev/null +++ b/0.4.7a2/SETUP.txt @@ -0,0 +1,136 @@ +############################## yChat.de SETUP ###############################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.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
+einrichten:
+
+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 => Generiert dynamische HTML-Inhalte
+index.pl => Startskript (Registrierung, Login, Chatframeset)
+input.pl => Skript für das Chateingabeframe
+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
+README.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+CREDITS.txt => Personen, die geolfen haben yChat zu proggen
+SETUP.txt => Dieses Dokument
+colors.sno => Datei beinhaltet alle Farben in hex. für die Chatoptionen
+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 und wie lange die Chatter schon online waren:
+ ./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 abgespeichert, wann der der jew. benutzer zum letzten mal das
+ System betreten hat.
+ ./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 PIDs (Process IDs) der Chatter in den jew. Räumen.
+ ./cgi-bin/yChat/data/online/pids/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern und TempIDs der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Alle Grafikdateien (+.gif und *.jpg) sollten in ein nicht-CGI-BIN-Verzeichnis
+kopiert werden. Z.B. nach ./yChat/.
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden.
+Allerdings sollten die Copyright Hinweise und die Versionsnummern nicht
+manipuliert werden.
+
+Im Folgendem werde ich ein wenig auf die im yChat-Sourcecode oft verwendeten .
+Variablen eingehen:
+
+ $var => Sagt dem Skript, wie es gestartet werden soll.
+ $alias => Teilt dem Skript den Benutzername mit.
+ $tmpid => Beim einloggen in den Chat wird für den Benutzer eine
+ temporäre ID generiert. Diese wird so wohl in der Variable
+ $tmpid als auch in eine Datei geschrieben. Handelt der
+ Benutzer, so wird vom Skript die Variable $tmpid mit dem
+ Eintrag in der Datei verglichen. Sind beide Werte
+ identisch, dann wird die Handlung des Benutzers
+ ausgeführt. Stimmen die Werte nicht überein, dann wird
+ die Fehlermeldung, daß der Benutzer die falsche $tmpid hat
+ um mit $alias zu handeln,ausgegeben und das Skript beendet
+ sich. Dies ist eine Sicherheitsmaßnahme welche verbietet,
+ mit fremden Benutzernamen im System zu handeln.
+ $room => Sagt dem Skript, wie der aktuelle Raumname lautet.
+ $col => Sagt dem Skript, wie die aktuelle Chatfarbe des Nicks von
+ $alias lautet.
+ $seccol => Sagt dem Skript, wie die aktuelle Chatfarbe der Schrift von
+ $alias lautet.
+ $msg => Beinhaltet den von $alias zu postenden Text im Chat.
+ Hiervon wird auch in den Benutzergästebüchern und im
+ Benutzerboard Gebrauch gemacht.
+ $whisper => Beinhaltet den Benutzernamen, zu dem $alias zuletzt
+ geflüstert hat.
+ $id und $tmp => Temporäre Variablen zwecks Übermittlung diverser Daten.
+ $pw => Wird im Skript index.pl verwendet um das Zugangspassword
+ zu übermitteln.
+
+Viel Spaß beim Chatten ...
\ No newline at end of file diff --git a/0.4.7a2/TODO.txt b/0.4.7a2/TODO.txt new file mode 100644 index 0000000..9c5ecb8 --- /dev/null +++ b/0.4.7a2/TODO.txt @@ -0,0 +1,36 @@ +############################## yChat.de TODO ################################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+
+Folgende Funktionen werden demnächst evtl. in yChat integriert:
+
+ - In den Chatoptionen sollen diverse Einstellungen des Nachrichtenverlaufes
+ vorgenommen werden können.
+
+ - 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.
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach dem
+ Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Linux- und Windows-yChat-Client soll programmiert werden. Mit diesem läßt
+ sich dann im yChat chatten, ohne sich über http://www.yChat.de eingelogt zu
+ haben. Der Client soll gleicheitig auch als Messenger (ICQ-Like) fungieren
+ können (yChat-Messenger bzw. yCM).
+
+ - 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 mail@paulbuetow.de :-)
+
+
+www.yCm.de
\ No newline at end of file diff --git a/0.4.7a2/UPDATES.txt b/0.4.7a2/UPDATES.txt new file mode 100644 index 0000000..d165c93 --- /dev/null +++ b/0.4.7a2/UPDATES.txt @@ -0,0 +1,192 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.4.7 auf 0.4.7a2 (22.01.01)
+ - Top 20 Ranking Liste in PHP4.
+ - Überarbeitung des Flash-Intros.
+
+Update von 0.4.6 auf 0.4.7 (20.01.01)
+ - Auto-Away: Ist ein Chatter 5 Minuten inaktiv, dann erscheint im
+ aktuellen Raum die Nachricht "Alias wurde vom System
+ abgemeldet ..." . Bei Wiederaufnahme des Chats, meldet sich Alias
+ wieder zurück.
+ - Auto-Logout: Ist ein Chatter 20 Minuten inaktiv, dann wird dieser
+ aus dem System automatisch ausgelogt.
+ - Neue CSS für die Formulareingabefelder und dem Chat-Menü.
+ (Funktioniert allerdings nicht mit NN4.x, hier werden alle
+ Formulareingabefelder ohne CSS-Definitionen angezeigt.)
+
+Update von 0.4.5 auf 0.4.6 (18.01.01)
+ - Verbesserung: Beim Posten einer neuen Chatnachricht wird sogleich
+ ein Signal an alle laufenden Chatprozesse (PIDs) gesendet, so daß
+ diese aufgefordert werden, aus der Nachrichtendatei die neuen
+ Zeilen einzulesen. Das Push-Skript (push.pl) muß so nicht jede
+ Sekunde prüfen, ob neue Nachrichten da sind, da es diese
+ Information über das Signal erhält. Das Push-Skript verbraucht nun
+ weniger Prozessorleistung, da es jetzt 15 Sekunden lang
+ "dauerschläft" (sleep 15;), lediglich einen <!--PING--> versendet
+ und dann weiter schläft usw. Beendet sich push.pl, oder wird ein
+ Raum gewechselt, dann wird auch die PID aus der PID-Liste des
+ aktuellen Raums gelöscht und ggf. neu geschrieben.
+ Die Dateien "./data/online/pids/*" beinhalten alle aktuellen PIDs,
+ wobei * der jew. Raum ist.
+
+Update von 0.4.4 auf 0.4.5 (16.01.01)
+ - Jeder Chatraum hat nun eine globale Nachrichtendatei. Bisher
+ existierte für jeden Chatter enzelnd eine. Die Nachrichten werden
+ nun schneller gepostet.
+ - Neue Wächterbefehle:
+ "/st Raum Thema" ermöglicht das Ändern das Themas eines anderen
+ Raums.
+ "/sl Raum" ermöglicht das auf- und absperren eines anderen Raums.
+ - Nur noch Oberwächter können die Chatlogs lesen.
+ - Referenzierung der Variable $msg in main.pl.
+ - Flashanimationen.
+
+Update von 0.4.3 auf 0.4.4 (04.01.01)
+ - Optimiertung aller Chatbefehle.
+ - Neuer WÄ-Befehl: Mit "/ss Raum Nachricht" wird aus dem aktuellen
+ Raum heraus in den angegebenen Raum eine beliebige Nachricht
+ gerufen.
+ - Das Skript main.pl wurde in zwei verschiedene Skripts unterteilt:
+ main.pl => Beinhaltet hauptsächlich die Chatbefehle
+ input.pl => Beinhaltet das zu generierende Chateingabeframe.
+ - Das Chateingabeframe wird nun nie wieder reloadet. (Dies geschah
+ bisher noch nach Ausführung der Befehle /col /j /ju /msg und nach
+ Änderung der Chateinstellungen und erwies sich als recht nervige
+ Angelegenheit.) JavaScript macht es möglich.
+ - Überarbeitung und Erweiterung der Dokudateien.
+
+Update von 0.4.2 auf 0.4.3 (30.12.2k)
+ - Optimierung der Zuweisung der Variabeln im Programmcode:
+ Variablen werden nun wirklich nur deffiniert, wenn diese auch
+ erforderlich sind.
+ - Komplette Neuprogrammierung diverser Subs (nun leistungsfähiger)
+ - Bei Aufrug der Login-Seite wird der gesamte Chat auf leerstehende
+ Räume und "alte" Chatter überprüft und ggf. entfernt.
+ - Verbesserung diverser JavaScript-Codes.
+ - Editiert ein Benutzer sein Profil, so wird dies mit der Meldung
+ "Alias hat sein Profil geändert ..." bekanntgegeben.
+ - Mit "/t" ohne weiteren Text erscheint die Nachricht "Alias hat das
+ Thema des Raums gelöscht ..."
+ - Hinzufügung diverser Administratorbefehle: "/pw Alias" zeigt
+ Zugangspassword von Alias an. "/ow Alias" ernennt Alias zum OW.
+ "/row Alias" entzieht Alias die OW-Rechte.
+
+Update von 0.4.1 auf 0.4.2 (25.12.2k)
+ - Im Texteingabeformular werden nun per JavaScript die letzten 10
+ Postings zwischengespeichert und können per Drop-Down-Menü
+ wieder in das Submittextfeld geladen werden um erneuert getextet
+ zu werden.
+ - Neues Design.
+ - Diverse Dateien wurden umbenannt:
+ INSTALL.txt -> SETUP.txt
+ LIESMICH.txt -> README.txt
+ - Die Datei CREDITS.txt wurde angelegt und somit auch die URL
+ www.credits.yChat.de.
+
+Update von 0.4.0 auf 0.4.1 (22.12.2k)
+ - Design wurde geändert.
+ - Unter "Optionen" ist nun eine komplette Farbtabelle eingebaut.
+ - Folgende Oberwächterbefehle wurden nun auch für normale Wächter
+ freigegeben: /ip /ban /rban.
+
+Update von 0.2.6 auf 0.4.0 (19.12.2k)
+ - Der berüchtigte "IP-Bug" wurde beseitigt! Und zwar wurden TempIDs
+ eingeführt => Eine dauerhafte Überprüfung der Benutzer-IP-Nummer
+ ist also nicht mehr notwendig.
+ - Die totale Chat-Online-Zeit wird protokolliert und kann jew. mit
+ "/online Alias" aufgerufen werden. Die Onlinezeit wird alle 20 Sek.
+ aktualisiert.
+ - Neue Befehle: "/seen Alias" zeigt an, vor wieviel St. sich Alias
+ zuletzt in das System eingelogt hat. Der Befehle "/rmgb" entfernt
+ alle Einträge des eigenen Benutzergästebuchs im Profil.
+
+Update von 0.2.5 auf 0.2.6 (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 (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.4.7a2/colors.sno b/0.4.7a2/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.7a2/colors.sno @@ -0,0 +1,290 @@ + <table cellspacing=0 cellpadding=5 border=0> + <tr> + <td bgcolor="000000"><span style="color:#FFFFFF; text-decoration:line-through;">000000</span></td> + <td bgcolor="000033"><span style="color:#FFFFFF; text-decoration:line-through;">000033</span></td> + <td bgcolor="000066"><span style="color:#FFFFFF; text-decoration:line-through;">000066</span></td> + <td bgcolor="000099"><span style="color:#FFFFFF; text-decoration:line-through;">000099</span></td> + <td bgcolor="0000CC"><span style="color:#FFFFFF; text-decoration:line-through;">0000CC</span></td> + <td bgcolor="0000FF"><a href="javascript:insertcode('0000FF');" style="color:#FFFFFF;">0000FF</a></td> + </tr> + <tr> + <td bgcolor="003300"><span style="color:#FFFFFF; text-decoration:line-through;">003300</span></td> + <td bgcolor="003333"><span style="color:#FFFFFF; text-decoration:line-through;">003333</span></td> + <td bgcolor="003366"><span style="color:#FFFFFF; text-decoration:line-through;">003366</span></td> + <td bgcolor="003399"><a href="javascript:insertcode('003399');" style="color:#FFFFFF;">003399</a></td> + <td bgcolor="0033CC"><a href="javascript:insertcode('0033CC');" style="color:#FFFFFF;">0033CC</a></td> + <td bgcolor="0033FF"><a href="javascript:insertcode('0033FF');" style="color:#FFFFFF;">0033FF</a></td> + </tr> + <tr> + <td bgcolor="006600"><span style="color:#FFFFFF; text-decoration:line-through;">006600</span></td> + <td bgcolor="006633"><span style="color:#FFFFFF; text-decoration:line-through;">006633</span></td> + <td bgcolor="006666"><a href="javascript:insertcode('006666');" style="color:#FFFFFF;">006666</a></td> + <td bgcolor="006699"><a href="javascript:insertcode('006699');" style="color:#FFFFFF;">006699</a></td> + <td bgcolor="0066CC"><a href="javascript:insertcode('0066CC');" style="color:#FFFFFF;">0066CC</a></td> + <td bgcolor="0066FF"><a href="javascript:insertcode('0066FF');" style="color:#FFFFFF;">0066FF</a></td> + </tr> + <tr> + <td bgcolor="009900"><a href="javascript:insertcode('009900');" style="color:#FFFFFF;">009900</a></td> + <td bgcolor="009933"><a href="javascript:insertcode('009933');" style="color:#FFFFFF;">009933</a></td> + <td bgcolor="009966"><a href="javascript:insertcode('009966');" style="color:#FFFFFF;">009966</a></td> + <td bgcolor="009999"><a href="javascript:insertcode('009999');" style="color:#FFFFFF;">009999</a></td> + <td bgcolor="0099CC"><a href="javascript:insertcode('0099CC');" style="color:#FFFFFF;">0099CC</a></td> + <td bgcolor="0099FF"><a href="javascript:insertcode('0099FF');" style="color:#FFFFFF;">0099FF</a></td> + </tr> + <tr> + <td bgcolor="00CC00"><a href="javascript:insertcode('00CC00');" style="color:#000000;">00CC00</a></td> + <td bgcolor="00CC33"><a href="javascript:insertcode('00CC33');" style="color:#000000;">00CC33</a></td> + <td bgcolor="00CC66"><a href="javascript:insertcode('00CC66');" style="color:#000000;">00CC66</a></td> + <td bgcolor="00CC99"><a href="javascript:insertcode('00CC99');" style="color:#000000;">00CC99</a></td> + <td bgcolor="00CCCC"><a href="javascript:insertcode('00CCCC');" style="color:#000000;">00CCCC</a></td> + <td bgcolor="00CCFF"><a href="javascript:insertcode('00CCFF');" style="color:#000000;">00CCFF</a></td> + </tr> + <tr> + <td bgcolor="00FF00"><a href="javascript:insertcode('00FF00');" style="color:#000000;">00FF00</a></td> + <td bgcolor="00FF33"><a href="javascript:insertcode('00FF33');" style="color:#000000;">00FF33</a></td> + <td bgcolor="00FF66"><a href="javascript:insertcode('00FF66');" style="color:#000000;">00FF66</a></td> + <td bgcolor="00FF99"><a href="javascript:insertcode('00FF99');" style="color:#000000;">00FF99</a></td> + <td bgcolor="00FFCC"><a href="javascript:insertcode('00FFCC');" style="color:#000000;">00FFCC</a></td> + <td bgcolor="00FFFF"><a href="javascript:insertcode('00FFFF');" style="color:#000000;">00FFFF</a></td> + </tr> + <tr> + <td bgcolor="330000"><span style="color:#FFFFFF; text-decoration:line-through;">330000</span></td> + <td bgcolor="330033"><span style="color:#FFFFFF; text-decoration:line-through;">330033</span></td> + <td bgcolor="330066"><span style="color:#FFFFFF; text-decoration:line-through;">330066</span></td> + <td bgcolor="330099"><a href="javascript:insertcode('330099');" style="color:#FFFFFF;">330099</a></td> + <td bgcolor="3300CC"><a href="javascript:insertcode('3300CC');" style="color:#FFFFFF;">3300CC</a></td> + <td bgcolor="3300FF"><a href="javascript:insertcode('3300FF');" style="color:#FFFFFF;">3300FF</a></td> + </tr> + <tr> + <td bgcolor="333300"><span style="color:#FFFFFF; text-decoration:line-through;">333300</span></td> + <td bgcolor="333333"><span style="color:#FFFFFF; text-decoration:line-through;">333333</span></td> + <td bgcolor="333366"><a href="javascript:insertcode('333366');" style="color:#FFFFFF;">333366</a></td> + <td bgcolor="333399"><a href="javascript:insertcode('333399');" style="color:#FFFFFF;">333399</a></td> + <td bgcolor="3333CC"><a href="javascript:insertcode('3333CC');" style="color:#FFFFFF;">3333CC</a></td> + <td bgcolor="3333FF"><a href="javascript:insertcode('3333FF');" style="color:#FFFFFF;">3333FF</a></td> + </tr> + <tr> + <td bgcolor="336600"><a href="javascript:insertcode('336600');" style="color:#FFFFFF;">336600</a></td> + <td bgcolor="336633"><a href="javascript:insertcode('336633');" style="color:#FFFFFF;">336633</a></td> + <td bgcolor="336666"><a href="javascript:insertcode('336666');" style="color:#FFFFFF;">336666</a></td> + <td bgcolor="336699"><a href="javascript:insertcode('336699');" style="color:#FFFFFF;">336699</a></td> + <td bgcolor="3366CC"><a href="javascript:insertcode('3366CC');" style="color:#FFFFFF;">3366CC</a></td> + <td bgcolor="3366FF"><a href="javascript:insertcode('3366FF');" style="color:#FFFFFF;">3366FF</a></td> + </tr> + <tr> + <td bgcolor="339900"><a href="javascript:insertcode('339900');" style="color:#FFFFFF;">339900</a></td> + <td bgcolor="339933"><a href="javascript:insertcode('339933');" style="color:#FFFFFF;">339933</a></td> + <td bgcolor="339966"><a href="javascript:insertcode('339966');" style="color:#FFFFFF;">339966</a></td> + <td bgcolor="339999"><a href="javascript:insertcode('339999');" style="color:#FFFFFF;">339999</a></td> + <td bgcolor="3399CC"><a href="javascript:insertcode('3399CC');" style="color:#FFFFFF;">3399CC</a></td> + <td bgcolor="3399FF"><a href="javascript:insertcode('3399FF');" style="color:#FFFFFF;">3399FF</a></td> + </tr> + <tr> + <td bgcolor="33CC00"><a href="javascript:insertcode('33CC00');" style="color:#000000;">33CC00</a></td> + <td bgcolor="33CC33"><a href="javascript:insertcode('33CC33');" style="color:#000000;">33CC33</a></td> + <td bgcolor="33CC66"><a href="javascript:insertcode('33CC66');" style="color:#000000;">33CC66</a></td> + <td bgcolor="33CC99"><a href="javascript:insertcode('33CC99');" style="color:#000000;">33CC99</a></td> + <td bgcolor="33CCCC"><a href="javascript:insertcode('33CCCC');" style="color:#000000;">33CCCC</a></td> + <td bgcolor="33CCFF"><a href="javascript:insertcode('33CCFF');" style="color:#000000;">33CCFF</a></td> + </tr> + <tr> + <td bgcolor="33FF00"><a href="javascript:insertcode('33FF00');" style="color:#000000;">33FF00</a></td> + <td bgcolor="33FF33"><a href="javascript:insertcode('33FF33');" style="color:#000000;">33FF33</a></td> + <td bgcolor="33FF66"><a href="javascript:insertcode('33FF66');" style="color:#000000;">33FF66</a></td> + <td bgcolor="33FF99"><a href="javascript:insertcode('33FF99');" style="color:#000000;">33FF99</a></td> + <td bgcolor="33FFCC"><a href="javascript:insertcode('33FFCC');" style="color:#000000;">33FFCC</a></td> + <td bgcolor="33FFFF"><a href="javascript:insertcode('33FFFF');" style="color:#000000;">33FFFF</a></td> + </tr> + <tr> + <td bgcolor="660000"><span style="color:#FFFFFF; text-decoration:line-through;">660000</span></td> + <td bgcolor="660033"><span style="color:#FFFFFF; text-decoration:line-through;">660033</span></td> + <td bgcolor="660066"><a href="javascript:insertcode('660066');" style="color:#FFFFFF;">660066</a></td> + <td bgcolor="660099"><a href="javascript:insertcode('660099');" style="color:#FFFFFF;">660099</a></td> + <td bgcolor="6600CC"><a href="javascript:insertcode('6600CC');" style="color:#FFFFFF;">6600CC</a></td> + <td bgcolor="6600FF"><a href="javascript:insertcode('6600FF');" style="color:#FFFFFF;">6600FF</a></td> + </tr> + <tr> + <td bgcolor="663300"><a href="javascript:insertcode('663300');" style="color:#FFFFFF;">663300</a></td> + <td bgcolor="663333"><a href="javascript:insertcode('663333');" style="color:#FFFFFF;">663333</a></td> + <td bgcolor="663366"><a href="javascript:insertcode('663366');" style="color:#FFFFFF;">663366</a></td> + <td bgcolor="663399"><a href="javascript:insertcode('663399');" style="color:#FFFFFF;">663399</a></td> + <td bgcolor="6633CC"><a href="javascript:insertcode('6633CC');" style="color:#FFFFFF;">6633CC</a></td> + <td bgcolor="6633FF"><a href="javascript:insertcode('6633FF');" style="color:#FFFFFF;">6633FF</a></td> + </tr> + <tr> + <td bgcolor="666600"><a href="javascript:insertcode('666600');" style="color:#FFFFFF;">666600</a></td> + <td bgcolor="666633"><a href="javascript:insertcode('666633');" style="color:#FFFFFF;">666633</a></td> + <td bgcolor="666666"><a href="javascript:insertcode('666666');" style="color:#FFFFFF;">666666</a></td> + <td bgcolor="666699"><a href="javascript:insertcode('666699');" style="color:#FFFFFF;">666699</a></td> + <td bgcolor="6666CC"><a href="javascript:insertcode('6666CC');" style="color:#FFFFFF;">6666CC</a></td> + <td bgcolor="6666FF"><a href="javascript:insertcode('6666FF');" style="color:#FFFFFF;">6666FF</a></td> + </tr> + <tr> + <td bgcolor="669900"><a href="javascript:insertcode('669900');" style="color:#000000;">669900</a></td> + <td bgcolor="669933"><a href="javascript:insertcode('669933');" style="color:#000000;">669933</a></td> + <td bgcolor="669966"><a href="javascript:insertcode('669966');" style="color:#000000;">669966</a></td> + <td bgcolor="669999"><a href="javascript:insertcode('669999');" style="color:#000000;">669999</a></td> + <td bgcolor="6699CC"><a href="javascript:insertcode('6699CC');" style="color:#000000;">6699CC</a></td> + <td bgcolor="6699FF"><a href="javascript:insertcode('6699FF');" style="color:#000000;">6699FF</a></td> + </tr> + <tr> + <td bgcolor="66CC00"><a href="javascript:insertcode('66CC00');" style="color:#000000;">66CC00</a></td> + <td bgcolor="66CC33"><a href="javascript:insertcode('66CC33');" style="color:#000000;">66CC33</a></td> + <td bgcolor="66CC66"><a href="javascript:insertcode('66CC66');" style="color:#000000;">66CC66</a></td> + <td bgcolor="66CC99"><a href="javascript:insertcode('66CC99');" style="color:#000000;">66CC99</a></td> + <td bgcolor="66CCCC"><a href="javascript:insertcode('66CCCC');" style="color:#000000;">66CCCC</a></td> + <td bgcolor="66CCFF"><a href="javascript:insertcode('66CCFF');" style="color:#000000;">66CCFF</a></td> + </tr> + <tr> + <td bgcolor="66FF00"><a href="javascript:insertcode('66FF00');" style="color:#000000;">66FF00</a></td> + <td bgcolor="66FF33"><a href="javascript:insertcode('66FF33');" style="color:#000000;">66FF33</a></td> + <td bgcolor="66FF66"><a href="javascript:insertcode('66FF66');" style="color:#000000;">66FF66</a></td> + <td bgcolor="66FF99"><a href="javascript:insertcode('66FF99');" style="color:#000000;">66FF99</a></td> + <td bgcolor="66FFCC"><a href="javascript:insertcode('66FFCC');" style="color:#000000;">66FFCC</a></td> + <td bgcolor="66FFFF"><a href="javascript:insertcode('66FFFF');" style="color:#000000;">66FFFF</a></td> + </tr> + <tr> + <td bgcolor="990000"><a href="javascript:insertcode('990000');" style="color:#FFFFFF;">990000</a></td> + <td bgcolor="990033"><a href="javascript:insertcode('990033');" style="color:#FFFFFF;">990033</a></td> + <td bgcolor="990066"><a href="javascript:insertcode('990066');" style="color:#FFFFFF;">990066</a></td> + <td bgcolor="990099"><a href="javascript:insertcode('990099');" style="color:#FFFFFF;">990099</a></td> + <td bgcolor="9900CC"><a href="javascript:insertcode('9900CC');" style="color:#FFFFFF;">9900CC</a></td> + <td bgcolor="9900FF"><a href="javascript:insertcode('9900FF');" style="color:#FFFFFF;">9900FF</a></td> + </tr> + <tr> + <td bgcolor="993300"><a href="javascript:insertcode('993300');" style="color:#FFFFFF;">993300</a></td> + <td bgcolor="993333"><a href="javascript:insertcode('993333');" style="color:#FFFFFF;">993333</a></td> + <td bgcolor="993366"><a href="javascript:insertcode('993366');" style="color:#FFFFFF;">993366</a></td> + <td bgcolor="993399"><a href="javascript:insertcode('993399');" style="color:#FFFFFF;">993399</a></td> + <td bgcolor="9933CC"><a href="javascript:insertcode('9933CC');" style="color:#FFFFFF;">9933CC</a></td> + <td bgcolor="9933FF"><a href="javascript:insertcode('9933FF');" style="color:#FFFFFF;">9933FF</a></td> + </tr> + <tr> + <td bgcolor="996600"><a href="javascript:insertcode('996600');" style="color:#FFFFFF;">996600</a></td> + <td bgcolor="996633"><a href="javascript:insertcode('996633');" style="color:#FFFFFF;">996633</a></td> + <td bgcolor="996666"><a href="javascript:insertcode('996666');" style="color:#FFFFFF;">996666</a></td> + <td bgcolor="996699"><a href="javascript:insertcode('996699');" style="color:#FFFFFF;">996699</a></td> + <td bgcolor="9966CC"><a href="javascript:insertcode('9966CC');" style="color:#FFFFFF;">9966CC</a></td> + <td bgcolor="9966FF"><a href="javascript:insertcode('9966FF');" style="color:#FFFFFF;">9966FF</a></td> + </tr> + <tr> + <td bgcolor="999900"><a href="javascript:insertcode('999900');" style="color:#000000;">999900</a></td> + <td bgcolor="999933"><a href="javascript:insertcode('999933');" style="color:#000000;">999933</a></td> + <td bgcolor="999966"><a href="javascript:insertcode('999966');" style="color:#000000;">999966</a></td> + <td bgcolor="999999"><a href="javascript:insertcode('999999');" style="color:#000000;">999999</a></td> + <td bgcolor="9999CC"><a href="javascript:insertcode('9999CC');" style="color:#000000;">9999CC</a></td> + <td bgcolor="9999FF"><a href="javascript:insertcode('9999FF');" style="color:#000000;">9999FF</a></td> + </tr> + <tr> + <td bgcolor="99CC00"><a href="javascript:insertcode('99CC00');" style="color:#000000;">99CC00</a></td> + <td bgcolor="99CC33"><a href="javascript:insertcode('99CC33');" style="color:#000000;">99CC33</a></td> + <td bgcolor="99CC66"><a href="javascript:insertcode('99CC66');" style="color:#000000;">99CC66</a></td> + <td bgcolor="99CC99"><a href="javascript:insertcode('99CC99');" style="color:#000000;">99CC99</a></td> + <td bgcolor="99CCCC"><a href="javascript:insertcode('99CCCC');" style="color:#000000;">99CCCC</a></td> + <td bgcolor="99CCFF"><a href="javascript:insertcode('99CCFF');" style="color:#000000;">99CCFF</a></td> + </tr> + <tr> + <td bgcolor="99FF00"><a href="javascript:insertcode('99FF00');" style="color:#000000;">99FF00</a></td> + <td bgcolor="99FF33"><a href="javascript:insertcode('99FF33');" style="color:#000000;">99FF33</a></td> + <td bgcolor="99FF66"><a href="javascript:insertcode('99FF66');" style="color:#000000;">99FF66</a></td> + <td bgcolor="99FF99"><a href="javascript:insertcode('99FF99');" style="color:#000000;">99FF99</a></td> + <td bgcolor="99FFCC"><a href="javascript:insertcode('99FFCC');" style="color:#000000;">99FFCC</a></td> + <td bgcolor="99FFFF"><a href="javascript:insertcode('99FFFF');" style="color:#000000;">99FFFF</a></td> + </tr> + <tr> + <td bgcolor="CC0000"><a href="javascript:insertcode('CC0000');" style="color:#FFFFFF;">CC0000</a></td> + <td bgcolor="CC0033"><a href="javascript:insertcode('CC0033');" style="color:#FFFFFF;">CC0033</a></td> + <td bgcolor="CC0066"><a href="javascript:insertcode('CC0066');" style="color:#FFFFFF;">CC0066</a></td> + <td bgcolor="CC0099"><a href="javascript:insertcode('CC0099');" style="color:#FFFFFF;">CC0099</a></td> + <td bgcolor="CC00CC"><a href="javascript:insertcode('CC00CC');" style="color:#FFFFFF;">CC00CC</a></td> + <td bgcolor="CC00FF"><a href="javascript:insertcode('CC00FF');" style="color:#FFFFFF;">CC00FF</a></td> + </tr> + <tr> + <td bgcolor="CC3300"><a href="javascript:insertcode('CC3300');" style="color:#FFFFFF;">CC3300</a></td> + <td bgcolor="CC3333"><a href="javascript:insertcode('CC3333');" style="color:#FFFFFF;">CC3333</a></td> + <td bgcolor="CC3366"><a href="javascript:insertcode('CC3366');" style="color:#FFFFFF;">CC3366</a></td> + <td bgcolor="CC3399"><a href="javascript:insertcode('CC3399');" style="color:#FFFFFF;">CC3399</a></td> + <td bgcolor="CC33CC"><a href="javascript:insertcode('CC33CC');" style="color:#FFFFFF;">CC33CC</a></td> + <td bgcolor="CC33FF"><a href="javascript:insertcode('CC33FF');" style="color:#FFFFFF;">CC33FF</a></td> + </tr> + <tr> + <td bgcolor="CC6600"><a href="javascript:insertcode('CC6600');" style="color:#000000;">CC6600</a></td> + <td bgcolor="CC6633"><a href="javascript:insertcode('CC6633');" style="color:#000000;">CC6633</a></td> + <td bgcolor="CC6666"><a href="javascript:insertcode('CC6666');" style="color:#000000;">CC6666</a></td> + <td bgcolor="CC6699"><a href="javascript:insertcode('CC6699');" style="color:#000000;">CC6699</a></td> + <td bgcolor="CC66CC"><a href="javascript:insertcode('CC66CC');" style="color:#000000;">CC66CC</a></td> + <td bgcolor="CC66FF"><a href="javascript:insertcode('CC66FF');" style="color:#000000;">CC66FF</a></td> + </tr> + <tr> + <td bgcolor="CC9900"><a href="javascript:insertcode('CC9900');" style="color:#000000;">CC9900</a></td> + <td bgcolor="CC9933"><a href="javascript:insertcode('CC9933');" style="color:#000000;">CC9933</a></td> + <td bgcolor="CC9966"><a href="javascript:insertcode('CC9966');" style="color:#000000;">CC9966</a></td> + <td bgcolor="CC9999"><a href="javascript:insertcode('CC9999');" style="color:#000000;">CC9999</a></td> + <td bgcolor="CC99CC"><a href="javascript:insertcode('CC99CC');" style="color:#000000;">CC99CC</a></td> + <td bgcolor="CC99FF"><a href="javascript:insertcode('CC99FF');" style="color:#000000;">CC99FF</a></td> + </tr> + <tr> + <td bgcolor="CCCC00"><a href="javascript:insertcode('CCCC00');" style="color:#000000;">CCCC00</a></td> + <td bgcolor="CCCC33"><a href="javascript:insertcode('CCCC33');" style="color:#000000;">CCCC33</a></td> + <td bgcolor="CCCC66"><a href="javascript:insertcode('CCCC66');" style="color:#000000;">CCCC66</a></td> + <td bgcolor="CCCC99"><a href="javascript:insertcode('CCCC99');" style="color:#000000;">CCCC99</a></td> + <td bgcolor="CCCCCC"><a href="javascript:insertcode('CCCCCC');" style="color:#000000;">CCCCCC</a></td> + <td bgcolor="CCCCFF"><a href="javascript:insertcode('CCCCFF');" style="color:#000000;">CCCCFF</a></td> + </tr> + <tr> + <td bgcolor="CCFF00"><a href="javascript:insertcode('CCFF00');" style="color:#000000;">CCFF00</a></td> + <td bgcolor="CCFF33"><a href="javascript:insertcode('CCFF33');" style="color:#000000;">CCFF33</a></td> + <td bgcolor="CCFF66"><a href="javascript:insertcode('CCFF66');" style="color:#000000;">CCFF66</a></td> + <td bgcolor="CCFF99"><a href="javascript:insertcode('CCFF99');" style="color:#000000;">CCFF99</a></td> + <td bgcolor="CCFFCC"><a href="javascript:insertcode('CCFFCC');" style="color:#000000;">CCFFCC</a></td> + <td bgcolor="CCFFFF"><a href="javascript:insertcode('CCFFFF');" style="color:#000000;">CCFFFF</a></td> + </tr> + <tr> + <td bgcolor="FF0000"><a href="javascript:insertcode('FF0000');" style="color:#FFFFFF;">FF0000</a></td> + <td bgcolor="FF0033"><a href="javascript:insertcode('FF0033');" style="color:#FFFFFF;">FF0033</a></td> + <td bgcolor="FF0066"><a href="javascript:insertcode('FF0066');" style="color:#FFFFFF;">FF0066</a></td> + <td bgcolor="FF0099"><a href="javascript:insertcode('FF0099');" style="color:#FFFFFF;">FF0099</a></td> + <td bgcolor="FF00CC"><a href="javascript:insertcode('FF00CC');" style="color:#FFFFFF;">FF00CC</a></td> + <td bgcolor="FF00FF"><a href="javascript:insertcode('FF00FF');" style="color:#FFFFFF;">FF00FF</a></td> + </tr> + <tr> + <td bgcolor="FF3300"><a href="javascript:insertcode('FF3300');" style="color:#FFFFFF;">FF3300</a></td> + <td bgcolor="FF3333"><a href="javascript:insertcode('FF3333');" style="color:#FFFFFF;">FF3333</a></td> + <td bgcolor="FF3366"><a href="javascript:insertcode('FF3366');" style="color:#FFFFFF;">FF3366</a></td> + <td bgcolor="FF3399"><a href="javascript:insertcode('FF3399');" style="color:#FFFFFF;">FF3399</a></td> + <td bgcolor="FF33CC"><a href="javascript:insertcode('FF33CC');" style="color:#FFFFFF;">FF33CC</a></td> + <td bgcolor="FF33FF"><a href="javascript:insertcode('FF33FF');" style="color:#FFFFFF;">FF33FF</a></td> + </tr> + <tr> + <td bgcolor="FF6600"><a href="javascript:insertcode('FF6600');" style="color:#000000;">FF6600</a></td> + <td bgcolor="FF6633"><a href="javascript:insertcode('FF6633');" style="color:#000000;">FF6633</a></td> + <td bgcolor="FF6666"><a href="javascript:insertcode('FF6666');" style="color:#000000;">FF6666</a></td> + <td bgcolor="FF6699"><a href="javascript:insertcode('FF6699');" style="color:#000000;">FF6699</a></td> + <td bgcolor="FF66CC"><a href="javascript:insertcode('FF66CC');" style="color:#000000;">FF66CC</a></td> + <td bgcolor="FF66FF"><a href="javascript:insertcode('FF66FF');" style="color:#000000;">FF66FF</a></td> + </tr> + <tr> + <td bgcolor="FF9900"><a href="javascript:insertcode('FF9900');" style="color:#000000;">FF9900</a></td> + <td bgcolor="FF9933"><a href="javascript:insertcode('FF9933');" style="color:#000000;">FF9933</a></td> + <td bgcolor="FF9966"><a href="javascript:insertcode('FF9966');" style="color:#000000;">FF9966</a></td> + <td bgcolor="FF9999"><a href="javascript:insertcode('FF9999');" style="color:#000000;">FF9999</a></td> + <td bgcolor="FF99CC"><a href="javascript:insertcode('FF99CC');" style="color:#000000;">FF99CC</a></td> + <td bgcolor="FF99FF"><a href="javascript:insertcode('FF99FF');" style="color:#000000;">FF99FF</a></td> + </tr> + <tr> + <td bgcolor="FFCC00"><a href="javascript:insertcode('FFCC00');" style="color:#000000;">FFCC00</a></td> + <td bgcolor="FFCC33"><a href="javascript:insertcode('FFCC33');" style="color:#000000;">FFCC33</a></td> + <td bgcolor="FFCC66"><a href="javascript:insertcode('FFCC66');" style="color:#000000;">FFCC66</a></td> + <td bgcolor="FFCC99"><a href="javascript:insertcode('FFCC99');" style="color:#000000;">FFCC99</a></td> + <td bgcolor="FFCCCC"><a href="javascript:insertcode('FFCCCC');" style="color:#000000;">FFCCCC</a></td> + <td bgcolor="FFCCFF"><a href="javascript:insertcode('FFCCFF');" style="color:#000000;">FFCCFF</a></td> + </tr> + <tr> + <td bgcolor="FFFF00"><a href="javascript:insertcode('FFFF00');" style="color:#000000;">FFFF00</a></td> + <td bgcolor="FFFF33"><a href="javascript:insertcode('FFFF33');" style="color:#000000;">FFFF33</a></td> + <td bgcolor="FFFF66"><a href="javascript:insertcode('FFFF66');" style="color:#000000;">FFFF66</a></td> + <td bgcolor="FFFF99"><a href="javascript:insertcode('FFFF99');" style="color:#000000;">FFFF99</a></td> + <td bgcolor="FFFFCC"><a href="javascript:insertcode('FFFFCC');" style="color:#000000;">FFFFCC</a></td> + <td bgcolor="FFFFFF"><a href="javascript:insertcode('FFFFFF');" style="color:#000000;">FFFFFF</a></td> + </tr> +</table>
\ No newline at end of file diff --git a/0.4.7a2/config.pm b/0.4.7a2/config.pm new file mode 100644 index 0000000..280f476 --- /dev/null +++ b/0.4.7a2/config.pm @@ -0,0 +1,247 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$datum = "22.01.01";
+$version = "0.4.7a2";
+$title = "yChat [$version]";
+$gfxpath = "../../yChat";
+$style = <<ENDCSS;
+<style type="text/css">
+ body { background-color: #005146 }
+ body.blank { background-color: #000000 }
+ body.online { background-color: #000000 }
+ div { font-family: arial, verdana, helvetiva; font-size: 9pt; 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; }
+</style>
+<style type="text/css" media="all">
+ a { text-decoration: none; }
+ a:hover { text-decoration:underline; }
+input { border:2px solid #000000; font-size:12px; color:#000000; height:23px; padding:2px;}
+select { border:2px solid #000000; font-family:arial, verdana, helvetica; font-size:11px; color:#000000; height:21px; padding:2px;}
+</style>
+ENDCSS
+
+############### Dieser TeFil 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);
+ }
+ open(FILE2PRINT,"<$file2print");
+ @file2print = <FILE2PRINT>;
+ close FILE2PRINT;
+ print @file2print;
+}
+
+
+sub start_html { # Der HEADER einer HTML-Datei
+print "<html><head>";
+print "<meta http-equiv=\"refresh\" content=\"20\" URL=\"online.pl?room=$room\">" if ($_[1] eq "online");
+print <<END;
+ <title>
+ $title - $_[0]
+ </title>
+ $_[2]
+ $style
+ </head>
+END
+ if ($_[1] eq "start") {
+ print "<body onload=\"document.login.alias.focus();\">";
+ } elsif ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht posten.
+ my ($room,$msg2post,$secroom) = @_;
+ my @rooms,@pids = $room;
+ @rooms = ($room,$secroom) if ($room ne $secroom);
+ foreach(@rooms) {
+ open(MSGFILE,">>data/msgs/$_");
+ open(PID,"<data/online/pids/$_");
+ print MSGFILE "!<;".time."<;!<;!<;$msg2post<;\n";
+ @pids = <PID>;
+ close PID;
+ close MSGFILE;
+ kill INT => @pids;
+ }
+ &log($msg2post) if ($room eq "Cyberbar");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my ($alias2post,$msg2post) = @_;
+ opendir(DIR,"data/online/rooms");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ foreach $raum (@dir) {
+ opendir(DIR,"data/online/rooms/$raum");
+ my @chatter = readdir(DIR);
+ closedir(DIR);
+ foreach $chatter (@chatter) {
+ if ($chatter eq $alias2post) {
+ open(MSGFILE,">>data/msgs/$raum");
+ print MSGFILE "$alias2post<;".time."<;!<;!<;$msg2post<;\n";
+ close MSGFILE;
+ open(PID,"<data/online/pids/$raum");
+ my @pids = <PID>;
+ close PID;
+ kill INT => @pids;
+ goto ENDPRV;
+ }
+ }
+ }
+ENDPRV:
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ local $msg2log = $_[0];
+ &zeit;
+ open(LOG,">>data/logs/$day.$month.$year");
+ print LOG "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ close LOG;
+}
+
+
+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 read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ open(ERROR,">>data/error");
+ print ERROR $error_msg."\n";
+ close ERROR;
+ exit;
+}
+
+sub check_online { # Auf alte Räume und Chatter prüfen und ggf. entfernen.
+ open(PROVE,">data/online/prove");
+ print PROVE time;
+ close PROVE;
+ opendir(RAUMDIR, "data/online/rooms");
+ my @raumdir = readdir(RAUMDIR);
+ closedir(RAUMDIR);
+ foreach $raum (@raumdir) {
+ opendir(BENUTZERDIR, "data/online/rooms/$raum");
+ my @benutzerdir = readdir(BENUTZERDIR);
+ closedir(BENUTZERDIR);
+ my $raumleer= 1;
+ foreach $benutzer (@benutzerdir) {
+ if (-f "data/online/rooms/$raum/$benutzer") {
+ $raumleer = 0;
+ open (BENUTZER,"<data/online/rooms/$raum/$benutzer");
+ my $benutzerstamp = <BENUTZER>;
+ close BENUTZER;
+ if ($benutzerstamp < (time - 40)) {
+ unlink("data/online/$raum/$benutzer");
+ open (BENUTZER2,"<data/online/users/$benutzer");
+ my $benutzerstamp2 = <BENUTZER2>;
+ close BENUTZER2;
+ if ($benutzerstamp2 < (time - 40)) {
+ if ($benutzer ne $alias) {
+ &rm_alias($benutzer,$raum); # ohne $raum/benutzer entf.
+ } else {
+ unlink("data/online/rooms/$raum/$benutzer");
+ }
+ &zeit;
+ &post($raum,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$benutzer hat den Chat verlassen ... </font></i>");
+ }
+ }
+ }
+ }
+ if ($raumleer == 1) { # Falls Raum leer ist => entf.
+ rmdir("data/online/rooms/$raum");
+ unlink("data/online/rstat/$raum");
+ unlink("data/online/pids/$raum");
+ unlink("data/msgs/$raum");
+ }
+ }
+}
+
+sub rm_alias { # Falls Benutzer offline gegangen ist
+ my($benutzer,$raum) = @_;
+ unlink("data/online/rooms/$raum/$benutzer");
+ unlink("data/online/users/$benutzer");
+ unlink("data/online/ident/$benutzer");
+ &rm_rstat($benutzer,$raum);
+}
+
+sub rm_rstat { # Benutzer als Raumbesetzer austragen
+ my ($r_alias,$rstatroom) = @_;
+ open (RSTAT,"<data/online/rstat/$rstatroom");
+ my @rstat = <RSTAT>;
+ close RSTAT;
+ my @rstat2 = ($rstat[0],$rstat[1]);
+ for ($i=2;$i<=$#rstat;$i++) {
+ push(@rstat2,$rstat[$i]) if ($rstat[$i] ne $r_alias."\n");
+ }
+ open (RSTAT,">data/online/rstat/$rstatroom");
+ print RSTAT @rstat2;
+ close RSTAT;
+}
+
+
+sub secure_checkid { # TmpID überprüfen
+ my ($alias2check) = @_;
+ open(IDENT,"<data/online/ident/$alias2check");
+ my @ident = <IDENT>;
+ close IDENT;
+ if ($ident[1] ne $tmpid) {
+ &error("Falsche TempID ! Du bist nicht befugt zu handeln !");
+ }
+}
+
+sub hierachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hierachie = undef;
+ open(WA,"<data/wa");
+ @was = <WA>;
+ close WA;
+ foreach $wa (@was) {
+ if ($wa eq $alias2prove || $wa eq "$alias2prove\n") {
+ $hierachie = "wa";
+ }
+ }
+ open(OW,"<data/ow");
+ @ows = <OW>;
+ close OW;
+ if ($hierachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach $ow (@ows) {
+ if ($ow eq $alias2prove || $ow eq "$alias2prove\n") {
+ $hierachie = "ow";
+ }
+ }
+ }
+}
diff --git a/0.4.7a2/help.sno b/0.4.7a2/help.sno new file mode 100644 index 0000000..558d4fd --- /dev/null +++ b/0.4.7a2/help.sno @@ -0,0 +1,57 @@ +<div>
+ Alle Chat-Befehle:
+</div>
+<hr>
+<table width=100% bgcolor=000000>
+<tr><th bgcolor=666666><div>SU</div></th><th bgcolor=666666><div>Befehl</div></th><th bgcolor=666666><div>Beschreibung</div></th></tr>
+<tr><td><div>NC</div></td><td><div>/about</div></td><td><div>Zeigt aktuelle Version und andere Infos der Community an</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/away <font color=red>Nachricht</font></div></td><td><div>Abmelden mit einer<font color=red>Abmeldenachricht</font></div></td></tr>
+<tr><td><div>NC</div></td><td><div>/clear</div></td><td><div>Bildschirm wird gelöscht</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/col <font color=red>XXXXXX</font> <font color=ffa500>XXXXXX</font></div></td><td><div>Farbe/n (<font color=red>Namensfarbe</font> / <font color=ffa500>Textfarbe</font>) wechseln. Angabe in Hexadezimal.</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/date</div></td><td><div>Zeigt aktuelles Datum und Urzeit an</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/j <font color=red>Raumname</font></div></td><td><div>Raum wechseln/erstellen</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/ju <font color=red>Alias</font></div></td><td><div>In den Raum wechseln/folgen, wo sich <font color=red>Alias</font> befindet.</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/m <font color=red>Aktion</font></div></td><td><div>Handeln mit 2 Farben</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/me <font color=red>Aktion</font></div></td><td><div>Handeln mit einer Farbe</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/memo <font color=red>Alias</font> <font color=ffa500>Nachricht</font></div></td><td><div><font color=red>Alias</font> eine <font color=ffa500>Memonachricht</font> hinterlassen</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/msg <font color=red>Alias</font> <font color=ffa500>Nachricht</font></div></td><td><div><font color=red>Alias</font> eine private <font color=ffa500>Nachricht</font> flüstern</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/ <font color=ffa500>Nachricht</font></div></td><td><div>Eine private <font color=ffa500>Nachricht</font> demjenigen flüstern, dem zuletzt eine geflüstert wurde</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/online <font color=red>Alias</font></div></td><td><div>Zeigt Onlineminuten von <font color=red>Alias</font> an</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/q</div></td><td><div>Cumunnity verlassen</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/rmgb</div></td><td><div>Das eigene Gästebuch komplett weglöschen</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/s <font color=red>Nachricht</font></div></td><td><div><font color=red>Nachricht</font> schreien</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/seen <font color=red>Alias</font></div></td><td><div>Zeigt an, vor wieviel Stunden sich <font color=red>Nachricht</font> zum letzten Mal in das System eingelogt hat</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/w</div></td><td><div>Zeigt an, wer sich im aktuellen Raum befindet</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/wc <font color=red>Raum</font></div></td><td><div>Zeigt an, wer sich im <font color=red>Raum</font> befindet. Wird kein Raum angegeben, dann wird ledeglich angezeigt, wer sich im System befindet</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/wc/</div></td><td><div>Zeigt alle offenen Räume und deren Chatter an</div></td></tr>
+<tr><td><div>NC</div></td><td> <div>/wj <font color=red>Alias</font></div></td><td><div>Zeigt an, in welchen Raum sich <font color=red>Alias</font> befindet</div></td></tr>
+<tr><td><div><font color=778899>RB</font></div></td><td><div>/l</div></td><td><div>Der aktuelle Raum wird ab- bzw. aufgesperrt</div></td></tr>
+<tr><td><div><font color=778899>RB</font></div></td><td><div>/rsu <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> die Raumbesetzerrechte entnehmen</div></td></tr>
+<tr><td><div><font color=778899>RB</font></div></td><td><div>/su <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Raumbesetzer ernennen</div></td></tr>
+<tr><td><div><font color=778899>RB</font></div></td><td><div>/t <font color=red>Thema</font></div></td><td><div>Dem aktuellen Raum wird ein <font color=red>Thema</font> gegeben</div></td></tr>
+<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/ban</div></td><td><div>Zeigt alle verbannten Benutzer an</div></td></tr>
+<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/ban <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> verbannen</div></td></tr>
+<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/rban <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> "entbannen"</div></td></tr>
+<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/ip <font color=red>Alias</font></div></td><td><div>Zeigt die IP-Nummer von <font color=red>Alias</font> an</div></td></tr>
+<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/k <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird aus dem Chat katapultiert!</div></td></tr>
+<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/ss <font color=red>Raum</font> <font color=ffa500>Nachricht</font></div></td><td><div>Eine <font color=ffa500>Nachricht</font> in <font color=red>Raum</font> hinüber rufen</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/kill <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird ganz und gar aus dem System entfernt</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/wa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Wächter ernennen</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/rwa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom Wächter zum normalen Chatter degradieren</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/sys <font color=red>Nachricht</font></div></td><td><div>Systemnachricht schreiben. (Erscheint in allen existierenden Räumen)</div></td></tr>
+</table><hr>
+<div>
+ 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.<br><br>
+ 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.<br><br>
+ Weitere Besonderheiten der Wächter und Oberwächter:<br><br>
+ Wächter und Oberwächter können ....<br>
+ ... abgesperrte Chaträume problemlos betreten.<br>
+ ... nicht gekickt, verbannt oder gekillt werden.<br>
+ ... Logdateien der Cyberbar lesen.<br><br>
+
+ Des weiteren: Oberwächter ernennt nur der Systemadministrator!
+</div>
+</body>
+</html>
\ No newline at end of file diff --git a/0.4.7a2/htdocs.pl b/0.4.7a2/htdocs.pl new file mode 100644 index 0000000..61fcd77 --- /dev/null +++ b/0.4.7a2/htdocs.pl @@ -0,0 +1,241 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print
+ $q->header;
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+$var = $q->param("var");
+if ($var eq "help_html") {
+ &printfile("help.sno","Alle Chatbefehle");
+} elsif ($var eq "logo_html") {
+ &start_html("Logo");
+print<<END;
+<layer top=-3 left=0><div style="position:absolute; top:5; left:10">
+<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=48 HEIGHT=48>
+ <PARAM NAME=movie VALUE="$gfxpath/ySymbol.swf">
+ <PARAM NAME=loop VALUE=false>
+ <PARAM NAME=menu VALUE=false>
+ <PARAM NAME=quality VALUE=high>
+ <PARAM NAME=scale VALUE=noborder>
+ <PARAM NAME=wmode VALUE=opaque>
+ <PARAM NAME=bgcolor VALUE=#005146>
+ <EMBED src="$gfxpath/ySymbol.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=#005146
+ WIDTH=48 HEIGHT=48 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>
+</OBJECT>
+</div></layer>
+END
+print $q->end_html;
+} elsif ($var eq "menu_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ $room = $q->param("room");
+ $col = $q->param("col");
+ $secol = $q->param("secol");
+ $tmp = $q->param("tmp");
+ &menu_html;
+} elsif ($var eq "werda_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &werda_html;
+} elsif ($var eq "logs_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &secure_checkid($alias);
+ &logs_html;
+} elsif ($var eq "view_logs_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ $tmp = $q->param("tmp");
+ &secure_checkid($alias);
+ &hierachie($alias);
+ if ($hierachie eq "ow" || $hierachie eq "wa") {
+ &printfile($tmp,"Logdatei","blank");
+ }
+} elsif ($var eq "superuser_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &secure_checkid($alias);
+ &superuser_html;
+} else {
+ print
+ $q->start_html(-bgcolor=>"000000"),
+ $q->end_html;
+}
+
+sub menu_html {
+if ($tmp eq "quit") {
+ &start_html("Quit","blank","<script language=\"JavaScript\">open(\"index.pl?tmp=quit\",\"_top\");</script>");
+ print $q->end_html;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ... </font></i>");
+ sleep 2;
+ &rm_alias($alias,$room);
+ exit;
+}
+ENDJS
+ &start_html("Menü","blank");
+print <<END;
+<script language="JavaScript">
+function fenster(fenster,target) {
+ open(fenster,target,"width=500,height=500,screenX=100,screenY=100,scrollbars");
+}
+</script>
+<font size=2 face=verdana><p>
+ <a href='javascript:fenster("htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp&tmpid=$tmpid","weristda")'>Wer ist da?</a>
+ <a href='javascript:fenster("main2.pl?var=edit_profile_html&alias=$alias&tmpid=$tmpid&room=$room","ProfilAendern")'>Profil ändern</a>
+ <a href='javascript:fenster("main2.pl?var=edit_options_html&alias=$alias&tmpid=$tmpid&room=$room","Optionen")'>Chatoptionen</a>
+ <a href='javascript:fenster("main2.pl?var=list_alias_html&alias=$alias&tmpid=$tmpid","Benutzerliste")'>Benutzerliste</a>
+ <a href='javascript:fenster("htdocs.pl?var=help_html&tmpid=$tmpid","Befehle")'>Chatbefehle</a><br>
+ <a href='javascript:fenster("main2.pl?var=gb_html&alias=$alias&tmpid=$tmpid","Board")'>Benutzerboard</a>
+ <a href='javascript:fenster("htdocs.pl?var=superuser_html&alias=$alias&tmpid=$tmpid","Superuser")'>Superuser</a>
+ <a href='javascript:fenster("htdocs.pl?var=logs_html&alias=$alias&tmpid=$tmpid","Logdateien")'>Logs</a>
+ <a href='javascript:fenster("ranking.php4?&alias=$alias&tmpid=$tmpid","Ranking")'>Top 20</a>
+ <a href="http://www.home.yChat.de" target="Home">Home</a>
+ <a href="http://www.credits.yChat.de" target="Credits">Credits</a>
+ <a href="htdocs.pl?alias=$alias&var=menu_html&room=$room&tmpid=$tmpid&tmp=quit">Verlassen</a>
+</p></font>
+</body>
+</html>
+END
+}
+
+sub werda_html { # Anzeige, wer eingelogt ist.
+ &start_html("Wer ist da?");
+ print <<END;
+<div>
+ $alias, schön daß Du hier bist :-)
+</div>
+<hr>
+<div>
+ Folgende Personen befinden sich im Chat:
+</div>
+<br>
+<div>
+END
+ opendir(ROOMDIRS,"data/online/rooms");
+ local @roomdirs = readdir(ROOMDIRS);
+ close(ROOMDIRS);
+ foreach(@roomdirs) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ 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);
+ local $nr = $#roomdir-1;
+ print $q->b( $_ ),
+ " $door ($nr) Raumthema: $rstat[1]",
+ $q->br;
+ foreach(@roomdir) {
+ if ($_ ne ".." && $_ ne ".") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid" }, "$_"), " ";
+ }
+ }
+ print $q->br, $q->br;
+ }
+ }
+ print
+ "</div>",
+ $q->end_html;
+}
+
+sub logs_html {
+ &start_html("Logdateien");
+ print <<END;
+<div>
+ Hier befinden sich alle Logdateien
+</div>
+<hr>
+END
+ &hierachie($alias);
+ if ($hierachie eq "ow") {
+ print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ),
+ $q->br;
+ opendir(LOGS,"data/logs");
+ local @logs = readdir(LOGS);
+ closedir(LOGS);
+ local @sortedir = sort(@logs);
+ foreach(@sortedir) {
+ if (-f "data/logs/$_") {
+ print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_&tmpid=$tmpid",
+ -target=>"_new" },
+ "$_" ),
+ " ";
+ }
+ }
+ } else {
+ print $q->div( "Logdateien können nur von Oberwächtern (OW) gelesen werden. Du bist jedoch ein Wächter (WÄ) oder ein",
+ "\"Normaler Chatter\". Oberwächter können alles nachlesen, was öffentlich im Raum \"Cyberbar\" 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 "<div>Hallo $alias. Du bist als ";
+ &hierachie($alias);
+ if ($hierachie eq "ow") {
+ print
+ $q->b( "Oberwächter" ),
+ " (OW) eingetragen.</div>",
+ $q->hr;
+ } elsif ( $hierachie eq "wa") {
+ print
+ $q->b( "Wächter" ),
+ " (WÄ) eingetragen.</div>",
+ $q->hr;
+ } else {
+ print
+ $q->b( "normaler Chatter" ),
+ " (NC) eingetragen.</div>",
+ $q->hr;
+ }
+
+ my $nrow = $#ows+1;
+ print
+ "<div>",
+ $q->b( "OW" ),
+ "s ($nrow Stück)";
+ foreach(@ows) {
+ print
+ $q->font( { -color=>"FFA500" },
+ " ".$_);
+ }
+ my $nrwa = $#was+1;
+ print
+ "</div>",
+ $q->hr,
+ "<div>",
+ $q->b( "WÄ" ),
+ "s ($nrwa Stück)";
+ foreach(@was) {
+ print
+ $q->font( { -color=>"FFA500" },
+ " ".$_);
+ }
+print <<END;
+<hr>
+ Die jeweiligen Fähigkeiten der Oberwächter (OW) und der Wächter (WÄ) sind unter
+ "<a href="htdocs.pl?var=help_html">Chat-Befehle</a>"
+ dokumentiert.
+</div>
+</body>
+</html>
+END
+}
\ No newline at end of file diff --git a/0.4.7a2/index.pl b/0.4.7a2/index.pl new file mode 100644 index 0000000..078a2fd --- /dev/null +++ b/0.4.7a2/index.pl @@ -0,0 +1,421 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print
+ $q->header;
+
+#####################################
+##WELCHE SUB MUß AUFGERUFEN WERDEN?##
+#####################################
+
+$var = $q->param("var");
+$alias = $q->param("alias");
+$pw = $q->param("pw");
+$tmp = $q->param("tmp");
+
+if ($var eq "create_alias_html") {
+ &create_alias_html;
+} elsif ($var eq "create_alias") {
+ &create_alias;
+} elsif ($var eq "login_html") {
+ $tmp = $q->param("tmp");
+ &login_html;
+} elsif ($alias eq "") {
+ &login_html;
+} else {
+ &checklogin;
+}
+
+sub login_html { # Erste Startseite
+&check_online;
+local $counter = undef;
+open(COUNT,"<data/count");
+ $counter = <COUNT>;
+close COUNT;
+$counter++;
+open(COUNT,">data/count");
+ print COUNT $counter;
+close COUNT;
+opendir(USERS,"data/online/users");
+ local @users = readdir(USERS);
+closedir(USERS);
+opendir(REGISTRED,"data/user/options");
+ local @registred = readdir(REGISTRED);
+closedir(REGISTRED);
+local ($logtin,$users) = ($#users-1,$#registred-1);
+&start_html("Created & Copyright by Paul C. Bütow","start");
+print <<END;
+ <center>
+ <table width=500>
+ <tr>
+ <td>
+ <center>
+ <table>
+ <tr>
+ <td>
+<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>
+ <PARAM NAME=movie VALUE="$gfxpath/yIntro.swf">
+ <PARAM NAME=loop VALUE=false>
+ <PARAM NAME=menu VALUE=false>
+ <PARAM NAME=quality VALUE=high>
+ <PARAM NAME=scale VALUE=noborder>
+ <PARAM NAME=wmode VALUE=opaque>
+ <PARAM NAME=bgcolor VALUE=#005146>
+ <EMBED src="$gfxpath/yIntro.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=#005146
+ WIDTH=240 HEIGHT=240 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>
+</OBJECT>
+ </td>
+ <td>
+ <div>
+ yChat: Version $version
+ <br><br>
+ Letztes Update: $datum
+ <br><br>
+ Seitenaufrufe: $counter
+ <br><br>
+ Benutzer registriert: $users
+ <br><br>
+ Benutzer online: $logtin
+ <br><br>
+ Webmaster: <a href="mailto:mail\@paulbuetow.de">Paul C. Bütow</a>
+ <br><br>
+ yChat-HP: <a href="http://www.home.yChat.de">home.yChat.de</a>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </center>
+ </div>
+ <br>
+ <br>
+END
+ if ($tmp eq "true") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Wahrscheinlich existiert Dein Alias "$alias" nicht,
+ <br>
+ Du hast Dich verschrieben oder das Passwort ist falsch.
+ <br>
+ Versuch es erneuert !
+ </div>
+END
+ } elsif ($tmp eq "quit") {
+print <<END;
+ <div>
+ Du hast soeben den Chat verlassen.
+ <br>
+ Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)
+ </div>
+END
+ } elsif ($tmp eq "banned") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Dein Alias "$alias" wurde verbannt.
+ <br>
+ Z.z. kannst Du Dich leider nicht in den Chat einloggen.
+ <br>
+ Sorry!
+ </div>
+END
+ } elsif ($tmp eq "kick") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Du wurdest soeben aus dem Chat katapultiert!
+ <br>
+ Schlechtes Verhalten mag die Ursache hierfür sein.
+ <br>
+ Sorry!
+ </div>
+END
+ } elsif ($var eq "create_alias") {
+print "<div>Du hast sich soeben in die Datenbank eingetragen. Einfach auf \"Los Geht's\" klicken :-)</div>";
+ } else {
+print <<END;
+ <div>
+ Herzlich willkommen!
+ <br>
+ Einfach Daten eingeben und auf "Los Geht's" klicken :-)
+ </div>
+END
+ }
+print <<END;
+ <hr>
+ <form name="login" action="index.pl" method="post">
+ <input type="hidden" name="tmp" value="true">
+ <table>
+ <tr>
+ <td>
+ <div>
+ Dein Alias:
+ <br>
+ <input name="alias" value="$alias">
+ </div>
+ </td>
+ <td>
+ <div>
+ Dein Passwort:
+ <br>
+ <input type="password" name="pw" value="$pw">
+ </div>
+ </td>
+ </tr>
+ </table>
+ <br>
+ <br>
+ <div>
+ Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken!
+ </div>
+ <br>
+ <table>
+ <tr>
+ <td>
+ <font color="ffffff">
+ <input type="submit" value="Los geht's!">
+ </font>
+ </form>
+ </td>
+ <td>
+ <form action="index.pl">
+ <input type="hidden" name="var" value="create_alias_html">
+ <font color="ffffff">
+ <input type="submit" value="Registrieren">
+ </font>
+ </form>
+ </td>
+ </tr>
+ </table>
+ <hr>
+ </td>
+ </tr>
+ </table>
+ </center>
+</body>
+</html>
+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.
+local $reload = $_[0];
+&start_html("Registration");
+print <<END;
+ <center>
+ <table width=500>
+ <tr>
+ <td>
+END
+ if ($reload eq "alias_exists") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Der von Dir gewählte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit
+ einem anderen Benutzernamen !
+ </div>
+ <hr>
+END
+} elsif ($reload eq "pw_wrong") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Deine beiden Passworteingaben stimmen nicht überein. Bitte geb das Passwort erneuert an um sicherzugehen, daß
+ kein falsches Passwort abgespeichert wird !
+ </div>
+ <hr>
+END
+} elsif ($reload eq "alias_prohibited") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Dein gewählter Benutername "$alias" enthält illegale Zeichen. Bitte versuch einen anderen Benutzernamen!
+ </div>
+ <hr>
+END
+} else {
+print <<END;
+ <div>
+ Hier kannst Du Dich registrieren. Bitte beachte, daß die Passworteingabefelder übereinstimmen!
+ </div>
+ <hr>
+END
+}
+print <<END;
+ <form action="index.pl">
+ <input type="hidden" name="var" value="create_alias">
+ <div>
+ Dein Alias:
+ <font color="ffa500">
+ (Muß angegeben werden)
+ </font>
+ <br>
+ <input name="alias" VALUE="$alias">
+ </div>
+ <br>
+ <div>
+ Dein gewünschtes Passwort:
+ <br>
+ <input type="password" name="pw" value="$pw">
+ </div>
+ <br>
+ <div>
+ Geb hier Dein Passwort erneuert ein:
+ <br>
+ <input type="password" name="tmp">
+ </div>
+ <br>
+ <font color=ffffff>
+ <input type="submit" value="Registrieren">
+ </font>
+ <br>
+ </form>
+ <hr>
+ <div>
+ Um den Chat zu betreten müssen die Daten nach der Registration auf der Startseite erneuert bestätigt werden !
+ </div>
+ </td>
+ </tr>
+ </table>
+</center>
+</body>
+</html>
+END
+}
+
+sub checklogin { # Überprüfen, ob die Login-Daten korrekt sind.
+ 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;
+ chomp($options[0]);
+ if ($options[0] eq $pw) {
+ open(BAN,"<data/ban");
+ my @ban = <BAN>;
+ close BAN;
+ foreach(@ban) {
+ if ($_ eq "$alias\n") {
+ $tmp = "banned";
+ &login_html;
+ exit;
+ }
+ }
+ if ($options[1] eq undef) {
+ $col = "ffffff";
+ } else {
+ chomp($options[1]);
+ $col = $options[1];
+ }
+ if ($options[2] eq undef) {
+ $secol = "ffffef";
+ } else {
+ $secol = $options[2];
+ }
+ $tmpid = time;
+ open(IDENT,">data/online/ident/$alias");
+ print IDENT $ENV{'REMOTE_ADDR'}."\n".$tmpid;
+ close IDENT;
+ open(LASTLOGIN,">data/user/lastlogin/$alias");
+ print LASTLOGIN time;
+ close LASTLOGIN;
+ &frameset_html;
+ exit;
+ } else {
+ $lognotexists = "false";
+ }
+ }
+ }
+ &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 ($pw ne $tmp) {
+ &create_alias_html("pw_wrong");
+ exit;
+ }
+ opendir(USERDIR,"data/user/options");
+ my @user = readdir(USERDIR);
+ close USERDIR;
+ foreach $user (@user) {
+ if ($user eq $alias) {
+ &create_alias_html("alias_exists");
+ exit;
+ }
+ }
+ open(OPTIONS,">data/user/options/$alias");
+ print OPTIONS $pw."\n";
+ close OPTIONS;
+ local $number = $#user;
+ &zeit;
+ &post("Cyberbar","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>");
+ &login_html;
+}
+
+sub frameset_html {
+print <<END;
+<html>
+ <head>
+ <title>
+ $title - Created & Copyright by Paul C. Bütow
+ </title>
+ </head>
+<frameset border=0 frameborder=0 framespacing=0 cols="130,*">
+ <frameset border=0 frameborder=0 framespacing=0 rows="300,*,55">
+ <frame name="online" src="online.pl?room=Cyberbar&alias=$alias&tmpid=$tmpid">
+ <frame src="htdocs.pl">
+ <frameset border=0 frameborder=0 framespacing=0 cols="70,*">
+ <frame name="logo" src="htdocs.pl?var=logo_html" scrolling="no">
+ <frame name="reload" src="htdocs.pl" scrolling="no">
+ </frameset>
+ </frameset>
+ <frameset border=0 frameborder=0 framespacing=0 rows="60,*,55">
+ <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=Cyberbar&col=$col&secol=$secol&tmpid=$tmpid" scrolling="no">
+ <frame name="main" src="push.pl?room=Cyberbar&alias=$alias&tmpid=$tmpid">
+ <frame name="input" src="input.pl?alias=$alias&room=Cyberbar&col=$col&secol=$secol&tmp=login&tmpid=$tmpid" scrolling="no">
+ </frameset>
+</frameset>
+</html>
+END
+}
diff --git a/0.4.7a2/input.pl b/0.4.7a2/input.pl new file mode 100644 index 0000000..8561aba --- /dev/null +++ b/0.4.7a2/input.pl @@ -0,0 +1,194 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print
+ $q->header();
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+#&secure_checkid($alias);
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$tmp = $q->param("tmp");
+$whisper = $q->param('whisper');
+
+if ($tmp eq "login") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>");
+}
+
+print <<END;
+<html>
+<head>
+<script language="JavaScript"><!--
+
+// Einstellungsvariablen
+maxVerlauf = 10; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+verlaufOrder = 1; // Neue Nachrichten von: 0=oben, 1=unten
+//autoAwayTimeout = 20; // Sekunden, nach denen der User 'Away' gesetzt wird
+//autoQuitTimeout = 40; // Sekunden, nach denen der User den Chat verlässt
+autoAwayTimeout = 300; // Sekunden, nach denen der User 'Away' gesetzt wird
+autoQuitTimeout = 1200; // Sekunden, nach denen der User den Chat verlässt
+
+// Interne Variablen
+userNotFocused = false; // Wenn User nicht schreibt
+userAway = false; // Wenn User automatisch auf 'Away' gesetzt ist
+userAwayTime = 0; // Sekunden, die User 'Away' ist
+fullVerlauf = new Array( maxVerlauf ); // Verlaufspuffer
+
+function delout()
+{
+ addVerlauf (document.inf.msg.value); // Dem Verlauf eine Nachricht anhängen
+ document.inf.submit(); // Formular absenden
+ document.inf.msg.focus(); // Fukus in das Eingabeform
+ document.inf.msg.select(); // Text im Eigabeform markieren
+ return false; // Abbrechen, damit das Frame nicht neu geladen wird
+}
+
+function CheckAuswahl()
+{
+ id=document.verlaufform.verlauf.selectedIndex; // ID des ausgewählten Feldes
+
+ if (fullVerlauf[id-1] != null) // Nur, wenn das Feld nicht leer ist
+ {
+ document.inf.msg.value = fullVerlauf[id-1]; // Eintrag ins Textfeld
+ }
+
+ document.verlaufform.verlauf.selectedIndex = 0; // Ersten Eintrag (Überschrift) auswählen
+ document.inf.msg.focus(); // Eingabefeld fokusieren
+
+ return true;
+}
+
+function addVerlauf (msg)
+{
+ if (msg == "") // Falls msg leer
+ return false; // Aufruf ignorieren
+
+ if (verlaufOrder) // neue Nachrichten von unten
+ {
+ for (i=0; i<(maxVerlauf-1); i++) // Alle Einträge einen aufrutschen
+ {
+ document.verlaufform.verlauf.options[i+1].text = document.verlaufform.verlauf.options[i+2].text;
+ fullVerlauf[i] = fullVerlauf[i+1];
+ }
+ }
+ else // neue Nachrichten von oben
+ {
+ for (i=(maxVerlauf-2); i>=0; i--) // Alle Einträge einen aufrutschen
+ {
+ document.verlaufform.verlauf.options[i+2].text = document.verlaufform.verlauf.options[i+1].text;
+ fullVerlauf[i+1] = fullVerlauf[i];
+ }
+ }
+
+ if (msg.length > maxPreview) // Vorschau zuschneiden
+ pre = msg.slice(0, maxPreview-3) + "...";
+ else
+ pre = msg;
+
+ if (verlaufOrder) // pos = Position des neuen Eintrags
+ pos = maxVerlauf-1;
+ else
+ pos = 0
+
+ document.verlaufform.verlauf.options[pos+1].text = pre; // Neue Vorschau anfügen
+ fullVerlauf[pos] = msg; // Neuen Eintrag an den Verlauf anfügen
+
+// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag
+ document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (Überschrift)
+}
+
+function msgBlur()
+{
+ userNotFocused = true;
+ userAwayTime = 0;
+ userAway = false;
+}
+
+function msgFocus()
+{
+ userNotFocused = false;
+ if (userAway) // Wird ausgeführt, falls User 'Away' war
+ {
+ ; // nop
+ }
+ userAwayTime = 0;
+ userAway = false;
+}
+
+function checkInterval()
+{
+// status = "userNotFocused=" + userNotFocused + "; userAway=" + userAway + "; userAwayTime=" + userAwayTime + ""; // Debug
+ if (userNotFocused)
+ {
+ userAwayTime += 5; // Addiere 5, da nur alle 5Sek ausgeführt
+ if (!userAway)
+ {
+ if (autoAwayTimeout < userAwayTime) // Falls Zeit abgelaufen
+ {
+ if (document.inf.tmp.value != "away")
+ open ("mail.pl?alias=$alias&tmpid=$tmpid&msg=/away&col=$col&room=$room&tmp=autoaway","reload"); // 'Away' setzen
+ userAway = true;
+ }
+ }
+ else
+ {
+ if (autoQuitTimeout < userAwayTime) // Falls Zeit abgelaufen
+ {
+ open ("mail.pl?alias=$alias&tmpid=$tmpid&msg=/q&room=$room&tmp=autologout","reload"); // Chat beenden
+ }
+ }
+ }
+
+ window.setTimeout("checkInterval()",5000); // In 5 Sekunden wieder aufrufen
+}
+
+function initFrame()
+{
+ window.setTimeout("checkInterval()",5000); // In 5 Sekunden aufrufen
+ document.inf.msg.focus(); // Eingabefeld fokusieren
+}
+//-->
+</script>
+$style
+</head>
+<body class="blank" onload="initFrame();">
+ <div align="left">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <form name="inf" target="reload" action="main.pl" onsubmit="return delout();">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="room" value="$room">
+ <input type="hidden" name="col" value="$col">
+ <input type="hidden" name="secol" value="$secol">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <input type="hidden" name="whisper" value="$whisper">
+ <input type="hidden" name="tmp" value="$tmp">
+ <input size="50" name="msg" onBlur="msgBlur();" onFocus="msgFocus();">
+ </form>
+ </td>
+ <td><form name="verlaufform">
+ <script language="JavaScript"><!--
+ document.write("<select size='1' name='verlauf' size='40' onChange='CheckAuswahl();'>");
+ document.write("<option value>- Nachrichten-Verlauf -</option>");
+ for(i=0; i<maxVerlauf; i++) // Leere Verlaufsfelder generieren
+ document.write("<option value>(leer)</option>");
+ document.write("</select>");
+ //-->
+ </script>
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>
+END
diff --git a/0.4.7a2/main.pl b/0.4.7a2/main.pl new file mode 100644 index 0000000..9df9619 --- /dev/null +++ b/0.4.7a2/main.pl @@ -0,0 +1,912 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print
+ $q->header();
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+&secure_checkid($alias);
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$tmp = $q->param("tmp");
+$rmsg = \$q->param("msg");
+$whisper = $q->param("whisper");
+
+&reload_html("","change_colors") if ($q->param('var') eq "change_colors");
+
+if ($tmp eq "away") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat sich zurück gemeldet ... </font></i>");
+}
+
+$$rmsg =~ s#<#<\;#g;
+if (substr($$rmsg,0,1) ne "/") {
+ open(MSGFILE,">>data/msgs/$room");
+ open(PID,"<data/online/pids/$room");
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b><;\n";
+ my @pids = <PID>;
+ close MSGFILE;
+ close PID;
+ kill INT => @pids;
+ &log("<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b>") if ($room eq "Cyberbar");
+ &reload_html($whisper,$tmp);
+} else {
+ &cmd($$rmsg);
+}
+
+sub reload_html { # Wird neugeladen, wenn eine Nachricht getextet wird!
+ my ($whisper,$action) = @_;
+ print "<html><head><script language=\"JavaScript\">";
+ if ($action eq "change_room") {
+ print "open(\"online.pl?alias=$alias&room=$room&tmpid=$tmpid\",\"online\");";
+ print "parent.input.document.inf.room.value = \"$room\";";
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ } elsif ($action eq "change_colors") {
+ print "parent.input.document.inf.col.value = \"$col\";";
+ print "parent.input.document.inf.secol.value = \"$secol\";";
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ } elsif ($action eq "whisper") {
+ print "parent.input.document.inf.whisper.value = \"$whisper\";";
+ } elsif ($action eq "away") {
+ print "parent.input.document.inf.tmp.value = \"away\";";
+ } elsif ($action eq "quit") {
+ print "open(\"index.pl?tmp=quit\",\"_top\");";
+ }
+ print "parent.input.document.inf.tmp.value = \"notaway\";" if ($tmp eq "away");
+ print "</script></head><body bgcolor=$col>";
+ print
+ $q->end_html;
+}
+
+sub change_room { # Den Chat-Raum wechseln
+ my ($method,$newroom,$oldroom,$alias2follow) = @_;
+ open(RSTAT, "<data/online/rstat/$newroom"); #Überprüfen, ob Alias Raum betreten darf
+ my @rstat = <RSTAT>;
+ close RSTAT;
+ if ($rstat[0] eq "1\n") {
+ &hierachie($alias);
+ if ($hierachie eq "wa" || $hierachie eq "ow") { } else {
+ &post_prv($alias,"<font size=2 color=ffffff>Der Raum \"<font color=ffa500>$newroom</font>\" ist leider abgesperrt!</font>");
+ &reload_html($whisper,$action);
+ exit;
+ }
+ }
+ open(MSGFILE,">>data/msgs/$room");
+ print MSGFILE "$alias<;".time."<;cr<;$newroom<;!<;\n";
+ close MSGFILE;
+ $room = $oldroom;
+ my $tmpstamp = time+5;
+ &zeit;
+ if ($method eq "j") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ open(MSGFILE,">>data/msgs/$room");
+ print MSGFILE "$alias<;$tmpstamp<;!<;!<;<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i><;\n";
+ close MSGFILE;
+ } elsif ($method eq "ju") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ...</font></i>");
+ open(MSGFILE,">>data/msgs/$room");
+ print MSGFILE "$alias<;$tmpstamp<;!<;!<;<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i><;\n";
+ close MSGFILE;
+ }
+ open(PID,"<data/online/pids/$room");
+ my @pids = <PID>;
+ close PID;
+ kill INT => @pids;
+ unlink("data/online/rooms/$oldroom/$alias");
+ &rm_rstat($alias,$oldroom);
+ &check_online;
+}
+
+sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat
+ my ($r_alias,$r_room) = @_;
+ $r_besetzer = "false";
+ open(DATEI,"<data/online/rstat/$r_room");
+ @r_stat = <DATEI>;
+ close DATEI;
+ for($i=2;$i<=$#r_stat;$i++) {
+ $r_besetzer = "true" if ($r_stat[$i] eq $r_alias || $r_stat[$i] eq $r_alias."\n");
+ }
+}
+
+sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können.
+ $_[0] = $_[0]." ";
+ $_[0] = substr($_[0], 1, length($_[0])-1);
+ my @cmd = split(/ /, $_[0]);
+ my $cmd = substr($_[0],0 , index($_[0], " "));
+#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -<
+#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -<
+ if ($cmd eq "about") {
+ &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Erstellt von Paul C. Bütow (2000 - 2001).</font>");
+ &reload_html;
+ exit;
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde
+ my $away_msg = undef;
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ if ($tmp ne "autoaway") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$away_msg</font> ) ...</i></font>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wurde vom System abgemeldet ...</i></font>");
+ }
+ &reload_html($whisper,"away");
+ exit;
+#############>- EIGENEN CHATBILDSCHIRM LÖSCHEN -<
+ } elsif ($cmd eq "clear") {
+ &post_prv($alias,"<script language=\"JavaScript\">window.open(\"push.pl?alias=$alias&room=$room&var=clear_screen&tmpid=$tmpid\",\"main\");</script>");
+ &reload_html;
+ exit;
+#############>- FARBEN WECHSELN -<
+ } elsif ($cmd eq "col") {
+ $col = $cmd[1];
+ my $tmpsecol = $cmd[2];
+ if ($tmpsecol eq "") {
+ $secol = $col
+ } else {
+ $secol = $tmpsecol;
+ }
+ 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;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt ...</font></i>");
+ &reload_html($whisper,"change_colors");
+ exit;
+#############>- AKTUELLES DATUM UND URZEIT AUSGEBEN -<
+ } elsif ($cmd eq "date") {
+ &zeit;
+ &post_prv("$alias","<font size=2 color=ffffff>Heute ist der $day.$month. Jahr $year. Es ist genau $hours:$min Uhr und $sec Sekunden.</font>");
+ &reload_html;
+ 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") {
+ my $me_msg;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ if ($cmd eq "m") {
+ &post($room,"<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>");
+ } else {
+ &post($room,"<i><font color=$col>$alias $me_msg</font></i>");
+ }
+ &reload_html;
+ exit;
+#############>- MEMO SCHREIBEN -<
+ } elsif ($cmd eq "memo") {
+ my $alias2memo = $cmd[1];
+ if(-f "data/user/options/$alias2memo") {
+ my $memo_msg;
+ for ($i=2; $i <= $#cmd; $i++) {
+ $memo_msg = $memo_msg." ".$cmd[$i];
+ }
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ open(MEMO,">>data/user/memos/$alias2memo") || &error("Konnte >>data/user/memos/$alias2memo nicht öffnen");
+ print MEMO "<font size=2 color=ffffff>($day.$month. - $hours:$min:$sec) <font color=ffa500>$alias</font> hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>\n";
+ close MEMO;
+ &reload_html;
+ exit;
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>");
+ &reload_html;
+ exit;
+#############>- FLÜSTERN ( Auch mit '/' ) -<
+ } elsif ($cmd eq "msg" || $cmd eq "") {
+ my ($alias2post,$msg2post,$action) = ($cmd[1]);
+ if ($cmd eq "msg") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $action = "whisper";
+ } else {
+ $alias2post = $whisper;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ }
+ if (-f "data/online/users/$alias2post") {
+ &post_prv($alias2post,"<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i>");
+ &post_prv($alias,"<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i>");
+ &reload_html($alias2post,$action);
+ exit;
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>");
+ &reload_html;
+ exit;
+#############>- TOTALONLINEZEIT VON ALIAS ANZEIGEN -<
+ } 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 / 60));
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2prove <font color=ffffff> war insgesamt schon $totaltime Minuten online!</font></font>");
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+ exit;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &reload_html($whisper,"quit");
+ &zeit;
+ if ($tmp ne "autologout") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ... </font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wurde vom System automatisch ausgeloggt ... </font></i>");
+ }
+ sleep 1;
+ &rm_alias($alias,$room);
+ exit;
+#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -<
+ } elsif ($cmd eq "rmgb") {
+ unlink("data/user/gbooks/$alias");
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias löscht sein gesamtes Gästebuch ...</font></i>");
+ &reload_html;
+ exit;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my $msg2scream;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ my $msg2post = "\U$msg2scream";
+ &post($room,"<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>");
+ &reload_html;
+ exit;
+#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGELOGT HAT -<
+ } 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");
+ local $lastlogin = <LASTLOGIN>;
+ close LASTLOGIN;
+ local $timestamp = sprintf("%.2f",((time() - $lastlogin) / 3600));
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingelogt!</font></font>");
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2prove <font color=ffffff> hat sich seit der Einführung dieses Befehls noch nie eingelogt!</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+ exit;
+#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -<
+ } elsif ($cmd eq "w") {
+ open(RSTAT,"data/online/rstat/$room");
+ my @rstat = <RSTAT>;
+ close RSTAT;
+ chomp($rstat[1]);
+ my $theme = "Raumthema:".$rstat[1] if ($rstat[1] ne undef);
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ my ($is,$nr) = ("t",0);
+ opendir(DIR,"data/online/rooms/$room");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ my $personen;
+ foreach(@dir) {
+ if (-f "data/online/rooms/$room/$_") {
+ $personen = $personen." ".$_;
+ $nr++;
+ }
+ }
+ &post_prv($alias,"<font size=2 color=ffffff>Der aktuelle Raum: $room $theme $door ($nr) : <font color=ffa500>$personen</font></font>");
+ &reload_html;
+ exit;
+#############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -<
+ } elsif ($cmd eq "wc" || $cmd eq "wc/") {
+ my $raum = $cmd[1];
+ my $personen;
+ if ($raum eq "" && $cmd eq "wc") {
+ opendir(USERS,"data/online/users");
+ my @users = readdir(USERS);
+ close USERS;
+ foreach(@users) {
+ $personen = $personen." ".$_ if (-f "data/online/users/$_");
+ }
+ my $nr = ($#users-1);
+ my ($nrs,$is) = ("","ist");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "sind";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>$nr Person$nrs $is insgesamt eingelogt: <font color=ffa500>$personen</font></font>");
+ } elsif ($raum eq "" && $cmd eq "wc/") {
+ my $msg2post;
+ opendir(DIR,"data/online/rooms");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ opendir(DIR,"data/online/rooms/$_");
+ my @dir2 = readdir(DIR);
+ closedir(DIR);
+ open(RSTAT,"<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]."]: </font></b></td></tr><tr><td><font size=2 color=ffa500>";
+ foreach $chatter (@dir2) {
+ if (-f "data/online/rooms/$_/$chatter") {
+ $msg2post = $msg2post."$chatter ";
+ }
+ }
+ print "</font></td>";
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>Folgende Räume sind offen:</font><table>$msg2post</table>");
+ } elsif ($raum ne "") {
+ my $personen;
+ opendir(DIR,"data/online/rooms/$raum");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_");
+ }
+ my ($nr,$is) = (($#dir-1),"t");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "n";
+ }
+ &post_prv($alias,"<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+ &reload_html;
+ 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];
+ opendir(ROOMS,"data/online/rooms");
+ my @dir = readdir(ROOMS);
+ closedir(ROOMS);
+ foreach $raum (@dir) {
+ opendir(DIR2,"data/online/rooms/$raum");
+ my @dir2 = readdir(DIR2);
+ closedir(DIR2);
+ foreach $user (@dir2) {
+ if (-f "data/online/rooms/$raum/$user") {
+ if ($user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>");
+ } else {
+ &change_room("ju",$raum,$room,$alias2search);
+ }
+ &reload_html($whisper,"change_room");
+ exit;
+ }
+ }
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff> ist nicht eingelogt !</font></font>");
+ &reload_html;
+ exit;
+#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -<
+ } elsif ($cmd eq "l") {
+ &prove_besetzer($alias,$room);
+ &hierachie($alias);
+ if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") {
+ my $lock = "0\n";
+ &zeit;
+ if ($room eq "Cyberbar") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum ohne Erfolg ab ...</font></i>");
+ } else {
+ if ($r_stat[0] == 0) {
+ $lock = "1\n";
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum ab ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum auf ...</font></i>");
+ }
+ 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;
+ exit;
+#############>- RAUMBESETZER ERNENNEN -<
+ } elsif ($cmd eq "su") {
+ &prove_besetzer($alias,$room);
+ &hierachie($alias);
+ if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2su = $cmd[1];
+ opendir(DIR,"data/online/rooms/$room");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ foreach(@dir) {
+ if ($_ eq $alias2su) {
+ open(DATEI,"<data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ &hierachie($alias2su);
+ &prove_besetzer($alias2su,$room);
+ if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") {
+ &reload_html;
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>");
+ exit;
+ }
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias ernennt \"$alias2su\" zum Raumbesetzer ...</font></i>");
+ open(DATEI,">>data/online/rstat/$room");
+ print DATEI $alias2su."\n";
+ close DATEI;
+ &reload_html;
+ exit;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>");
+ }
+ &reload_html;
+ exit;
+#############>- RAUMBESETZER ENTNENNEN -<
+ } elsif ($cmd eq "rsu") {
+ &prove_besetzer($alias,$room);
+ &hierachie($alias);
+ if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2rsu = $cmd[1];
+ open(DATEI,"<data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ &prove_besetzer($alias2rsu,$room);
+ if ($r_besetzer eq "true") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ...</font></i>");
+ 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");
+ }
+ open(DATEI,">data/online/rstat/$room");
+ print DATEI $newrstat;
+ close DATEI;
+ } else {
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2rsu <font color=ffffff>ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !</font></font>");
+ }
+ }
+ &reload_html;
+ exit;
+#############>- RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "t") {
+ &prove_besetzer($alias,$room);
+ &hierachie($alias);
+ if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") {
+ my $theme;
+ &zeit;
+ if ($cmd[1] ne undef) {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $theme = $theme." ".$cmd[$i];
+ }
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias gibt dem Raum das Thema (<font color=red> $theme </font>) ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias löscht das Thema des Raums ...</font></i>");
+ }
+ $theme = $r_stat[0].$theme."\n";
+ for ($i=2;$i<=$#r_stat;$i++) {
+ $theme = $theme.$r_stat[$i];
+ }
+ open(RSTAT,">data/online/rstat/$room");
+ print RSTAT $theme;
+ close RSTAT;
+ }
+ &reload_html;
+ exit;
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN -<
+ } elsif ($cmd eq "ban") {
+ &hierachie($alias);
+ if ($hierachie eq "ow" || $hierachie eq "wa") {
+ my $alias2ban = $cmd[1];
+ open(BAN,"<data/ban");
+ my @ban = <BAN>;
+ close BAN;
+ if ($cmd[1] eq undef) {
+ my $banned;
+ local $nr = @ban;
+ for ($i=0;$i<=$#ban;$i++) {
+ $banned .= $ban[$i];
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$banned</font></font>");
+ &reload_html;
+ exit;
+ } elsif (-f "data/user/options/$alias2ban") {
+ &hierachie($alias2ban);
+ if ($hierachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2ban <font color=ffffff>ist Wächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ exit;
+ } elsif ($hierachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2ban <font color=ffffff>ist Oberwächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ exit;
+ }
+ foreach $ban (@ban) {
+ if ($ban eq $alias2ban."\n") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>");
+ &reload_html;
+ exit;
+ }
+ }
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verbannt \"$alias2ban\" aus dem Chat ...</font></i>");
+ open(BAN,">>data/ban");
+ print BAN $alias2ban."\n";
+ close BAN;
+ &reload_html;
+ exit;
+ }
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2ban <font color=ffffff>kann nicht verbannt werden da Benutzername nicht existiert!</font></font>");
+ &reload_html;
+ exit;
+ }
+#############>- ALIAS ENTBANNEN -<
+ } elsif ($cmd eq "rban") {
+ &hierachie($alias);
+ if ($hierachie eq "ow" || $hierachie eq "wa") {
+ my $alias2rban = $cmd[1];
+ open(BAN,"<data/ban");
+ @ban = <BAN>;
+ close BAN;
+ foreach $ban (@ban) {
+ if ($ban eq $alias2rban."\n") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias entbannt \"$alias2rban\" ...</font></i>");
+ my @ban2;
+ foreach $ban (@ban) {
+ push(@wa2,$wa) if ($ban ne $alias2rban."\n");
+ }
+ open(BAN,">data/ban");
+ print BAN @ban2;
+ close BAN;
+ &reload_html;
+ exit;
+ }
+ }
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2rban <font color=ffffff>ist nicht verbannt!</font></font>");
+ &reload_html;
+ exit;
+ }
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+} elsif ($cmd eq "ip") {
+ &hierachie($alias);
+ if ($hierachie eq "ow" || $hierachie eq "wa") {
+ my $alias2prove = $cmd[1];
+ opendir(DIR,"data/online/ident");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ foreach(@dir) {
+ if ($_ eq $alias2prove) {
+ open(DATEI,"<data/online/ident/$alias2prove");
+ local $ipnr = <DATEI>;
+ close DATEI;
+ chomp($ipnr);
+ &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ }
+ &reload_html;
+ exit;
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ &hierachie($alias);
+ if ($hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ opendir(DIR,"data/online/rooms");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ foreach $raum (@dir) {
+ opendir(DIR,"data/online/rooms/$raum");
+ my @dir2 = readdir(DIR);
+ closedir(DIR);
+ foreach $chatter (@dir2) {
+ if ($chatter eq $alias2kick) {
+ &hierachie($alias2kick);
+ if ($hierachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>");
+ } elsif ($hierachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Wächter und kann nicht \"gekickt\" werden !</font></font>");
+ } else {
+ &post_prv("$alias2kick","<script language=\"JavaScript\">window.open(\"index.pl?tmp=kick\",\"_top\");</script>");
+ &zeit;
+ $_ = undef if ($room eq $raum);
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$raum);
+ &rm_alias($alias2kick,$raum);
+ &check_online;
+ }
+ &reload_html;
+ exit;
+ }
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>");
+ }
+ &reload_html;
+ exit;
+#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
+ } elsif ($cmd eq "kill") {
+ &hierachie($alias);
+ if ($hierachie eq "ow") {
+ my $alias2kill = $cmd[1];
+ &hierachie($alias2kill);
+ if ($hierachie eq "ow") {
+ &post_prv($alias,"<font size color=ffa500>$alias2kill</font> <font color=ffffff>ist Oberwächter und kann nicht aus dem System entfernt werden !</font>");
+ } elsif ($hierachie eq "wa") {
+ &post_prv($alias,"<font size color=ffa500>$alias2kill</font> <font color=ffffff>ist Wächter und kann nicht aus dem System entfernt werden !</font>");
+ } else {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias killt \"$alias2kill\" ganz und gar aus dem System ...</font></i>");
+ 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");
+ }
+ }
+ &reload_html;
+ exit;
+#############>- EINEN ANDEREN RAUM AUF-/ABSPERREN -<
+ } elsif ($cmd eq "sl") {
+ &hierachie($alias);
+ if ($hierachie eq "ow" || $hierachie eq "wa") {
+ my $sl_room = $cmd[1];
+ if (-e "data/online/rooms/$sl_room") {
+ my $lock = "0\n";
+ &zeit;
+ open(RSTAT,"<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>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum \"$sl_room\" von aussen ab ...</font></i>",$sl_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum \"$sl_room\" von aussen auf ...</font></i>",$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 size=2 color=ffffff>Der Raum <font color=ffa500>$sl_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ exit;
+ }
+#############>- IN EINEN ANDEREN RAUM HINEINRUFEN -<
+ } elsif ($cmd eq "ss") {
+ &hierachie($alias);
+ if ($hierachie eq "ow" || $hierachie eq "wa") {
+ my $ss_room = $cmd[1];
+ if (-e "data/online/rooms/$ss_room") {
+ my $ss_msg;
+ for ($i=2; $i <= $#cmd; $i++) {
+ $ss_msg = $ss_msg." ".$cmd[$i];
+ }
+ my $msg2scream = "\U$ss_msg";
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias ruft aus dem Raum \"$room\" hinein in den Raum \"$ss_room\": <font color=$col>$msg2scream</font> ...</font></i>",$ss_room);
+ &reload_html;
+ exit;
+ } else {
+ &post_prv($alias,"<font size=2 color=ffffff>Der Raum <font color=ffa500>$ss_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ exit;
+ }
+#############>- EINEN ANDEREN RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "st") {
+ &hierachie($alias);
+ if ($hierachie eq "wa" || $hierachie eq "ow") {
+ my $st_room = $cmd[1];
+ if (-e "data/online/rooms/$st_room") {
+ my $theme;
+ &zeit;
+ if ($cmd[2] ne undef) {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $theme = $theme." ".$cmd[$i];
+ }
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias gibt dem Raum \"$st_room\" das Thema (<font color=red> $theme </font>) ...</font></i>",$st_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias löscht das Thema des Raums \"$st_room\" ...</font></i>",$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 size=2 color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>");
+ }
+ }
+ &reload_html;
+ exit;
+#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -<
+ } elsif ($cmd eq "sys") {
+ &hierachie($alias);
+ if ($hierachie eq "ow") {
+ my $sys_msg;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $sys_msg = $sys_msg." ".$cmd[$i];
+ }
+ &zeit;
+ $sys_msg = "<i><font color=ffffff>($hours:$min:$sec)</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);
+ }
+ &log($sys_msg);
+ }
+ &reload_html;
+ exit;
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN -<
+ } elsif ($cmd eq "wa") {
+ &hierachie($alias);
+ if ($hierachie eq "ow") {
+ my $alias2wa = $cmd[1];
+ &hierachie($alias2wa);
+ if ($hierachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2wa <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>");
+ &reload_html;
+ exit;
+ } elsif ($hierachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2wa <font color=ffffff>ist bereits als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>");
+ &reload_html;
+ exit;
+ }
+ if (-f "data/user/options/$alias2wa") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2wa\" zum Wächter ...</font></i>");
+ open(WA,">>data/wa");
+ print WA $alias2wa."\n";
+ close WA;
+ &reload_html;
+ exit;
+ }
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2wa <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ &reload_html;
+ exit;
+ }
+#############>- ALIAS DIE WÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "rwa") {
+ &hierachie($alias);
+ if ($hierachie eq "ow") {
+ my $alias2rwa = $cmd[1];
+ &hierachie($alias2rwa);
+ if ($hierachie eq "wa") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2rwa\" vom Wächter zum normalen Chatter degradiert ...</font></i>");
+ open(WA,"<data/wa");
+ @wa = <WA>;
+ close WA;
+ my @wa2;
+ foreach $wa (@wa) {
+ push(@wa2,$wa) if ($wa ne $alias2rwa."\n");
+ }
+ open(WA,">data/wa");
+ print WA @wa2;
+ close WA;
+ } else {
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2rwa <font color=ffffff>ist kein Wächter und können die Wächterrechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+ exit;
+ }
+#############>- ADMINISTRATORBEFEHLE -<
+#############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -<
+ } elsif ($cmd eq "ow" && $alias eq "Snooper") {
+ my $alias2ow = $cmd[1];
+ &hierachie($alias2ow);
+ if ($hierachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2ow <font color=ffffff>ist bereits als Wächter eingetragen. Wächter können nicht gleichzeitig Oberwächter sein!</font></font>");
+ &reload_html;
+ exit;
+ } elsif ($hierachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2ow <font color=ffffff>ist bereits als Oberwächter eingetragen!</font></font>");
+ &reload_html;
+ exit;
+ }
+ if (-f "data/user/options/$alias2ow") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2ow\" zum Oberwächter ...</font></i>");
+ open(OW,">>data/ow");
+ print OW $alias2ow."\n";
+ close OW;
+ &reload_html;
+ exit;
+ }
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2ow <font color=ffffff>kann nicht zum Oberwächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ &reload_html;
+ exit;
+#############>- ALIAS DIE OBERWÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "row" && $alias eq "Snooper") {
+ &hierachie($alias);
+ if ($hierachie eq "ow") {
+ my $alias2row = $cmd[1];
+ &hierachie($alias2row);
+ if ($hierachie eq "ow") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2row\" vom Oberwächter zum normalen Chatter degradiert ...</font></i>");
+ open(OW,"<data/ow");
+ @ow = <OW>;
+ close OW;
+ my @ow2;
+ foreach $ow (@ow) {
+ push(@ow2,$ow) if ($ow ne $alias2row."\n");
+ }
+ open(OW,">data/ow");
+ print OW @ow2;
+ close OW;
+ } else {
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2row <font color=ffffff>ist kein Oberwächter und können die Wächterrechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+ exit;
+ }
+#############>- PASSWORD EINES BENUTZERS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "pw" && $alias eq "Snooper") {
+ my $pw2show = $cmd[1];
+ if (-f "data/user/options/$pw2show") {
+ open(PW,"<data/user/options/$pw2show");
+ @pw = <PW>;
+ close PW;
+ &post_prv($alias,"<font size=2 color=ffa500>$pw2show <font color=ffffff> hat das Passwort \"".$pw[0]."\" !</font></font>");
+ &reload_html;
+ exit;
+ }
+ &post_prv($alias,"<font size=2 color=ffa500>$pw2show <font color=ffffff> existiert nicht in der Benutzerdatenbank !</font></font>");
+ &reload_html;
+ exit;
+#############>- SYSTEMMELDUNG POSTEN -<
+ } elsif ($cmd eq "cool" && $alias eq "Snooper" || $alias eq "Peacemaker") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$msg2post</font></i>");
+ &reload_html;
+ exit;
+#############>- ENDE DER CHATBEFEHLE -<
+ }
+&post_prv($alias,"<font size=2 color=ffffff>Der Chatbefehl <font color=ffa500>/$cmd</font> existiert nicht oder Du hast keine Berechtigung diesen Befehl auszuführen!</font></font>");
+&reload_html;
+}
\ No newline at end of file diff --git a/0.4.7a2/main2.pl b/0.4.7a2/main2.pl new file mode 100644 index 0000000..36a0012 --- /dev/null +++ b/0.4.7a2/main2.pl @@ -0,0 +1,594 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print
+ $q->header();
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+
+$var = $q->param("var");
+if ($var eq "list_alias_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &list_alias_html;
+} elsif ($var eq "alias_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ $tmp = $q->param("tmp");
+ &alias_html;
+} elsif ($var eq "edit_profile_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ $room = $q->param("room");
+ &edit_html("edit_profile_html");
+} elsif ($var eq "edit_options_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ $room = $q->param("room");
+ $col = $q->param("col");
+ $secol = $q->param("secol");
+ &edit_html("edit_options_html");
+} elsif ($var eq "gb_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &gb_html;
+} elsif ($var eq "post_gb") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &secure_checkid($alias);
+ $msg = $q->param("msg");
+ $tmp = $q->param("tmp");
+ $id = $q->param("id");
+ &post_gb;
+} elsif ($var eq "edit_profile") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ $room = $q->param("room");
+ &secure_checkid($alias);
+ &edit("edit_profile");
+} elsif ($var eq "edit_options") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &secure_checkid($alias);
+ $tmp = $q->param("tmp");
+ $id = $q->param("id");
+ $room = $q->param("room");
+ $col = $q->param("col");
+ $secol = $q->param("secol");
+ &edit("edit_options");
+} elsif ($var eq "rm_gb_alias") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &secure_checkid($alias);
+ $tmp = $q->param("tmp");
+ $id = $q->param("id");
+ &rm_gb;
+} else {
+ &error("Parameter fehlt");
+}
+
+###########################
+##HAUPTTEIL DIESER DATEI:##
+###########################
+
+sub gb_html { # Das Benutzerboard/Gästebuch.
+ my $message = $_[0];
+ &start_html("Benutzerboard");
+if ($message eq "post_empty") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Du wolltest soeben einen leeren Eintrag posten. Bitte schreib
+ <i>
+ zuerst
+ </i>
+ einen Text und poste
+ <u>dann</u>
+ !
+ </div>
+ <hr>
+END
+} elsif ($message eq "post_ok") {
+print <<END;
+ <div class=b>
+ Meldung:
+ </div>
+ <div>
+ Vielen Dank für Deinen Beitrag. Wenn Du willst, kannst Du jetzt gleich noch einen Eintrag posten ...
+ </div>
+ <hr>
+END
+} else {
+print <<END;
+ <div>
+ Falls Du Anregungen oder Verbesserungsvorschläge für die Community hast, dann poste doch einen kleinen Eintrag :-)
+ </div>
+ <hr>
+END
+}
+print <<END;
+ <form action="main2.pl">
+ <input type="hidden" name="var" value="post_gb">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <input type="hidden" name="tmp" value="guestbook">
+ <input type="hidden" name="id" value="y">
+ <input size="40" name="msg">
+ <font color="ffffff">
+ <input type="submit" value="Hinterlassen ...">
+ </font>
+ </form>
+ <hr>
+END
+ if (-e "data/guestbook") {
+ open (DATEI,"<data/guestbook") || &error("Konnte dat/guestbook nicht öffnen");
+ @datei = <DATEI>;
+ close DATEI;
+ print
+ $q->div(@datei);
+ }
+ print
+ $q->end_html;
+}
+
+
+sub post_gb { # Wenn etwas in ein Gästebuch eingetragen wird
+ &zeit;
+ if ($msg eq "") {
+ if ($id eq "y") { # Überprüfen, ob Benutzerboard- oder Privatgästebuch
+ &gb_html("post_empty");
+ } else {
+ &alias_html("post_empty");
+ }
+ exit;
+ }
+ $msg =~ s#<#<\;#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 $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ push(@newdatei,@gb);
+ open(GB,">$tmpath");
+ print GB @newdatei;
+ close GB;
+ if ($id eq "y") {
+ &gb_html("post_ok");
+ exit;
+ } else {
+ post_prv("$tmp","<font size=2 color=ffffff><a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp&tmpid=$tmpid\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp&tmpid=$tmpid\" target=\"_new\">Dein Profil</a> gehängt ... </font>");
+ &alias_html;
+ exit;
+ }
+}
+
+sub rm_gb { # Gästebucheintrag entfernen
+ 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 { # Liste aller Benutzer
+ &start_html("Alle Benutzer");
+ opendir(REGISTERED,"data/user/options");
+ my @users = readdir(REGISTERED);
+ closedir(REGISTERED);
+ my @liste = sort(@users);
+ my $nr = $#users-1;
+print <<END;
+ <div>
+ Es sind z.Z. genau $nr Benutzernamen in der Datenbank vorhanden! (Sortiert nach #, A-Z, a-z)
+ </div>
+ <hr>
+ <div>
+END
+ foreach(@liste) {
+ if (-f "data/user/options/$_") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid" },
+ "$_"),
+ " ";
+ }
+ }
+print <<END;
+ </div>
+</body>
+</html>
+END
+}
+
+sub alias_html { # Anzeigen eines Benutzerprofils
+ 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);
+print <<END;
+<div>
+ <a href="htdocs.pl?var=werda_html&alias=$alias&tmpid=$tmpid">Hier</a>
+ gehts zur Gesamtübersicht !
+</div>
+<hr>
+END
+if ($message eq "rm_ok") {
+print <<END;
+ <div class=b>
+ Meldung:
+ </div>
+ <div>
+ Der von Dir gewählte Eintrag wurde erfolgreich gelöscht.
+ </div>
+ <hr>
+END
+} elsif ($message eq "post_empty") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Du wolltest soeben einen leeren Eintrag posten. Bitte schreib
+ <i>
+ zuerst
+ </u>
+ einen Text und poste
+ <u>dann</u>
+ !
+ <hr>
+END
+}
+ open(PROFILE,"<data/user/profiles/$tmp");
+ @data = <PROFILE>;
+ close PROFILE;
+print <<END;
+ <div>
+ Dieses Profil wurde insgesamt schon $counter mal aufgerufen !
+ <br>
+ <br>
+ Alias: $tmp
+ <br>
+ <br>
+ Nachname: $data[0]
+ <br>
+ <br>
+ Vorname: $data[1]
+ <br>
+ <br>
+ Alter: $data[2]
+ <br>
+ <br>
+ Wohnort: $data[3]
+ <br>
+ <br>
+ E-Mail:
+ <a href="mailto:$data[4]">$data[4]</a>
+ <br>
+ <br>
+ ICQ-Nummer: $data[5]
+ <br>
+ <br>
+ Homepage:
+ <a href="$data[6]" target="_new">$data[6]</a>
+ <br>
+ <br>
+ Weiteres:
+ <br>
+ $data[7]
+ <hr>
+ Hier kannst Du $tmp eine Nachricht hinterlassen!
+ <form action="main2.pl">
+ <input type="hidden" name="var" value="post_gb">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <input type="hidden" name="tmp" value="$tmp">
+ <input type="text" size="40" name="msg">
+ <font color="ffffff">
+ <input type="submit" value="Hinterlassen ...">
+ </font>
+ </form>
+ <hr>
+END
+if (-e "data/user/gbooks/$tmp") {
+ open (DATEI,"<data/user/gbooks/$tmp") || &error("Konnte data/user/gbooks/$tmp nicht öffnen");
+ @datei = <DATEI>;
+ close DATEI;
+ if ($alias ne $tmp) {
+ print @datei;
+ } else {
+print <<END;
+ <table>
+ <form action="main2.pl">
+ <input type="hidden" name="var" value="rm_gb_alias">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <input type="hidden" name="tmp" value="$tmp">
+END
+for($i=0; $i <= $#datei; $i++) {
+print <<END;
+ <tr>
+ <td>
+ <input type="radio" name="id" value="$i">
+ </td>
+ <td>
+ <div class=q>
+ $datei[$i]
+ </div>
+ </td>
+ </tr>
+END
+}
+print <<END;
+ </table>
+ <table>
+ <tr>
+ <td>
+ <font color=ffffff>
+ <input type="submit" value="Makierten Eintrag löschen">
+ </font>
+ </td>
+ <td>
+ <font color=ffffff>
+ <input type="reset" value="Makierung rückgängig machen">
+ </font>
+ </td>
+ </tr>
+ </table>
+ </form>
+END
+}
+}
+ print
+ $q->end_html;
+}
+
+sub edit_html { # Chat-Optionen / Benutzerprofil editieren
+ my ($method,$message) = @_;
+ &start_html("Benutzerprofil ändern");
+ 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;
+ if ($method eq "edit_options_html") {
+ chomp($data[0]);
+ if ($message eq "edit_options_ok") {
+print <<END;
+<script language="JavaScript">
+ open("main.pl?var=change_colors&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid","reload");
+ open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","menu");
+</script>
+<div class=b>
+ Hinweis:
+</div>
+<div>
+ Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um
+ weiterzuchatten einfach Fenster schliessen!
+</div>
+<hr>
+END
+ } elsif ($message eq "edit_pw_wrong") {
+print <<END;
+<div class=b>
+ ACHTUNG!
+</div>
+<div>
+ Du hast soeben versucht, dein Passwort zu ändern. Jedoch stimmte die Erste Eingabe nicht mit der Zweiten überein.
+ Bitte versuch es erneuert ...
+</div>
+<hr>
+END
+ } else {
+ print
+ $q->div( "Hier kannst Du Deine Chat-Optionen editieren!" ),
+ $q->hr;
+ }
+print <<END;
+<script lang="javascript" type="text/javascript">
+<!--
+
+function radioWert(rObj) {
+ for (var i=0; i<rObj.length; i++) if (rObj[i].checked) return rObj[i].value;
+ return false;
+}
+
+function insertcode( code ) {
+ document.optionen.elements[radioWert(document.optionen.eingabe)].value = code;
+}
+
+//-->
+</script>
+
+<form name="optionen" action="main2.pl">
+ <input type="hidden" name="var" value="edit_options">
+ <table>
+ <tr>
+ <td>
+ <div>
+ Dein Passwort
+ <font color=ffa500>
+ (Gut merken !!)
+ </font>
+ <br>
+ <input type="password" name="id" value="$data[0]">
+ </div>
+ </td>
+ <td width=20>
+ </td>
+ <td>
+ <div>
+ Geb hier das Passwort erneuert ein:
+ <br>
+ <input type="password" name="tmp" value="$data[0]">
+ </div>
+ </td>
+ </tr>
+ </table>
+<br>
+<br>
+ <table>
+ <tr>
+ <td>
+ <div>
+ <input type="radio" name="eingabe" value="col" checked>
+ Auswahl von Farbe 1
+ <br>
+ (Farbe Deines Nicks):
+ <br>
+ <input name="col" size="6" maxlength="6" value="$data[1]">
+ </div>
+ </td>
+ <td width=20>
+ </td>
+ <td>
+ <div>
+ <input type="radio" name="eingabe" value="secol">
+ Auswahl von Farbe 2
+ <br>
+ (Farbe Deiner Nachrichten):
+ <br>
+ <input name="secol" size="6" maxlength="6" value="$data[2]">
+ </div>
+ </td>
+ </tr>
+ </table>
+<br>
+ <div>
+ Beliebige Auswahl makieren und Farbe wählen. Um Deine Optionen abzuspeichern,
+ auf "Daten ändern" klicken!
+ </div>
+ <br>
+END
+ open(COLORS,"<colors.sno");
+ @colors = <COLORS>;
+ close COLORS;
+ print @colors;
+ } elsif ($method eq "edit_profile_html") {
+ if ($message eq "edit_profile_ok") {
+print <<END;
+ <div class=b>
+ Hinweis:
+ </div>
+ <div>
+ Du hast soeben Dein Profil erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren:
+ <hr>
+END
+ } else {
+ print
+ $q->div( "Hier kannst Du Dein Profil editieren!" ),
+ $q->hr;
+ }
+print <<END;
+ <form action="main2.pl">
+ <input type="hidden" name="var" value="edit_profile">
+ <div>
+ Dein Nachname:
+ <br>
+ <input name="nachname" value="$data[0]">
+ </div>
+ <br>
+ <div>
+ Dein Vorname:
+ <br>
+ <input name="vorname" value="$data[1]">
+ </div>
+ <br>
+ <div>
+ Dein Alter:
+ <br>
+ <input name="alter" value="$data[2]">
+ </div>
+ <br>
+ <div>
+ Dein Wohnort:
+ <br>
+ <input name="wohnort" value="$data[3]">
+ </div>
+ <br>
+ <div>
+ Deine E-Mail Adresse:
+ <br>
+ <input name="email" value="$data[4]">
+ </div>
+ <br>
+ <div>
+ Deine ICQ-Nummer:
+ <br>
+ <input name="icq" value="$data[5]">
+ </div>
+ <br>
+ <div>
+ Deine Homepage:
+ <br>
+ <input name="homepage" value="$data[6]">
+ </div>
+ <br>
+ <div>
+ Weiteres:
+ <br>
+ <textarea rows="5" cols="40"name="weiteres" wrap="virtual">$data[7]</textarea>
+ </div>
+END
+ }
+print <<END;
+ <hr>
+ <font color=ffffff>
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <input type="hidden" name="room" value="$room">
+ <input type="submit" value="Daten ändern ...">
+ </font>
+ </form>
+</body>
+</html>
+END
+}
+
+
+sub edit { # Benutzerprofil od. Chat-Optionen abspeichern
+ my $method = $_[0];
+ &zeit;
+ if ($method eq "edit_profile") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat sein Profil geändert ...</font></i>");
+ open(PROFILE,">data/user/profiles/$alias");
+ print PROFILE $q->param('nachname')."\n".$q->param('vorname')."\n".$q->param('alter')."\n".$q->param('wohnort')."\n".$q->param('email')."\n".$q->param('icq')."\n".$q->param('homepage')."\n".$q->param('weiteres');
+ 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");
+ exit;
+ }
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat seine Chateinstellungen geändert ...</font></i>");
+ open(OPTIONS,">data/user/options/$alias");
+ print OPTIONS $id."\n".$col."\n".$secol;
+ close OPTIONS;
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
diff --git a/0.4.7a2/online.pl b/0.4.7a2/online.pl new file mode 100644 index 0000000..b6346c5 --- /dev/null +++ b/0.4.7a2/online.pl @@ -0,0 +1,71 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print
+ $q->header();
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+$room = $q->param("room");
+
+&secure_checkid($alias);
+
+# Onlinezeit zählen !
+open(DATEI,"<data/online/users/$alias");
+ my $oldstamp = <DATEI>;
+close DATEI;
+ if ($oldstamp > (time - 60)) {
+ 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;
+ }
+##### ENDE
+
+&start_html("Online","online");
+&online($alias,$room);
+opendir(ROOMS,"data/online/rooms/".$room);
+ my @rooms = readdir(ROOMS);
+closedir(ROOMS);
+print
+ $q->div( "$room:" ),
+ "<font size=1 color=ffffef face=arial>";
+ foreach $online (@rooms) {
+ if (-f "data/online/rooms/$room/$online") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$online&tmpid=$tmpid",
+ -target=>"$online" }, "$online"), $q->br;
+ }
+ }
+print
+ "</font>",
+ $q->end_html;
+
+sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern
+ my ($alias,$room) = @_;
+ open(DATEI,">data/online/users/$alias");
+ print DATEI time;
+ close DATEI;
+ if (-f "data/online/rooms/$room") { } else { mkdir "data/online/rooms/$room", 0777; }
+ if (-f "data/online/rstat/$room") { } else {
+ open(DATEI,">data/online/rstat/$room"); # Raumbesetzerstatus setzen
+ print DATEI "0\n\n$alias\n";
+ close DATEI;
+ }
+ open(DATEI,">data/online/rooms/$room/$alias");
+ print DATEI time;
+ close DATEI;
+ open(DATEI,"<data/online/prove"); # Räume und Chatter auf Existenz überprüfen
+ my $provetime = <DATEI>;
+ close DATEI;
+ if ($provetime < (time - 30)) {
+ &check_online;
+ }
+}
\ No newline at end of file diff --git a/0.4.7a2/push.pl b/0.4.7a2/push.pl new file mode 100644 index 0000000..f8b8a78 --- /dev/null +++ b/0.4.7a2/push.pl @@ -0,0 +1,112 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+CGI->compile(':all');
+$q = new CGI;
+print
+ $q->header;
+require config;
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+&secure_checkid($alias);
+$room = $q->param("room");
+my $pid = $$;
+$| = 1;
+
+print <<END;
+<html>
+ <head>
+<script language="JavaScript">
+<!--
+// Scroll-Routine von Anklepper (http://www.anklepper.de)
+// speziell für yChat (http://www.yChat.de), Copyright 2000
+scrolling = true;
+moves_steps = 4; // Schrittgröße
+moves_interval = 4; // Schrittgeschwindigkeit
+
+function moves()
+{
+ if( scrolling != false )
+ window.scrollBy( 0, moves_steps );
+ window.setTimeout( "moves()", moves_interval );
+}
+
+moves();
+//-->
+</script>
+ </head>
+<body bgcolor=000000 link=FFFFFF alink=FFFFEF vlink=FFFFEF>
+<font size=1 color=ffffff face=arial>$title - Created & Copyright by Paul C. Bütow [PID: $pid]</font><br>
+END
+
+my $msgfile;
+
+
+if (-f "data/user/memos/$alias") {
+ open(MEMOS,"<data/user/memos/$alias");
+ my $memos = <MEMOS>;
+ close MEMOS;
+ print $memos;
+ unlink("data/user/memos/$alias");
+}
+
+my $startime,$change_room,@pids;
+$SIG{INT} = \&sendmsgs;
+OPENMSGFILE:
+$change_room = 0;
+$startime = time;
+
+if (-e "data/msgs/$room") {
+ open(MSGFILE,"<data/msgs/$room");
+ open(PID,">>data/online/pids/$room");
+ print PID $pid."\n";
+ close PID;
+} else {
+ sleep 1;
+ goto OPENMSGFILE;
+}
+
+&sendmsgs;
+
+while (-e "data/online/users/$alias") {
+ goto OPENMSGFILE if ($change_room == 1);
+ sleep 15;
+ print "<!--PING//-->\n";
+}
+
+sub sendmsgs {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ my ($address, $stamp, $command, $action, $message) = split(/<;/, $_);
+ if ($address eq "!" || $address eq $alias) {
+ if ($stamp > $startime) {
+ if ($command eq "cr") {
+ &closepid;
+ $room = $action;
+ close MSGFILE;
+ $change_room = 1;
+ }
+ print "$message<br>\n" if ($change_room != 1);
+ }
+ }
+ }
+ seek(MSGFILE, $curpos, 0);
+}
+
+sub closepid {
+ @pids = undef;
+ open(PID,"<data/online/pids/$room");
+ @pids = <PID>;
+ close PID;
+ my @newpids = undef;
+ foreach(@pids) {
+ push @newpids,$_ if ($pid ne $_."\n");
+ }
+open(PID,">data/online/pids/$room");
+ print PID @newpids;
+ close PID;
+}
+
+&closepid;
\ No newline at end of file diff --git a/0.4.7a2/setup.sh b/0.4.7a2/setup.sh new file mode 100644 index 0000000..6b3ef8a --- /dev/null +++ b/0.4.7a2/setup.sh @@ -0,0 +1,50 @@ +#!/bin/sh
+echo
+echo yChat wird konfiguriert!
+echo
+mkdir data
+chmod 777 data
+mkdir data/logs
+chmod 777 data/logs
+mkdir data/msgs
+chmod 777 data/msgs
+mkdir data/user
+chmod 777 data/user
+mkdir data/user/counts
+chmod 777 data/user/counts
+mkdir data/user/memos
+chmod 777 data/user/memos
+mkdir data/user/options
+chmod 777 data/user/options
+mkdir data/user/profiles
+chmod 777 data/user/profiles
+mkdir data/user/gbooks
+chmod 777 data/user/gbooks
+mkdir data/user/lastlogin
+chmod 777 data/user/lastlogin
+mkdir data/online
+chmod 777 data/online
+mkdir data/online/rooms
+chmod 777 data/online/rooms
+mkdir data/online/pids
+chmod 777 data/online/pids
+mkdir data/online/rstat
+chmod 777 data/online/rstat
+mkdir data/online/users
+chmod 777 data/online/users
+mkdir data/online/ident
+chmod 777 data/online/ident
+chmod 777 data/htdocs/*
+chmod 777 *.pl
+chmod 777 config.pm
+mkdir dokus/
+mv *.txt dokus/
+mkdir ../../htdocs/yChat/
+mv *.gif ../../htdocs/yChat/
+mv *.swf ../../htdocs/yChat/
+
+echo
+echo yChat Setup beendet ...
+echo Created and Copyright by Paul C. Bütow
+echo
+
diff --git a/0.4.7a2/y.gif b/0.4.7a2/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.4.7a2/y.gif diff --git a/0.4.7a2/yIntro.swf b/0.4.7a2/yIntro.swf Binary files differnew file mode 100644 index 0000000..81d9015 --- /dev/null +++ b/0.4.7a2/yIntro.swf diff --git a/0.4.7a2/ySymbol.swf b/0.4.7a2/ySymbol.swf Binary files differnew file mode 100644 index 0000000..2b899bb --- /dev/null +++ b/0.4.7a2/ySymbol.swf diff --git a/0.4.7a2/y_.gif b/0.4.7a2/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.4.7a2/y_.gif |
