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 | |
| parent | 2860b03f00e48264ed15c132ad90b240ebe6070b (diff) | |
tagging ychat-perl-legacyychat-perl-legacy
514 files changed, 85995 insertions, 0 deletions
diff --git a/0.2.1/HTDOCS.PL b/0.2.1/HTDOCS.PL new file mode 100644 index 0000000..cc2ae41 --- /dev/null +++ b/0.2.1/HTDOCS.PL @@ -0,0 +1,219 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "help_html") { + &printfile("data/htdocs/help_html","Alle Chatbefehle"); +} elsif ($var eq "menu_html") { + &menu_html; +} elsif ($var eq "werda_html") { + &werda_html; +} elsif ($var eq "logs_html") { + &logs_html; +} elsif ($var eq "view_sulogs_html") { + &hirachie($alias); + if ($hirachie eq "ow") { + &start_html("Oberwächter-Logdateien"); + print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a><hr>"; + &printfile($tmp); + print "</div></body></html>"; + } +} elsif ($var eq "view_logs_html") { + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + &printfile($tmp,$tmp,"log"); + } +} elsif ($var eq "superuser_html") { + &superuser_html; +} else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; +} + +sub menu_html { + if ($tmp eq "quit") { + print + $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" ); + sleep 1; + &remove_online($alias); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + } + &start_html("Menü","menu"); +print <<END; + <center> + <div> + [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp" target="werda">Wer ist da?</a>] + [<a href="main2.pl?var=alias_html&alias=$alias&tmp=$alias" target="DeinProfil">Dein Profil</a>] + [<a href="main2.pl?var=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>] + [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Chat-Optionen</a>] + [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzerliste</a>] + [<a href="htdocs.pl?var=help_html" target="Befehle">Chat-Befehle</a>] + [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Benutzerboard</a>] + [<a href="htdocs.pl?var=superuser_html&alias=$alias" target="Hirachie">Superuser</a>] + [<a href="htdocs.pl?var=logs_html&alias=$alias" target="Logdateien">Logdateien</a>] + [<a href="push.pl?alias=$alias&room=$room&var=clear_screen" target="main">Weiterchatten</a>] + [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias">Chat verlassen</a>] + </div> + </center> +</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 + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + my $room = $_; + &list_dir("data/online/rooms/$room",2); + local $nr = $#dir2-1; + print $q->b( $_ ), + "($nr)", + $q->br; + foreach(@dir2) { + if ($_ ne ".." && $_ ne ".") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " "; + } + } + print $q->br, $q->br; + } + } + print + "</div>", + $q->end_html; +} + +sub logs_html { + &secure_checkip($alias); + &start_html("Logdateien"); + print <<END; +<div> + Hier befinden sich alle Logdateien +</div> +<hr> +END + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + if ($hirachie eq "ow") { + print $q->div( "Folgende Logdateien können nur von Oberwächtern (OW) gelesen werden" ); + &printfile("data/htdocs/logs_html"); + &list_dir("data/logs/ow"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/ow/$_") { + print $q->a( { -href=>"htdocs.pl?var=view_sulogs_html&alias=$alias&tmp=data/logs/ow/$_", + -target=>$_}, + "$_" ). + " ", + } + } + print $q->hr; + } + print $q->div( "Folgende Logdateien können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + &list_dir("data/logs"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/$_") { + print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_", + -target=>"_new" }, + "$_" ), + " "; + } + } + if ($hirachie eq "wa") { + print $q->hr, + $q->div( "Oberwächter können zusätzlich die Systemlogdateien lesen. Du bist allerdings ein \"Wächter\" und ", + " bist nicht dazu berechtigt " ), + $q->br; + &printfile("data/htdocs/logs_html"); + } + } else { + print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ", + "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde. Oberwächter ", + "können folgende Systemlogdateien zusätzlich lesen:" ), + $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 "; + &hirachie($alias); + if ($hirachie eq "ow") { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.</div>", + $q->hr; + } elsif ( $hirachie 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.2.1/INDEX.PL b/0.2.1/INDEX.PL new file mode 100644 index 0000000..1533656 --- /dev/null +++ b/0.2.1/INDEX.PL @@ -0,0 +1,339 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = <DATEI>; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&start_html("Created by Paul C. Bütow 2k"); +print <<END; + <center> + <table width=400> + <tr> + <td> + <b> + <div> + $title + <img src="$gfxpath/yChat.jpg"> + </div> + </b> +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 + &log("system","\"first_http_ok\""); + } +print <<END; + <hr> + <form action="index.pl"> + <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="id" value="$id"> + </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> + <div> + yChat befindet sich momentan noch in der Entwicklungsphase ! + <br> + Fragen gehen an Paul Bütow ( + <a href="mailto:paul\@buetow.oxg.de"> + paul\@buetow.oxg.de + </a> + ) :-) + <br> + <br> + Diese Seite wurde schon $counter mal aufgerufen. + </td> + </tr> + </table> + </center> +</body> +</html> +END +} + + +sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers. +my $reload = $_[0]; +&start_html("Registration"); +print <<END; + <center> + <table width=400> + <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 +} 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="id" value="$id"> + </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"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = <DATEI>; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = <DATEI>; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + &log("system","\"login_alias_banned\""); + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + &secure_setip($alias); + &frameset_html; + exit; + } else { + &log("system","\"login_pw_wrong\""); + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + &log("system","\"login_alias_notexists\""); + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &log("system","\"reg_alias_prohibited\""); + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &log("system","\"reg_pw_wrong\""); + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &log("system","\"reg_alias_exists\""); + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>"); + &log("system","\"reg_ok\""); + &login_html; +} + +sub frameset_html { +print <<END; +<html> + <head> + <title> + $title - Created by Paul C. Bütow 2k + </title> + </head> +<frameset border=0 frameborder=0 framespacing=0 rows="50,1,*,55"> + <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol" scrolling="no"> + <frame name="inroom" src="main.pl?var=inroom_html&alias=$alias&room=$room" scrolling="no"> + <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen"> + <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login" scrolling="no"> +</frameset> +</html> +END +} diff --git a/0.2.1/INSTALL.txt b/0.2.1/INSTALL.txt new file mode 100644 index 0000000..16cfd0a --- /dev/null +++ b/0.2.1/INSTALL.txt @@ -0,0 +1,83 @@ +#############################################################################
+## yChat.de Version 0.2.1 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+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 => 500 Configurationsdatei ("Shared subs")
+htdocs.pl => 101 HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => 101 Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => 101 Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => 101 Skript für editieren der Benutzerdaten etc.
+push.pl => 101 Server-Push-Routine
+LIESMICH.txt => Beinhaltet wichtige Informationen
+INSTALL.txt => Dieses Dokument
+
+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 für den Chat notwendigen HTML-Dokumente:
+ ./cgi-bin/yChat/data/htdocs/*
+
+ Folgende Dateien müssen in das "data/htdocs" verzeichnis bewegt werden:
+
+ help_html => 101 Hilfedatei
+ logs_html => 101 Logbeschreibung
+
+- 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 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 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
+ ./cgi-bin/yChat/data/online/rooms/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper
\ No newline at end of file diff --git a/0.2.1/LIESMICH.txt b/0.2.1/LIESMICH.txt new file mode 100644 index 0000000..93db3ce --- /dev/null +++ b/0.2.1/LIESMICH.txt @@ -0,0 +1,24 @@ +#############################################################################
+## yChat.de Version 0.2.1 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hallo Du,
+vielen Dank, daß Du Dir die Zeit nimmst, dieses Dokument sorgfältig zu
+lesen. Die grundliegende Idee von yChat.de ist die, ein funktionsfähiges,
+einfach zu bedienendes und zu installierendes Chat-System zu bieten. yChat
+ist keineswegs Free- oder Shareware und darf somit NICHT ohne die Erlaubnis
+vom Autor weitergegeben oder kopiert werden.
+Diejenigen, die dazu befugt sind, yChat vom eigenen Server aus zu betreiben,
+dürfen keineswegs die Copyright-Hinweise des Systems so manipulieren, daß
+diese für den Besucher nicht mehr ersichtlich sind.
+Weitergabe des yChat-Systems darf nur durch Einwilligung des Autors
+durchgeführt werden. Dies geschieht nur gegen entsprechende Gegenleistungen
+wie z.B. Bannerwerbung für www.yChat.de auf viel Besuchten Seiten (
+Seitenbesuche müssen nachgewiesen werden ), Werbung in vielgelesenen
+Newslettern o.Ä. . Allerdings sollte dem Autor vorher um Erlaubnis geboten
+werden. Gegen Geld ist das yChat-System noch nicht zu haben. Allerdings
+wird der Preis in etwa DM 500,- betragen. Für Fragen und Antworten bitte an
+die obrige E-Mail Adresse wenden.
+Installationshinweise findest Du in der datei INSTALL.txt
+MfG
+Paul C. Bütow aka Snooper
diff --git a/0.2.1/bar.gif b/0.2.1/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.2.1/bar.gif diff --git a/0.2.1/config.pm b/0.2.1/config.pm new file mode 100644 index 0000000..3baeb56 --- /dev/null +++ b/0.2.1/config.pm @@ -0,0 +1,296 @@ +########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "20.11.2k";
+$version = "0.2.1";
+$title = "yChat.de ($version)";
+$gfxpath = "http://localhost/yChat/";
+#$gfxpath = "../../gfx/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ print @file2print;
+}
+
+
+sub start_html { # Der HEADER einer HTML-Datei
+print <<END;
+<html>
+ <head>
+ <title>
+ $title - $_[0]
+ </title>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($method,$msg2log) = @_;
+ &zeit;
+ if ( $method eq "msg") {
+ $log = "data/logs/$room-$day.$month.$year";
+ } elsif ($method eq "logins") {
+ $log = "data/logs/ow/logins-$day.$month.$year";
+ $syslog = "data/logs/ow/system-$day.$month.$year";
+ } elsif ($method eq "system") {
+ $log = "data/logs/ow/system-$day.$month.$year";
+ }
+ &write_file($log);
+ if ($method eq "msg") {
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ } elsif ($method eq "logins") {
+ print DATEI "($day.$month.-$hours:$min:$sec) User: $alias IP#: $ENV{'REMOTE_ADDR'} Agent: $ENV{'HTTP_USER_AGENT'}\n<br>";
+ close DATEI;
+ &write_file($syslog);
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ } elsif ($method eq "system") {
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ }
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } else {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ &log("system","\"logout_$__ok\"");
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_");
+ &list_dir("data/online/rooms/$_",2);
+ rmdir("data/online/rooms/$_") if ($#dir2 = 1);
+ }
+ }
+}
+
+sub secure_setip { # Beim einloggen die IP-Nummer in dat/ip eintragen.
+ my $alias2set = $_[0];
+ &write_file_new("data/online/ident/$alias2set");
+ print DATEI $ENV{'REMOTE_ADDR'};
+ close DATEI;
+}
+
+sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen.
+ my $alias2check = $_[0];
+ &read_file("data/online/ident/$alias2check");
+ my $ip2check = <DATEI>;
+ close DATEI;
+ if ($ip2check ne $ENV{'REMOTE_ADDR'}) {
+ &log("system","\"secure_ip\"");
+ &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.");
+ exit;
+ }
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = "nc";
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+
+
diff --git a/0.2.1/help_html b/0.2.1/help_html new file mode 100644 index 0000000..79b94fa --- /dev/null +++ b/0.2.1/help_html @@ -0,0 +1,616 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table width=100% bgcolor=555555> + <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> + Abmelden mit einer + Farbe/n ( + <font color=red> + Namensfarbe + </font>/ + <font color=ffa500> + Textfarbe + </font> + ) wechseln. Angabe in Hexadezimal. Wird + <font color=ffa500> + Textfarbe + </font> + nicht angegeben, dann hat der Text die + <font color=red> + Namensfarbe + </font> + </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 + </div> + </td> + <td> + <div> + Handeln mit 2 Farben + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +/me + </div> + </td> + <td> + <div> + Handeln mit einer Farbe + </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. (Wird nicht vom Chat protokolliert) + </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. (Wird nicht vom Chat protokolliert) + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +// + </div> + </td> + <td> + <div> + Wurde zuletzt eine öffentliche Nachricht gepostet, dann wird diese nocheinmal gepostet. (Funktioniert nicht bei Befehlen, flüstern oder schreien) + </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> +/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> +/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 + </div> + </td> + <td> + <div> + Zeigt an, wer eingelog ist. + </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. + </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=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=green> + OW + </font> + </div> + </td> + <td> + <div> +/ban + </div> + </td> + <td> + <div> + Zeigt alle verbannten Benutzer an + </div> + </td> + </tr> + <tr> + <td> + <div> + <font color=green> + OW + </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=green> + OW + </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=green> + OW + </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=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 bestehenden Räumen) + </div> + </td> + </tr> +</table> +<hr> +<div> + Zur Erklärung: NC steht für "Normale Chatter", WÄ für "Wächter" und OW für "Oberwächter". + Obrige Befehle können nur von der/den jeweiligen Benutzergruppe/n oder höher ausgeführt werden. +</div> +</body> +</html>
\ No newline at end of file diff --git a/0.2.1/logs_html b/0.2.1/logs_html new file mode 100644 index 0000000..1317062 --- /dev/null +++ b/0.2.1/logs_html @@ -0,0 +1,391 @@ +<br> +<div> + In der System-Logdatei tauchen folgende Ursachen auf: +</div> +<br> +<table border=0 width=100% bgcolor=555555> + <tr> + <th bgcolor=666666> + <div> + Ursache + </div> + </th> + <th bgcolor=666666> + <div> + Beschreibung + </div> + </th> + </tr> + <tr> + <td> + <div> + edit_profile_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sein Profil erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_pw_wrong + </div> + </td> + <td> + <div> + Beim Editieren der Chat-Optionen stimmten die beiden Passwortfelder nicht überein. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_colors_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chatfarben erfolgreich gewechselt. + </div> + </td> + </tr> + <tr> + <td> + <div> +edit_options_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chat-Optionen erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> +first_http_ok + </div> + </td> + <td> + <div> + Der angegebenen IP# wurde Startseite erfolgreich angezeigt. (Benutzername noch nicht vorhanden) + </div> + </td> + </tr> + <tr> + <td> + <div> +login_alias_banned + </div> + </td> + <td> + <div> + Angegebener Benutzer konnte sich nicht in das System einloggen, da sein benutzername verbannt war. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_alias_notexists + </div> + </td> + <td> + <div> + Beim Einlogversuch existierte der angegebene Benutzername nicht. + </div> + </td> + </tr> + <tr> + <td> + <div> +login_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich in das System eingelogt. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_pw_wrong + </div> + </td> + <td> + <div> + Beim Einloggen wurde das falsche PW eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich (manuell) aus dem System ausgelogt. ("... verläßt den Chat ...") + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + User hat gemerkt, daß sich + <font color=red> + Alias + </font> + nicht mehr im Chat befindet. ("... hat den Chat verlassen ..."). + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + verbannt + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ow + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zu verbannen ( + <font color=red> + Alias + </font> + war Oberwächter und konnte nicht verbannt werden ) + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_rban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + "entbannt" + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Wächter eingetragen.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + existierte nicht in der Benutzerdatenbank.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ow-exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Oberwächter eingetragen. Oberwächter können nicht zeitgleich Wächter sein.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + erfolgreich zum Wächter ernannt. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter konnte + <font color=red> + Alias + </font> + nicht zum Wächter ernennen. (War nicht als WÄ registriert).. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + vom Wächter zum normalen Chatter degradiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_exists + </div> + </td> + <td> + <div> + Bei der Registrierung war der Benutzername bereits vorhanden. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_prohibited + </div> + </td> + <td> + <div> + Bei der Registrierung war der angegebene Benutzername verboten (enthielt Sonderzeichen). + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sich erfolgreich registriert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_pw_wrong + </div> + </td> + <td> + <div> + Bei der Registrierung wurde das PW falsch eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + secure_ip + </div> + </td> + <td> + <div> + Unbefugter Zugriff der angegebenen IP# auf den angegebenen Benutzernamen. + </div> + </td> + </tr> + <tr> + <td> + <div> + sys_msg_<font color=red>Raum</font> + </div> + </td> + <td> + <div> + Angegebener Oberwächter schreibt eine Systemnachricht aus + <font color=red> + Raum + </font>. + </div> + </td> + </tr> +</table> +<br>
\ No newline at end of file diff --git a/0.2.1/main.pl b/0.2.1/main.pl new file mode 100644 index 0000000..0a48de6 --- /dev/null +++ b/0.2.1/main.pl @@ -0,0 +1,555 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "input_html") { + &input_html; +} elsif ($var eq "inroom_html") { + &inroom_html($alias,$room); +} elsif ($var eq "post_msg") { + &post_msg; +} elsif ($var eq "change_room") { + &change_room; +} else { + &error("Parameter fehlt"); +} + +sub input_html { # Eingabemaske für den Chat. + my ($reload,$action,$whisper,$lastmsg) = @_; + $action = $q->param('action') if ($action eq ""); + if ($tmp eq "away") { + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>"); + } elsif ($tmp eq "login") { + &remove_rooms; + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>"); + &log("logins","\"login_ok\""); + } + if ($action ne "" && $action ne "whisper" && $action ne "away") { + print "<html><head><script language=\"JavaScript\">"; + if ($action eq "change_room") { + print "open(\"main.pl?var=inroom_html&alias=$alias&room=$room&col=$col&secol=$secol&tmp=$tmp\",\"inroom\");"; + print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol\",\"input\");"; + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } elsif ($action eq "change_colors") { + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } + print "</script></head><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } else { + print "<html><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } + print "<center><form action=\"main.pl\">"; + print "<input type=\"hidden\" name=\"tmp\" value=\"away\">" if ($action eq "away"); + print <<END; + <input type="hidden" name="var" value="post_msg"> + <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="id" value="$whisper"> + <input type="hidden" name="lastmsg" value="$lastmsg"> + <input size="70" name="msg"> + <input type="submit" value="Texten"></form></center> +END +if ($reload eq "true") { +print <<END; + <script language="JavaScript"> + <!-- + document.forms[0].msg.focus(); + //--> + </script> +END +} +print + $q->end_html; +} + +sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde. + &secure_checkip($alias); + $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren + $msg =~ s#kilahu#yChat#g; + $msg =~ s#perle#per!#g; + if (substr($msg,0,1) eq "/") { # Überprüfen, ob Befehl oder Nachricht + &cmd($msg); + } else { + $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>"; + &post($msg); + $msg =~ s#"#'#g; # " in ' umtauschen für den befehl "//" + &input_html("true","",$id,$msg); # -> Reload=true, Action=none, Whisper=$id + } +} + +sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können. + $_[0] = $_[0]." "; + $_[0] = substr($_[0], 1, length($_[0])-1); + my @cmd = split(/ /, $_[0]); + my $cmd = substr($_[0],0 , index($_[0], " ")); + my ($reload,$action,$whisper) = ("true","",$id); +#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< +#############>- DER LETZTEN ZUGEFLÜSTERTEN PERSON NOCHEINMAL FLÜSTERN -< + if ($cmd eq "/") { + &post($q->param('lastmsg')); +#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< + } elsif ($cmd eq "about") { + &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>"); +#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< + } elsif ($cmd eq "away") { + if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde + $tmp = ""; + } + for ($i=1; $i <= $#cmd; $i++) { + $tmp = $tmp." ".$cmd[$i]; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$tmp</font> ) ...</i></font>"); + $action = "away"; +#############>- 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\",\"main\");</script>"); +#############>- FARBEN WECHSELN -< + } elsif ($cmd eq "col") { + $col = $cmd[1]; + my $tmpsecol = $cmd[2]; + if ($tmpsecol eq "") { + $secol = $col + } else { + $secol = $tmpsecol; + } + &read_file("data/user/options/$alias"); + my @pro = <DATEI>; + close DATEI; + &write_file_new("data/user/options/$alias"); + print DATEI $pro[0]."".$col."\n".$secol; + close DATEI; + &log("system","\"edit_colors_ok\""); + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt ...</font></i>"); + $action = "change_colors"; +#############>- 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>"); +#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< + } elsif ($cmd eq "j") { +# $tmp = $room; #Alter Raum nach tmp +# $room = $cmd[1]; #Neuer Raum nach room + &change_room("j",$cmd[1],$room); + $action = "change_room"; +#############>- HANDELN -< + } elsif ($cmd eq "me" || $cmd eq "m") { + for ($i=1; $i <= $#cmd; $i++) { + $me_msg = $me_msg." ".$cmd[$i]; + } + if ($cmd eq "m") { + &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>"); + } else { + &post("<i><font color=$col>$alias $me_msg</font></i>"); + } +#############>- FLÜSTERN ( Auch mit '/' ) -< + } elsif ($cmd eq "msg" || $cmd eq "") { + my ($alias2post,$msg2post) = ($cmd[1],""); + if ($cmd eq "msg") { + for ($i=2; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } else { + $alias2post = $id; + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } + &list_dir("data/online/users"); + foreach(@dir) { + if ($_ eq $alias2post) { + &write_file("data/msgs/$alias2post"); + print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &write_file("data/msgs/$alias"); + print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &input_html($reload,"",$alias2post); + exit; + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>"); +#############>- DAS SYSTEM VERLASSEN -< + } elsif ($cmd eq "q") { + &post_prv("$alias","<script language=\"JavaScript\">window.open(\"index.pl?tmp=quit\",\"_top\");</script>"); + sleep 1; + &remove_online($alias,$room); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + exit; +#############>- SCHREIEN -< + } elsif ($cmd eq "s") { + my $msg2scream,$msg2post; + for ($i=1; $i <= $#cmd; $i++) { + $msg2scream = $msg2scream." ".$cmd[$i]; + } + $msg2post = "\U$msg2scream"; + &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>"); +#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< +} elsif ($cmd eq "w") { + &list_dir("data/online/rooms/$room"); + my ($is,$nr) = ("t",0); + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $personen = $personen." ".$_; + $nr++; + } + } + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff>$nr Person$nrs befinde$is sich im aktuellen Raum (\"$room\"): <font color=ffa500>$personen</font></font>"); +#############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< + } elsif ($cmd eq "wc" || $cmd eq "wc/") { + $raum = $cmd[1]; + if ($raum eq "" && $cmd eq "wc") { + &list_dir("data/online/users"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/users/$_"); + } + my $nr = ($#dir-1); + my ($nrs,$is) = ("","ist"); + if ($nr != 1) { + $nrs = "en"; + $is = "sind"; + } + &post_prv("$alias","<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; + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + &list_dir("data/online/rooms/$_",2); + my $nr = $#dir2-1; + $msg2post = $msg2post."<tr><td><b><font size=2 color=ffffff>$_ ($nr)</font></b></td><td><font size=2 color=ffffff>"; + 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; + &list_dir("data/online/rooms/$raum"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_"); + } + my ($nr,$is) = (($#dir-1),"t"); + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>"); + } +#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< + } elsif ($cmd eq "wj" || $cmd eq "ju") { + my $alias2search = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum"); + foreach $user (@dir2) { + if (-f "data/online/rooms/$raum/$user") { + if ($user eq $alias2search) { + if ($cmd eq "wj") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>"); + } else { + $action = "change_room"; + &change_room("ju",$raum,$room,$alias2search); + } + &input_html($reload,$action,$whisper); + exit; + } + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff> ist nicht eingelogt !</font></font>"); +#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- ALIAS VERBANNEN BZW. ENTBANNEN -< + } elsif ($cmd eq "ban" || $cmd eq "rban") { + &hirachie($alias); + if ($hirachie eq "ow") { + my ($alias2handle,$registriert) = $cmd[1]; + &list_dir("data/user/options"); + foreach(@dir) { + $registriert = "true" if ($_ eq $alias2handle); + } + if ($registriert ne "true") { + if ($cmd eq "ban") { + if ($alias2handle ne "") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>"); + } else { + &read_file("data/ban"); + my @banned = <DATEI>; + my ($benutzer); + my $nr = $#banned+1; + close DATEI; + foreach(@banned) { + $benutzer = $benutzer." ".$_; + } + &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>"); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>"); + } + &input_html("true"); + exit; + } + &read_file("data/ban"); + my @banlist = <DATEI>; + close DATEI; + foreach(@banlist) { + if ($_ eq "$alias2handle\n") { + if ($cmd eq "ban") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>"); + } else { + my $banned = "false"; + foreach(@banlist) { + $banned = "true" if ($_ eq "$alias2handle\n"); + } + if ($banned eq "true") { + my @newbanlist; + foreach(@banlist) { + push @newbanlist,$_ if ($_ ne "$alias2handle\n"); + } + &write_file_new("data/ban"); + print DATEI @newbanlist; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>"); + &log("system","\"ow_rban_$alias2handle_ok\""); + } + } + &input_html("true"); + exit; + } + } + if ($cmd eq "ban") { + &hirachie($alias2handle); + if ($hirachie ne "ow") { + &write_file("data/ban"); + print DATEI "$alias2handle\n"; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>"); + &log("system","\"ow_ban_$alias2handle_ok\""); + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>"); + &log("system","\"ow_ban_$alias2handle_ow\""); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>"); + } + } +#############>- IP # VON ALIAS ANZEIGEN LASSEN -< + } elsif ($cmd eq "ip") { + &hirachie($alias); + if ($hirachie eq "ow") { + my $alias2prove = $cmd[1]; + &list_dir("data/online/ident"); + foreach(@dir) { + if ($_ eq $alias2prove) { + &read_file("data/online/ident/$_"); + local $ipnr = <DATEI>; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>"); + } + } + } +#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< + } elsif ($cmd eq "k") { + &hirachie($alias); + if ($hirachie eq "wa" || $hirachie eq "ow") { + my $alias2kick = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2); + foreach $chatter (@dir2) { + if ($chatter eq $alias2kick) { + &hirachie($alias2kick); + if ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>"); + &log("system","wa_k_$alias2kick_ow"); #!! + } elsif ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Wächter und kann nicht \"gekickt\" werden !</font></font>"); + &log("system","wa_k_$alias2kick_ow"); #!! + } else { + &post_prv("$alias2kick","<script language=\"JavaScript\">window.open(\"index.pl?tmp=kick\",\"_top\");</script>"); + &zeit; + $_ = undef if ($room eq $_); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_); + &log("system","wa_k_$alias2kick"); #!! + &remove_online($alias2kick,$_,"kick"); + &secure_removeip($alias2kick); + } + &input_html("true"); + exit; + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>"); + } +#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -< + } elsif ($cmd eq "sys") { + &hirachie($alias); + if ($hirachie eq "ow") { + for ($i=1; $i <= $#cmd; $i++) { + $sys_msg = $sys_msg." ".$cmd[$i]; + } + &zeit; + &post_all("<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>"); + &log("system","\"sys_msg_$room\""); + } +#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -< + } elsif ($cmd eq "wa" || $cmd eq "rwa") { + &hirachie($alias); + if ($hirachie eq "ow") { + &zeit; + my $alias2handle = $cmd[1]; + if ($cmd eq "wa") { + my $anerkennen = "false"; + &list_dir("data/user/options"); + foreach(@dir) { + if ($_ eq $alias2handle) { + $anerkennen = "true"; + } + } + if ($anerkennen eq "true") { + &hirachie($alias2handle); + if ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_exists\""); + } elsif ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_oh-exists\""); + } else { + &write_file("data/wa"); + print DATEI $alias2handle."\n"; + close DATEI; + &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>"); + &log("system","\"oh_wa_".$alias2handle."_ok\""); + } + } else { + &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_notexists\""); + } + } elsif ($cmd eq "rwa") { + &read_file("data/wa"); + my @wafile = <DATEI>; + close DATEI; + my $aberkennen = "false"; + foreach(@wafile) { + if ($_ ne "$alias2handle\n") { + push @newafile,$_; + } else { + $aberkennen = "true"; + } + } + &write_file_new("data/wa"); + print DATEI @newafile; + close DATEI; + if ($aberkennen eq "true") { + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>"); + &log("system","\"oh_rwa_".$alias2handle."_ok\""); + } else { + &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>"); + &log("system","\"oh_rwa_".$alias2handle."_notexists\""); + } + } + } +#############>- ENDE DER CHATBEFEHLE -< +} +&input_html($reload,$action,$whisper); +} + +sub inroom_html { # Auto-refresh für Raumonlineliste + my ($alias,$room) = @_; +print <<END; +<html> + <head> + <meta http-equiv="refresh" content="20" URL="main.pl?var=inchat_html&alias=$alias&room=$room"> + </head> +<body bgcolor=ffa500> +</body> +</html> +END + &online($alias,$room); +} + +sub change_room { # Den Chat-Raum wechseln + my ($method,$newroom,$oldroom,$alias2follow) = @_; + $room = $oldroom; + &secure_checkip($alias); # IP Nummer überprüfen + &zeit; # Zeit 'erneuern' + if ($method eq "j") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } elsif ($method eq "ju") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<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>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } + &rm_rooms; +} + +sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern + my ($alias,$room) = @_; + &write_file_new("data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-e "data/online/rooms/$room") { + } else { + mkdir "data/online/rooms/$room", 0777; + } + &write_file_new("data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen + my $provetime = <DATEI>; + close DATEI; + if ($provetime < (time - 30)) { + &write_file_new("data/online/prove"); + print DATEI time; + close DATEI; + &rm_alias("data/online/users"); + &rm_rooms; + } +} + +sub rm_alias { # Chatter aus dem System entfernen, die älter als 60 Sekunden sind + my $dir2rm = $_[0]; + &list_dir($dir2rm,2); + foreach(@dir2) { + if (-f "$dir2rm/$_") { + &read_file("$dir2rm/$_"); + my $timestamp = <DATEI>; + close DATEI; + if ($timestamp < (time - 60)) { + if ($dir2rm eq "data/online/users") { + &remove_online($_,undef,1); + } else { + unlink("$dir2rm/$_"); + } + } + } + } +} diff --git a/0.2.1/main2.pl b/0.2.1/main2.pl new file mode 100644 index 0000000..9e6066c --- /dev/null +++ b/0.2.1/main2.pl @@ -0,0 +1,502 @@ +#!/usr/bin/perl -w + + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### + +if ($var eq "list_alias_html") { + &list_alias_html; +} elsif ($var eq "alias_html") { + &alias_html; +} elsif ($var eq "edit_profile_html") { + &edit_html("edit_profile_html"); +} elsif ($var eq "edit_options_html") { + &edit_html("edit_options_html"); +} elsif ($var eq "gb_html") { + &gb_html; +} elsif ($var eq "post_gb") { + &post_gb; +} elsif ($var eq "rm_gb_alias") { + &rm_gb; +} elsif ($var eq "edit_profile") { + &edit("edit_profile"); +} elsif ($var eq "edit_options") { + &edit("edit_options"); +} 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="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 + &secure_checkip($alias); + &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"; + } + if (-e "$tmpath") { + &read_file("$tmpath"); + my @datei = <DATEI>; + close DATEI; + pop(@datei) if ($#datei > 99); + my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + @newdatei = ("@newdatei", "@datei"); + &write_file_new("$tmpath"); + print DATEI @newdatei; + close DATEI; + } else { + &write_file_new("$tmpath"); + print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + close DATEI; + } + 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=$alias\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp\" target=\"_new\">Dein Profil</a> gehängt ... </font>"); + &alias_html; + exit; + } +} + +sub rm_gb { # Gästebucheintrag entfernen + &secure_checkip($alias); + $tmp = $alias; + &read_file("data/user/gbooks/$alias"); + my @gbfile = <DATEI>; + close DATEI; + my @newgbfile = (); + for($i=0; $i <= $#gbfile; $i++) { + push(@newgbfile,$gbfile[$i]) if ($i != $id); + } + &write_file_new("data/user/gbooks/$alias"); + print DATEI @newgbfile; + close DATEI; + &alias_html("rm_ok"); +} + +sub list_alias_html { # Liste aller Benutzer + &start_html("Alle Benutzer"); + &list_dir("data/user/options"); + my @liste = sort(@dir); + my $nr = $#dir-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=$_" }, + "$_"), + " "; + } + } +print <<END; + </div> +</body> +</html> +END +} + +sub alias_html { # Anzeigen eines Benutzerprofils + my $message = $_[0]; + &start_html($tmp); +print <<END; +<div> + <a href="htdocs.pl?var=werda_html&alias=$alias">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 +} + &read_file("data/user/profiles/$tmp"); + @data = <DATEI>; + close DATEI; +print <<END; + <div> + 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="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"> +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) = @_; + &secure_checkip($alias); + &start_html("Benutzerprofil ändern"); + if ($method eq "edit_options_html") { + &read_file("data/user/options/$alias"); + } elsif ($method eq "edit_profile_html") { + &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol","input"); + open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol","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 auf <a href="push.pl?alias=$alias&room=$room">Weiterchatten</a> klicken. +</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; +<form action="main2.pl"> + <input type="hidden" name="alias" value="$alias"> + <input type="hidden" name="var" value="edit_options"> + <div> + Dein Passwort + <font color=ffa500> + (Gut merken !!) + </font> + <br> + <input type="password" name="id" value="$data[0]"> + </div> + <br> + <div> + Geb hier das Passwort erneuert ein: + <br> + <input type="password" name="tmp" value="$data[0]"> + </div> + <br> + <div> + "Deine Farbe (Farbe Deines Nicks, Angabe in Hexadezimal): + <br> + <input type="text" name="col" value="$data[1]"> + </div> + <br> + <div> + Deine zweite Farbe (Farbe Deiner Nachrichten, Angabe in Hexadezimal): + <br> + <input type="text" name="secol" value="$data[2]"> + </div> + <br> +END + } 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="alias" value="$alias"> + <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="submit" value="Daten ändern ..."> + </font> + </form> +</body> +</html> +END +} + + +sub edit { # Benutzerprofil od. Chat-Optionen abspeichern + &secure_checkip($alias); + my $method = $_[0]; + if ($method eq "edit_profile") { + &write_file_new("data/user/profiles/$alias"); + print DATEI $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 DATEI; + &log("system","\"edit_profile_ok\""); + &edit_html("edit_profile_html","edit_profile_ok"); + } elsif ($method eq "edit_options") { + if ($id ne $tmp) { + &log("system","\"edit_pw_wrong\""); + &edit_html("edit_options_html","edit_pw_wrong"); + exit; + } + &secure_checkip($alias); + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n".$col."\n".$secol; + close DATEI; + &log("system","\"edit_options_ok\""); + &edit_html("edit_options_html","edit_options_ok"); + } +} diff --git a/0.2.1/push.pl b/0.2.1/push.pl new file mode 100644 index 0000000..5489592 --- /dev/null +++ b/0.2.1/push.pl @@ -0,0 +1,85 @@ +#!/usr/bin/perl -w +use CGI; +$q = new CGI; + +print + $q->header; # HTML-Header erzeugen + +require config; + +&secure_checkip($alias); + +######################################## +##ANFANG DER ZU STREAMENDEN HTML-DATEI## +######################################## + +print <<END; +<html> + <head> + <script language="JavaScript"> + <!-- + scrolling=true; + function scroll_wnd() { + if (scrolling != false) { + window.scroll(1, 500000); + } + window.setTimeout("scroll_wnd()", 100); + } + scroll_wnd(); + //--> + </script> + </head> +<body bgcolor=000000 link=FFFFFF alink=FFFFEF vlink=FFFFEF> +END + +$| = 1; # Cache von Perl ausschalten + +############################# +##BEGRÜSSUNGSTEXT SCHREIBEN## +############################# + +my $msgfile; + + print + $q->font( { -size=>1, + -color=>"ffffff", + -face=>"arial"}, + "$title Copyright by Paul C. Bütow 2k $tmp\n"); + +if ($var eq "push_logs_html") { + $msgfile = $tmp; + print "<hr><font size=2 color=ffffff face=arial>"; +} elsif ($var eq "clear_screen") { + $msgfile = "data/msgs/$alias"; + &write_file_new($msgfile); + print DATEI $q->br; + close DATEI; +} else { + $msgfile = "data/msgs/$alias"; + print $q->br; +} + +open (MSGFILE, $msgfile); + +################################# +##ENDLOSSCHLEIFE FÜR DEN STREAM## +################################# + +my ($times,$online) = (0,"false"); +for (;;) { + for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) { + print $_ ; + } + $times++; + if ($times > 29) { # Nach 30 Sekunden + print "\n<!--PING//-->"; # Ping zum Browser senden + $times = 0; # Sekundenzahl auf 0 zurücksetzen + $online = "true" if (-e "data/online/users/$alias"); + if ($online eq "false") { + print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen\">Weiterchatten</a> klicken.</font>"; + exit; + } + } + sleep 1; + seek(MSGFILE, $curpos, 0); # Position wiederherstellen +} diff --git a/0.2.1/unten.gif b/0.2.1/unten.gif Binary files differnew file mode 100644 index 0000000..285fb53 --- /dev/null +++ b/0.2.1/unten.gif diff --git a/0.2.1/yChat.jpg b/0.2.1/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.2.1/yChat.jpg diff --git a/0.2.2/INSTALL.txt b/0.2.2/INSTALL.txt new file mode 100644 index 0000000..5466112 --- /dev/null +++ b/0.2.2/INSTALL.txt @@ -0,0 +1,86 @@ +#############################################################################
+## yChat.de Version 0.2.2 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+INSTALL.txt => Dieses Dokument
+
+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 für den Chat notwendigen HTML-Dokumente:
+ ./cgi-bin/yChat/data/htdocs/*
+
+ Folgende Dateien müssen in das "data/htdocs" verzeichnis bewegt werden:
+
+ help_html => 101 Hilfedatei
+ logs_html => 101 Logbeschreibung
+
+- 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 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 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
+ ./cgi-bin/yChat/data/online/rooms/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper
\ No newline at end of file diff --git a/0.2.2/LIESMICH.txt b/0.2.2/LIESMICH.txt new file mode 100644 index 0000000..b0789c1 --- /dev/null +++ b/0.2.2/LIESMICH.txt @@ -0,0 +1,24 @@ +#############################################################################
+## yChat.de Version 0.2.2 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hallo Du,
+vielen Dank, daß Du Dir die Zeit nimmst, dieses Dokument sorgfältig zu
+lesen. Die grundliegende Idee von yChat.de ist die, ein funktionsfähiges,
+einfach zu bedienendes und zu installierendes Chat-System zu bieten. yChat
+ist keineswegs Free- oder Shareware und darf somit NICHT ohne die Erlaubnis
+vom Autor weitergegeben oder kopiert werden.
+Diejenigen, die dazu befugt sind, yChat vom eigenen Server aus zu betreiben,
+dürfen keineswegs die Copyright-Hinweise des Systems so manipulieren, daß
+diese für den Besucher nicht mehr ersichtlich sind.
+Weitergabe des yChat-Systems darf nur durch Einwilligung des Autors
+durchgeführt werden. Dies geschieht nur gegen entsprechende Gegenleistungen
+wie z.B. Bannerwerbung für www.yChat.de auf viel Besuchten Seiten (
+Seitenbesuche müssen nachgewiesen werden ), Werbung in vielgelesenen
+Newslettern o.Ä. . Allerdings sollte dem Autor vorher um Erlaubnis geboten
+werden. Gegen Geld ist das yChat-System noch nicht zu haben. Allerdings
+wird der Preis in etwa DM 500,- betragen. Für Fragen und Antworten bitte an
+die obrige E-Mail Adresse wenden.
+Installationshinweise findest Du in der datei INSTALL.txt
+MfG
+Paul C. Bütow aka Snooper
diff --git a/0.2.2/UPDATES.txt b/0.2.2/UPDATES.txt new file mode 100644 index 0000000..e62a01c --- /dev/null +++ b/0.2.2/UPDATES.txt @@ -0,0 +1,22 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.2.1 nach 0.2.2 vom 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 nach 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden
+ nun anders verwaltet.
+
+Update von Alpha XVIII nach 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ konzeptiert.
+ - Neue Versionsnumern wurden eingeführt.
diff --git a/0.2.2/bar.gif b/0.2.2/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.2.2/bar.gif diff --git a/0.2.2/config.pm b/0.2.2/config.pm new file mode 100644 index 0000000..4fca6b6 --- /dev/null +++ b/0.2.2/config.pm @@ -0,0 +1,313 @@ +########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "23.11.2k";
+$version = "0.2.2";
+$title = "yChat.de ($version)";
+#$gfxpath = "http://localhost/yChat/";
+$gfxpath = "../../yChat/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ body.online { background-color: 444444; background-image: none }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($method,$msg2log) = @_;
+ &zeit;
+ if ( $method eq "msg") {
+ $log = "data/logs/$room-$day.$month.$year";
+ } elsif ($method eq "logins") {
+ $log = "data/logs/ow/logins-$day.$month.$year";
+ $syslog = "data/logs/ow/system-$day.$month.$year";
+ } elsif ($method eq "system") {
+ $log = "data/logs/ow/system-$day.$month.$year";
+ }
+ &write_file($log);
+ if ($method eq "msg") {
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ } elsif ($method eq "logins") {
+ print DATEI "($day.$month.-$hours:$min:$sec) User: $alias IP#: $ENV{'REMOTE_ADDR'} Agent: $ENV{'HTTP_USER_AGENT'}\n<br>";
+ close DATEI;
+ &write_file($syslog);
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ } elsif ($method eq "system") {
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ }
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } else {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ &log("system","\"logout_$__ok\"");
+ }
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, die älter als 60 Sekunden sind
+ my $dir2rm = $_[0];
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_");
+ &list_dir("data/online/rooms/$_",2);
+ rmdir("data/online/rooms/$_") if ($#dir2 = 1);
+ }
+ }
+}
+
+sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen.
+ my ($alias2check,$method) = @_;
+ &read_file("data/online/ident/$alias2check");
+ my @ip = <DATEI>;
+ close DATEI;
+ if ($ip[0] ne $ENV{'REMOTE_ADDR'}) {
+ &log("system","\"secure_ip\"");
+ if ($method eq undef) {
+ &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.");
+ } else {
+ &post_prv("$alias2check","<font color=red>Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.</font>");
+ &input_html("true") if ($method = 2);
+ }
+ exit;
+ }
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = "nc";
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+
+
diff --git a/0.2.2/help_html b/0.2.2/help_html new file mode 100644 index 0000000..d57d552 --- /dev/null +++ b/0.2.2/help_html @@ -0,0 +1,616 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table width=100% bgcolor=555555> + <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> + Abmelden mit einer + Farbe/n ( + <font color=red> + Namensfarbe + </font>/ + <font color=ffa500> + Textfarbe + </font> + ) wechseln. Angabe in Hexadezimal. Wird + <font color=ffa500> + Textfarbe + </font> + nicht angegeben, dann hat der Text die + <font color=red> + Namensfarbe + </font> + </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 + </div> + </td> + <td> + <div> + Handeln mit 2 Farben + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +/me + </div> + </td> + <td> + <div> + Handeln mit einer Farbe + </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. (Wird nicht vom Chat protokolliert) + </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. (Wird nicht vom Chat protokolliert) + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +// + </div> + </td> + <td> + <div> + Wurde zuletzt eine öffentliche Nachricht gepostet, dann wird diese nocheinmal gepostet. (Funktioniert nicht bei Befehlen, flüstern oder schreien) + </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> +/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> +/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 + </div> + </td> + <td> + <div> + Zeigt an, wer eingelog ist. + </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. + </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=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=green> + OW + </font> + </div> + </td> + <td> + <div> +/ban + </div> + </td> + <td> + <div> + Zeigt alle verbannten Benutzer an + </div> + </td> + </tr> + <tr> + <td> + <div> + <font color=green> + OW + </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=green> + OW + </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=green> + OW + </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=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 bestehenden Räumen) + </div> + </td> + </tr> +</table> +<hr> +<div> + Zur Erklärung: NC steht für "Normale Chatter", WÄ für "Wächter" und OW für "Oberwächter". + Obrige Befehle können nur von der/den jeweiligen Benutzergruppe/n oder höher ausgeführt werden. +</div> +</body> +</html>
\ No newline at end of file diff --git a/0.2.2/htdocs.pl b/0.2.2/htdocs.pl new file mode 100644 index 0000000..b958add --- /dev/null +++ b/0.2.2/htdocs.pl @@ -0,0 +1,223 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "help_html") { + &printfile("data/htdocs/help_html","Alle Chatbefehle"); +} elsif ($var eq "menu_html") { + &menu_html; +} elsif ($var eq "werda_html") { + &werda_html; +} elsif ($var eq "logs_html") { + &logs_html; +} elsif ($var eq "view_sulogs_html") { + &hirachie($alias); + if ($hirachie eq "ow") { + &start_html("Oberwächter-Logdateien"); + print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a><hr>"; + &printfile($tmp); + print "</div></body></html>"; + } +} elsif ($var eq "view_logs_html") { + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + &printfile($tmp,$tmp,"log"); + } +} elsif ($var eq "superuser_html") { + &superuser_html; +} elsif ($var eq "bar_html") { + print + $q->start_html(-bgcolor=>"ffa500"), + $q->end_html; +} else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; +} + +sub menu_html { + if ($tmp eq "quit") { + print + $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" ); + sleep 1; + &remove_online($alias); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + } + &start_html("Menü","menu"); +print <<END; + <center> + <div> + [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp" target="werda">Wer ist da?</a>] + [<a href="main2.pl?var=alias_html&alias=$alias&tmp=$alias" target="DeinProfil">Dein Profil</a>] + [<a href="main2.pl?var=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>] + [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Chat-Optionen</a>] + [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzerliste</a>] + [<a href="htdocs.pl?var=help_html" target="Befehle">Chat-Befehle</a>] + [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Benutzerboard</a>] + [<a href="htdocs.pl?var=superuser_html&alias=$alias" target="Hirachie">Superuser</a>] + [<a href="htdocs.pl?var=logs_html&alias=$alias" target="Logdateien">Logdateien</a>] + [<a href="push.pl?alias=$alias&room=$room&var=clear_screen" target="main">Weiterchatten</a>] + [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias">Chat verlassen</a>] + </div> + </center> +</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 + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + my $room = $_; + &list_dir("data/online/rooms/$room",2); + local $nr = $#dir2-1; + print $q->b( $_ ), + "($nr)", + $q->br; + foreach(@dir2) { + if ($_ ne ".." && $_ ne ".") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " "; + } + } + print $q->br, $q->br; + } + } + print + "</div>", + $q->end_html; +} + +sub logs_html { + &secure_checkip($alias); + &start_html("Logdateien"); + print <<END; +<div> + Hier befinden sich alle Logdateien +</div> +<hr> +END + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + if ($hirachie eq "ow") { + print $q->div( "Folgende Logdateien können nur von Oberwächtern (OW) gelesen werden" ); + &printfile("data/htdocs/logs_html"); + &list_dir("data/logs/ow"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/ow/$_") { + print $q->a( { -href=>"htdocs.pl?var=view_sulogs_html&alias=$alias&tmp=data/logs/ow/$_", + -target=>$_}, + "$_" ). + " ", + } + } + print $q->hr; + } + print $q->div( "Folgende Logdateien können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + &list_dir("data/logs"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/$_") { + print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_", + -target=>"_new" }, + "$_" ), + " "; + } + } + if ($hirachie eq "wa") { + print $q->hr, + $q->div( "Oberwächter können zusätzlich die Systemlogdateien lesen. Du bist allerdings ein \"Wächter\" und ", + " bist nicht dazu berechtigt " ), + $q->br; + &printfile("data/htdocs/logs_html"); + } + } else { + print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ", + "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde. Oberwächter ", + "können folgende Systemlogdateien zusätzlich lesen:" ), + $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 "; + &hirachie($alias); + if ($hirachie eq "ow") { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.</div>", + $q->hr; + } elsif ( $hirachie 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.2.2/index.pl b/0.2.2/index.pl new file mode 100644 index 0000000..a2d7bd3 --- /dev/null +++ b/0.2.2/index.pl @@ -0,0 +1,354 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = <DATEI>; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&start_html("Created by Paul C. Bütow 2k"); +print <<END; + <center> + <table width=400> + <tr> + <td> + <b> + <div> + $title + <img src="$gfxpath/yChat.jpg"> + </div> + </b> +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 + &log("system","\"first_http_ok\""); + } +print <<END; + <hr> + <form action="index.pl"> + <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="id" value="$id"> + </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> + <div> + yChat befindet sich momentan noch in der Entwicklungsphase ! + <br> + Fragen gehen an Paul Bütow ( + <a href="mailto:paul\@buetow.oxg.de"> + paul\@buetow.oxg.de + </a> + ) :-) + <br> + <br> + Diese Seite wurde schon $counter mal aufgerufen. + </td> + </tr> + </table> + </center> +</body> +</html> +END +} + + +sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers. +my $reload = $_[0]; +&start_html("Registration"); +print <<END; + <center> + <table width=400> + <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="id" value="$id"> + </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"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = <DATEI>; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = <DATEI>; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + &log("system","\"login_alias_banned\""); + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + &write_file_new("data/online/ident/$alias"); + print DATEI $ENV{'REMOTE_ADDR'}; + close DATEI; + &frameset_html; + exit; + } else { + &log("system","\"login_pw_wrong\""); + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + &log("system","\"login_alias_notexists\""); + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &log("system","\"reg_alias_prohibited\""); + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &log("system","\"reg_pw_wrong\""); + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &log("system","\"reg_alias_exists\""); + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>"); + &log("system","\"reg_ok\""); + &login_html; +} + +sub frameset_html { +print <<END; +<html> + <head> + <title> + $title - Created by Paul C. Bütow 2k + </title> + </head> +<frameset border=0 frameborder=0 framespacing=0 rows="50,1,*,55"> + <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol" scrolling="no"> + <frame src="htdocs.pl?var=bar_html scrolling="no"> + <frameset border=0 frameborder=0 framespacing=0 cols="150,*"> + <frame name="online" src="online.pl?room=$room&alias=$alias"> + <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen"> + </frameset> + <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login" scrolling="no"> +</frameset> +</html> +END +} diff --git a/0.2.2/logs_html b/0.2.2/logs_html new file mode 100644 index 0000000..1317062 --- /dev/null +++ b/0.2.2/logs_html @@ -0,0 +1,391 @@ +<br> +<div> + In der System-Logdatei tauchen folgende Ursachen auf: +</div> +<br> +<table border=0 width=100% bgcolor=555555> + <tr> + <th bgcolor=666666> + <div> + Ursache + </div> + </th> + <th bgcolor=666666> + <div> + Beschreibung + </div> + </th> + </tr> + <tr> + <td> + <div> + edit_profile_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sein Profil erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_pw_wrong + </div> + </td> + <td> + <div> + Beim Editieren der Chat-Optionen stimmten die beiden Passwortfelder nicht überein. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_colors_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chatfarben erfolgreich gewechselt. + </div> + </td> + </tr> + <tr> + <td> + <div> +edit_options_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chat-Optionen erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> +first_http_ok + </div> + </td> + <td> + <div> + Der angegebenen IP# wurde Startseite erfolgreich angezeigt. (Benutzername noch nicht vorhanden) + </div> + </td> + </tr> + <tr> + <td> + <div> +login_alias_banned + </div> + </td> + <td> + <div> + Angegebener Benutzer konnte sich nicht in das System einloggen, da sein benutzername verbannt war. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_alias_notexists + </div> + </td> + <td> + <div> + Beim Einlogversuch existierte der angegebene Benutzername nicht. + </div> + </td> + </tr> + <tr> + <td> + <div> +login_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich in das System eingelogt. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_pw_wrong + </div> + </td> + <td> + <div> + Beim Einloggen wurde das falsche PW eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich (manuell) aus dem System ausgelogt. ("... verläßt den Chat ...") + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + User hat gemerkt, daß sich + <font color=red> + Alias + </font> + nicht mehr im Chat befindet. ("... hat den Chat verlassen ..."). + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + verbannt + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ow + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zu verbannen ( + <font color=red> + Alias + </font> + war Oberwächter und konnte nicht verbannt werden ) + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_rban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + "entbannt" + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Wächter eingetragen.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + existierte nicht in der Benutzerdatenbank.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ow-exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Oberwächter eingetragen. Oberwächter können nicht zeitgleich Wächter sein.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + erfolgreich zum Wächter ernannt. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter konnte + <font color=red> + Alias + </font> + nicht zum Wächter ernennen. (War nicht als WÄ registriert).. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + vom Wächter zum normalen Chatter degradiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_exists + </div> + </td> + <td> + <div> + Bei der Registrierung war der Benutzername bereits vorhanden. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_prohibited + </div> + </td> + <td> + <div> + Bei der Registrierung war der angegebene Benutzername verboten (enthielt Sonderzeichen). + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sich erfolgreich registriert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_pw_wrong + </div> + </td> + <td> + <div> + Bei der Registrierung wurde das PW falsch eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + secure_ip + </div> + </td> + <td> + <div> + Unbefugter Zugriff der angegebenen IP# auf den angegebenen Benutzernamen. + </div> + </td> + </tr> + <tr> + <td> + <div> + sys_msg_<font color=red>Raum</font> + </div> + </td> + <td> + <div> + Angegebener Oberwächter schreibt eine Systemnachricht aus + <font color=red> + Raum + </font>. + </div> + </td> + </tr> +</table> +<br>
\ No newline at end of file diff --git a/0.2.2/main.pl b/0.2.2/main.pl new file mode 100644 index 0000000..ac156fb --- /dev/null +++ b/0.2.2/main.pl @@ -0,0 +1,497 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "input_html") { + &input_html; +} elsif ($var eq "post_msg") { + &post_msg; +} elsif ($var eq "change_room") { + &change_room; +} else { + &error("Parameter fehlt"); +} + +sub input_html { # Eingabemaske für den Chat. + my ($reload,$action,$whisper,$lastmsg) = @_; + $action = $q->param('action') if ($action eq ""); + if ($tmp eq "away") { + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>"); + } elsif ($tmp eq "login") { + &remove_rooms; + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>"); + &log("logins","\"login_ok\""); + } + if ($action ne "" && $action ne "whisper" && $action ne "away") { + print "<html><head><script language=\"JavaScript\">"; + if ($action eq "change_room") { + print "open(\"online.pl?alias=$alias&room=$room\",\"online\");"; + print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol\",\"input\");"; + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } elsif ($action eq "change_colors") { + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } + print "</script></head><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } else { + print "<html><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } + print "<center><form action=\"main.pl\">"; + print "<input type=\"hidden\" name=\"tmp\" value=\"away\">" if ($action eq "away"); + print <<END; + <input type="hidden" name="var" value="post_msg"> + <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="id" value="$whisper"> + <input type="hidden" name="lastmsg" value="$lastmsg"> + <input size="70" name="msg"> + <input type="submit" value="Texten"></form></center> +END +if ($reload eq "true") { +print <<END; + <script language="JavaScript"> + <!-- + document.forms[0].msg.focus(); + //--> + </script> +END +} +print + $q->end_html; +} + +sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde. + $| = 1; # Cache von Perl ausschalten + $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren + $msg =~ s#kilahu#yChat#g; + $msg =~ s#ooperle#per!#g; + if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht + $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>"; + $msg =~ s#"#'#g; # " in ' umtauschen für den befehl "//" + &input_html("true","",$id,$msg); # -> Reload=true, Action=none, Whisper=$id + &secure_checkip($alias,1); + &post($msg); + } else { + &secure_checkip($alias,2); + &cmd($msg); + } +} + +sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können. + $_[0] = $_[0]." "; + $_[0] = substr($_[0], 1, length($_[0])-1); + my @cmd = split(/ /, $_[0]); + my $cmd = substr($_[0],0 , index($_[0], " ")); + my ($reload,$action,$whisper) = ("true","",$id); +#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< +#############>- DER LETZTEN ZUGEFLÜSTERTEN PERSON NOCHEINMAL FLÜSTERN -< + if ($cmd eq "/") { + &post($q->param('lastmsg')); +#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< + } elsif ($cmd eq "about") { + &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>"); +#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< + } elsif ($cmd eq "away") { + if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde + $tmp = ""; + } + for ($i=1; $i <= $#cmd; $i++) { + $tmp = $tmp." ".$cmd[$i]; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$tmp</font> ) ...</i></font>"); + $action = "away"; +#############>- 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\",\"main\");</script>"); +#############>- FARBEN WECHSELN -< + } elsif ($cmd eq "col") { + $col = $cmd[1]; + my $tmpsecol = $cmd[2]; + if ($tmpsecol eq "") { + $secol = $col + } else { + $secol = $tmpsecol; + } + &read_file("data/user/options/$alias"); + my @pro = <DATEI>; + close DATEI; + &write_file_new("data/user/options/$alias"); + print DATEI $pro[0]."".$col."\n".$secol; + close DATEI; + &log("system","\"edit_colors_ok\""); + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt ...</font></i>"); + $action = "change_colors"; +#############>- 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>"); +#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< + } elsif ($cmd eq "j") { + &change_room("j",$cmd[1],$room); + $action = "change_room"; +#############>- HANDELN -< + } elsif ($cmd eq "me" || $cmd eq "m") { + for ($i=1; $i <= $#cmd; $i++) { + $me_msg = $me_msg." ".$cmd[$i]; + } + if ($cmd eq "m") { + &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>"); + } else { + &post("<i><font color=$col>$alias $me_msg</font></i>"); + } +#############>- FLÜSTERN ( Auch mit '/' ) -< + } elsif ($cmd eq "msg" || $cmd eq "") { + my ($alias2post,$msg2post) = ($cmd[1],""); + if ($cmd eq "msg") { + for ($i=2; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } else { + $alias2post = $id; + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } + &list_dir("data/online/users"); + foreach(@dir) { + if ($_ eq $alias2post) { + &write_file("data/msgs/$alias2post"); + print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &write_file("data/msgs/$alias"); + print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &input_html($reload,"",$alias2post); + exit; + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>"); +#############>- DAS SYSTEM VERLASSEN -< + } elsif ($cmd eq "q") { + &post_prv("$alias","<script language=\"JavaScript\">window.open(\"index.pl?tmp=quit\",\"_top\");</script>"); + sleep 1; + &remove_online($alias,$room); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + exit; +#############>- SCHREIEN -< + } elsif ($cmd eq "s") { + my $msg2scream,$msg2post; + for ($i=1; $i <= $#cmd; $i++) { + $msg2scream = $msg2scream." ".$cmd[$i]; + } + $msg2post = "\U$msg2scream"; + &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>"); +#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< +} elsif ($cmd eq "w") { + &list_dir("data/online/rooms/$room"); + my ($is,$nr) = ("t",0); + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $personen = $personen." ".$_; + $nr++; + } + } + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff>$nr Person$nrs befinde$is sich im aktuellen Raum (\"$room\"): <font color=ffa500>$personen</font></font>"); +#############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< + } elsif ($cmd eq "wc" || $cmd eq "wc/") { + $raum = $cmd[1]; + if ($raum eq "" && $cmd eq "wc") { + &list_dir("data/online/users"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/users/$_"); + } + my $nr = ($#dir-1); + my ($nrs,$is) = ("","ist"); + if ($nr != 1) { + $nrs = "en"; + $is = "sind"; + } + &post_prv("$alias","<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; + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + &list_dir("data/online/rooms/$_",2); + my $nr = $#dir2-1; + $msg2post = $msg2post."<tr><td><b><font size=2 color=ffffff>$_ ($nr)</font></b></td><td><font size=2 color=ffffff>"; + 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; + &list_dir("data/online/rooms/$raum"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_"); + } + my ($nr,$is) = (($#dir-1),"t"); + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>"); + } +#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< + } elsif ($cmd eq "wj" || $cmd eq "ju") { + my $alias2search = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum"); + foreach $user (@dir2) { + if (-f "data/online/rooms/$raum/$user") { + if ($user eq $alias2search) { + if ($cmd eq "wj") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>"); + } else { + $action = "change_room"; + &change_room("ju",$raum,$room,$alias2search); + } + &input_html($reload,$action,$whisper); + exit; + } + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff> ist nicht eingelogt !</font></font>"); +#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- ALIAS VERBANNEN BZW. ENTBANNEN -< + } elsif ($cmd eq "ban" || $cmd eq "rban") { + &hirachie($alias); + if ($hirachie eq "ow") { + my ($alias2handle,$registriert) = $cmd[1]; + &list_dir("data/user/options"); + foreach(@dir) { + $registriert = "true" if ($_ eq $alias2handle); + } + if ($registriert ne "true") { + if ($cmd eq "ban") { + if ($alias2handle ne "") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>"); + } else { + &read_file("data/ban"); + my @banned = <DATEI>; + my ($benutzer); + my $nr = $#banned+1; + close DATEI; + foreach(@banned) { + $benutzer = $benutzer." ".$_; + } + &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>"); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>"); + } + &input_html("true"); + exit; + } + &read_file("data/ban"); + my @banlist = <DATEI>; + close DATEI; + foreach(@banlist) { + if ($_ eq "$alias2handle\n") { + if ($cmd eq "ban") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>"); + } else { + my $banned = "false"; + foreach(@banlist) { + $banned = "true" if ($_ eq "$alias2handle\n"); + } + if ($banned eq "true") { + my @newbanlist; + foreach(@banlist) { + push @newbanlist,$_ if ($_ ne "$alias2handle\n"); + } + &write_file_new("data/ban"); + print DATEI @newbanlist; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>"); + &log("system","\"ow_rban_$alias2handle_ok\""); + } + } + &input_html("true"); + exit; + } + } + if ($cmd eq "ban") { + &hirachie($alias2handle); + if ($hirachie ne "ow") { + &write_file("data/ban"); + print DATEI "$alias2handle\n"; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>"); + &log("system","\"ow_ban_".$alias2handle."_ok\""); + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>"); + &log("system","\"ow_ban_".$alias2handle."_ow\""); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>"); + } + } +#############>- IP # VON ALIAS ANZEIGEN LASSEN -< + } elsif ($cmd eq "ip") { + &hirachie($alias); + if ($hirachie eq "ow") { + my $alias2prove = $cmd[1]; + &list_dir("data/online/ident"); + foreach(@dir) { + if ($_ eq $alias2prove) { + &read_file("data/online/ident/$_"); + local $ipnr = <DATEI>; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>"); + } + } + } +#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< + } elsif ($cmd eq "k") { + &hirachie($alias); + if ($hirachie eq "wa" || $hirachie eq "ow") { + my $alias2kick = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2); + foreach $chatter (@dir2) { + if ($chatter eq $alias2kick) { + &hirachie($alias2kick); + if ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>"); + &log("system","wa_k_$alias2kick_ow"); #!! + } elsif ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Wächter und kann nicht \"gekickt\" werden !</font></font>"); + &log("system","wa_k_$alias2kick_ow"); #!! + } else { + &post_prv("$alias2kick","<script language=\"JavaScript\">window.open(\"index.pl?tmp=kick\",\"_top\");</script>"); + &zeit; + $_ = undef if ($room eq $_); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_); + &log("system","wa_k_$alias2kick"); #!! + &remove_online($alias2kick,$_,"kick"); + &secure_removeip($alias2kick); + } + &input_html("true"); + exit; + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>"); + } +#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -< + } elsif ($cmd eq "sys") { + &hirachie($alias); + if ($hirachie eq "ow") { + for ($i=1; $i <= $#cmd; $i++) { + $sys_msg = $sys_msg." ".$cmd[$i]; + } + &zeit; + &post_all("<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>"); + &log("system","\"sys_msg_$room\""); + } +#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -< + } elsif ($cmd eq "wa" || $cmd eq "rwa") { + &hirachie($alias); + if ($hirachie eq "ow") { + &zeit; + my $alias2handle = $cmd[1]; + if ($cmd eq "wa") { + my $anerkennen = "false"; + &list_dir("data/user/options"); + foreach(@dir) { + if ($_ eq $alias2handle) { + $anerkennen = "true"; + } + } + if ($anerkennen eq "true") { + &hirachie($alias2handle); + if ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_exists\""); + } elsif ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_oh-exists\""); + } else { + &write_file("data/wa"); + print DATEI $alias2handle."\n"; + close DATEI; + &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>"); + &log("system","\"oh_wa_".$alias2handle."_ok\""); + } + } else { + &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_notexists\""); + } + } elsif ($cmd eq "rwa") { + &read_file("data/wa"); + my @wafile = <DATEI>; + close DATEI; + my $aberkennen = "false"; + foreach(@wafile) { + if ($_ ne "$alias2handle\n") { + push @newafile,$_; + } else { + $aberkennen = "true"; + } + } + &write_file_new("data/wa"); + print DATEI @newafile; + close DATEI; + if ($aberkennen eq "true") { + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>"); + &log("system","\"oh_rwa_".$alias2handle."_ok\""); + } else { + &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>"); + &log("system","\"oh_rwa_".$alias2handle."_notexists\""); + } + } + } +#############>- ENDE DER CHATBEFEHLE -< +} +&input_html($reload,$action,$whisper); +} + +sub change_room { # Den Chat-Raum wechseln + my ($method,$newroom,$oldroom,$alias2follow) = @_; + $room = $oldroom; + &secure_checkip($alias); # IP Nummer überprüfen + &zeit; # Zeit 'erneuern' + if ($method eq "j") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } elsif ($method eq "ju") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<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>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } + &rm_rooms; +} + diff --git a/0.2.2/main2.pl b/0.2.2/main2.pl new file mode 100644 index 0000000..9e6066c --- /dev/null +++ b/0.2.2/main2.pl @@ -0,0 +1,502 @@ +#!/usr/bin/perl -w + + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### + +if ($var eq "list_alias_html") { + &list_alias_html; +} elsif ($var eq "alias_html") { + &alias_html; +} elsif ($var eq "edit_profile_html") { + &edit_html("edit_profile_html"); +} elsif ($var eq "edit_options_html") { + &edit_html("edit_options_html"); +} elsif ($var eq "gb_html") { + &gb_html; +} elsif ($var eq "post_gb") { + &post_gb; +} elsif ($var eq "rm_gb_alias") { + &rm_gb; +} elsif ($var eq "edit_profile") { + &edit("edit_profile"); +} elsif ($var eq "edit_options") { + &edit("edit_options"); +} 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="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 + &secure_checkip($alias); + &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"; + } + if (-e "$tmpath") { + &read_file("$tmpath"); + my @datei = <DATEI>; + close DATEI; + pop(@datei) if ($#datei > 99); + my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + @newdatei = ("@newdatei", "@datei"); + &write_file_new("$tmpath"); + print DATEI @newdatei; + close DATEI; + } else { + &write_file_new("$tmpath"); + print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + close DATEI; + } + 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=$alias\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp\" target=\"_new\">Dein Profil</a> gehängt ... </font>"); + &alias_html; + exit; + } +} + +sub rm_gb { # Gästebucheintrag entfernen + &secure_checkip($alias); + $tmp = $alias; + &read_file("data/user/gbooks/$alias"); + my @gbfile = <DATEI>; + close DATEI; + my @newgbfile = (); + for($i=0; $i <= $#gbfile; $i++) { + push(@newgbfile,$gbfile[$i]) if ($i != $id); + } + &write_file_new("data/user/gbooks/$alias"); + print DATEI @newgbfile; + close DATEI; + &alias_html("rm_ok"); +} + +sub list_alias_html { # Liste aller Benutzer + &start_html("Alle Benutzer"); + &list_dir("data/user/options"); + my @liste = sort(@dir); + my $nr = $#dir-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=$_" }, + "$_"), + " "; + } + } +print <<END; + </div> +</body> +</html> +END +} + +sub alias_html { # Anzeigen eines Benutzerprofils + my $message = $_[0]; + &start_html($tmp); +print <<END; +<div> + <a href="htdocs.pl?var=werda_html&alias=$alias">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 +} + &read_file("data/user/profiles/$tmp"); + @data = <DATEI>; + close DATEI; +print <<END; + <div> + 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="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"> +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) = @_; + &secure_checkip($alias); + &start_html("Benutzerprofil ändern"); + if ($method eq "edit_options_html") { + &read_file("data/user/options/$alias"); + } elsif ($method eq "edit_profile_html") { + &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol","input"); + open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol","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 auf <a href="push.pl?alias=$alias&room=$room">Weiterchatten</a> klicken. +</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; +<form action="main2.pl"> + <input type="hidden" name="alias" value="$alias"> + <input type="hidden" name="var" value="edit_options"> + <div> + Dein Passwort + <font color=ffa500> + (Gut merken !!) + </font> + <br> + <input type="password" name="id" value="$data[0]"> + </div> + <br> + <div> + Geb hier das Passwort erneuert ein: + <br> + <input type="password" name="tmp" value="$data[0]"> + </div> + <br> + <div> + "Deine Farbe (Farbe Deines Nicks, Angabe in Hexadezimal): + <br> + <input type="text" name="col" value="$data[1]"> + </div> + <br> + <div> + Deine zweite Farbe (Farbe Deiner Nachrichten, Angabe in Hexadezimal): + <br> + <input type="text" name="secol" value="$data[2]"> + </div> + <br> +END + } 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="alias" value="$alias"> + <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="submit" value="Daten ändern ..."> + </font> + </form> +</body> +</html> +END +} + + +sub edit { # Benutzerprofil od. Chat-Optionen abspeichern + &secure_checkip($alias); + my $method = $_[0]; + if ($method eq "edit_profile") { + &write_file_new("data/user/profiles/$alias"); + print DATEI $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 DATEI; + &log("system","\"edit_profile_ok\""); + &edit_html("edit_profile_html","edit_profile_ok"); + } elsif ($method eq "edit_options") { + if ($id ne $tmp) { + &log("system","\"edit_pw_wrong\""); + &edit_html("edit_options_html","edit_pw_wrong"); + exit; + } + &secure_checkip($alias); + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n".$col."\n".$secol; + close DATEI; + &log("system","\"edit_options_ok\""); + &edit_html("edit_options_html","edit_options_ok"); + } +} diff --git a/0.2.2/online.pl b/0.2.2/online.pl new file mode 100644 index 0000000..2e8bf8d --- /dev/null +++ b/0.2.2/online.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +&secure_checkip($alias); +&start_html("Online","online"); +&online($alias,$room); +&list_dir("data/online/rooms/".$room); +print + $q->div( "$room:" ), + "<font size=1 color=ffffef face=arial>"; + foreach $online (@dir) { + if (-f "data/online/rooms/$room/$online") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$online", + -target=>"$online" }, "$online"), $q->br; + } + } +print + "</font>", + $q->end_html; + +sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern + my ($alias,$room) = @_; + &write_file_new("data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-e "data/online/rooms/$room") { + } else { + mkdir "data/online/rooms/$room", 0777; + } + &write_file_new("data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen + my $provetime = <DATEI>; + close DATEI; + if ($provetime < (time - 30)) { + &write_file_new("data/online/prove"); + print DATEI time; + close DATEI; + &rm_alias("data/online/users"); + &rm_rooms; + } +} + diff --git a/0.2.2/push.pl b/0.2.2/push.pl new file mode 100644 index 0000000..5489592 --- /dev/null +++ b/0.2.2/push.pl @@ -0,0 +1,85 @@ +#!/usr/bin/perl -w +use CGI; +$q = new CGI; + +print + $q->header; # HTML-Header erzeugen + +require config; + +&secure_checkip($alias); + +######################################## +##ANFANG DER ZU STREAMENDEN HTML-DATEI## +######################################## + +print <<END; +<html> + <head> + <script language="JavaScript"> + <!-- + scrolling=true; + function scroll_wnd() { + if (scrolling != false) { + window.scroll(1, 500000); + } + window.setTimeout("scroll_wnd()", 100); + } + scroll_wnd(); + //--> + </script> + </head> +<body bgcolor=000000 link=FFFFFF alink=FFFFEF vlink=FFFFEF> +END + +$| = 1; # Cache von Perl ausschalten + +############################# +##BEGRÜSSUNGSTEXT SCHREIBEN## +############################# + +my $msgfile; + + print + $q->font( { -size=>1, + -color=>"ffffff", + -face=>"arial"}, + "$title Copyright by Paul C. Bütow 2k $tmp\n"); + +if ($var eq "push_logs_html") { + $msgfile = $tmp; + print "<hr><font size=2 color=ffffff face=arial>"; +} elsif ($var eq "clear_screen") { + $msgfile = "data/msgs/$alias"; + &write_file_new($msgfile); + print DATEI $q->br; + close DATEI; +} else { + $msgfile = "data/msgs/$alias"; + print $q->br; +} + +open (MSGFILE, $msgfile); + +################################# +##ENDLOSSCHLEIFE FÜR DEN STREAM## +################################# + +my ($times,$online) = (0,"false"); +for (;;) { + for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) { + print $_ ; + } + $times++; + if ($times > 29) { # Nach 30 Sekunden + print "\n<!--PING//-->"; # Ping zum Browser senden + $times = 0; # Sekundenzahl auf 0 zurücksetzen + $online = "true" if (-e "data/online/users/$alias"); + if ($online eq "false") { + print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen\">Weiterchatten</a> klicken.</font>"; + exit; + } + } + sleep 1; + seek(MSGFILE, $curpos, 0); # Position wiederherstellen +} diff --git a/0.2.2/unten.gif b/0.2.2/unten.gif Binary files differnew file mode 100644 index 0000000..285fb53 --- /dev/null +++ b/0.2.2/unten.gif diff --git a/0.2.2/yChat.jpg b/0.2.2/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.2.2/yChat.jpg diff --git a/0.2.3/INDEX.PL b/0.2.3/INDEX.PL new file mode 100644 index 0000000..a2d7bd3 --- /dev/null +++ b/0.2.3/INDEX.PL @@ -0,0 +1,354 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = <DATEI>; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&start_html("Created by Paul C. Bütow 2k"); +print <<END; + <center> + <table width=400> + <tr> + <td> + <b> + <div> + $title + <img src="$gfxpath/yChat.jpg"> + </div> + </b> +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 + &log("system","\"first_http_ok\""); + } +print <<END; + <hr> + <form action="index.pl"> + <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="id" value="$id"> + </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> + <div> + yChat befindet sich momentan noch in der Entwicklungsphase ! + <br> + Fragen gehen an Paul Bütow ( + <a href="mailto:paul\@buetow.oxg.de"> + paul\@buetow.oxg.de + </a> + ) :-) + <br> + <br> + Diese Seite wurde schon $counter mal aufgerufen. + </td> + </tr> + </table> + </center> +</body> +</html> +END +} + + +sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers. +my $reload = $_[0]; +&start_html("Registration"); +print <<END; + <center> + <table width=400> + <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="id" value="$id"> + </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"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = <DATEI>; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = <DATEI>; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + &log("system","\"login_alias_banned\""); + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + &write_file_new("data/online/ident/$alias"); + print DATEI $ENV{'REMOTE_ADDR'}; + close DATEI; + &frameset_html; + exit; + } else { + &log("system","\"login_pw_wrong\""); + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + &log("system","\"login_alias_notexists\""); + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &log("system","\"reg_alias_prohibited\""); + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &log("system","\"reg_pw_wrong\""); + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &log("system","\"reg_alias_exists\""); + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>"); + &log("system","\"reg_ok\""); + &login_html; +} + +sub frameset_html { +print <<END; +<html> + <head> + <title> + $title - Created by Paul C. Bütow 2k + </title> + </head> +<frameset border=0 frameborder=0 framespacing=0 rows="50,1,*,55"> + <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol" scrolling="no"> + <frame src="htdocs.pl?var=bar_html scrolling="no"> + <frameset border=0 frameborder=0 framespacing=0 cols="150,*"> + <frame name="online" src="online.pl?room=$room&alias=$alias"> + <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen"> + </frameset> + <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login" scrolling="no"> +</frameset> +</html> +END +} diff --git a/0.2.3/INSTALL.txt b/0.2.3/INSTALL.txt new file mode 100644 index 0000000..c58665e --- /dev/null +++ b/0.2.3/INSTALL.txt @@ -0,0 +1,104 @@ +#############################################################################
+## yChat.de Version 0.2.3 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+INSTALL.txt => Dieses Dokument
+
+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 für den Chat notwendigen HTML-Dokumente:
+ ./cgi-bin/yChat/data/htdocs/*
+
+ Folgende Dateien müssen in das "data/htdocs" verzeichnis bewegt werden:
+
+ help_html => 101 Hilfedatei
+ logs_html => 101 Logbeschreibung
+
+- Hier befinden sich alle Logdateien, die vom Chat erstellt werden:
+ ./cgi-bin/yChat/data/logs/*
+
+- Hier befinden sich die Message-Dateien der eingelogten Benutzer:
+ ./cgi-bin/yChat/data/msgs/*
+
+- Hier befinden sich alle Daten der registrierten Benutzer:
+ ./cgi-bin/yChat/data/user/*
+
+- Hier wird abgespeichert, wie oft ein Benutzerprofil insgesant schon
+ aufgerufen wurde:
+ ./cgi-bin/yChat/data/user/counts/*
+
+- Hier 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 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
+ ./cgi-bin/yChat/data/online/rooms/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper
\ No newline at end of file diff --git a/0.2.3/LIESMICH.txt b/0.2.3/LIESMICH.txt new file mode 100644 index 0000000..e9bafb0 --- /dev/null +++ b/0.2.3/LIESMICH.txt @@ -0,0 +1,24 @@ +#############################################################################
+## yChat.de Version 0.2.3 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hallo Du,
+vielen Dank, daß Du Dir die Zeit nimmst, dieses Dokument sorgfältig zu
+lesen. Die grundliegende Idee von yChat.de ist die, ein funktionsfähiges,
+einfach zu bedienendes und zu installierendes Chat-System zu bieten. yChat
+ist keineswegs Free- oder Shareware und darf somit NICHT ohne die Erlaubnis
+vom Autor weitergegeben oder kopiert werden.
+Diejenigen, die dazu befugt sind, yChat vom eigenen Server aus zu betreiben,
+dürfen keineswegs die Copyright-Hinweise des Systems so manipulieren, daß
+diese für den Besucher nicht mehr ersichtlich sind.
+Weitergabe des yChat-Systems darf nur durch Einwilligung des Autors
+durchgeführt werden. Dies geschieht nur gegen entsprechende Gegenleistungen
+wie z.B. Bannerwerbung für www.yChat.de auf viel Besuchten Seiten (
+Seitenbesuche müssen nachgewiesen werden ), Werbung in vielgelesenen
+Newslettern o.Ä. . Allerdings sollte dem Autor vorher um Erlaubnis geboten
+werden. Gegen Geld ist das yChat-System noch nicht zu haben. Allerdings
+wird der Preis in etwa DM 500,- betragen. Für Fragen und Antworten bitte an
+die obrige E-Mail Adresse wenden.
+Installationshinweise findest Du in der datei INSTALL.txt
+MfG
+Paul C. Bütow aka Snooper
diff --git a/0.2.3/UPDATES.txt b/0.2.3/UPDATES.txt new file mode 100644 index 0000000..2e777cf --- /dev/null +++ b/0.2.3/UPDATES.txt @@ -0,0 +1,31 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.2.2 nach 0.2.3 vom 25.11.2k
+ - Smooth scrolling JavaScript (Vielen Dank an Andreas Buchwald).
+ - "IP#-Fehler" wurde so gut wie eleminiert.
+ - 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 nach 0.2.2 vom 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 nach 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden
+ nun anders verwaltet.
+
+Update von Alpha XVIII nach 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ konzeptiert.
+ - Neue Versionsnumern wurden eingeführt.
diff --git a/0.2.3/bar.gif b/0.2.3/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.2.3/bar.gif diff --git a/0.2.3/config.pm b/0.2.3/config.pm new file mode 100644 index 0000000..f89f5b2 --- /dev/null +++ b/0.2.3/config.pm @@ -0,0 +1,321 @@ +########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "25.11.2k";
+$version = "0.2.3";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ body.online { background-color: 444444; background-image: none }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($method,$msg2log) = @_;
+ &zeit;
+ if ( $method eq "msg") {
+ $log = "data/logs/$room-$day.$month.$year";
+ } elsif ($method eq "logins") {
+ $log = "data/logs/ow/logins-$day.$month.$year";
+ $syslog = "data/logs/ow/system-$day.$month.$year";
+ } elsif ($method eq "system") {
+ $log = "data/logs/ow/system-$day.$month.$year";
+ }
+ &write_file($log);
+ if ($method eq "msg") {
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ } elsif ($method eq "logins") {
+ print DATEI "($day.$month.-$hours:$min:$sec) User: $alias IP#: $ENV{'REMOTE_ADDR'} Agent: $ENV{'HTTP_USER_AGENT'}\n<br>";
+ close DATEI;
+ &write_file($syslog);
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ } elsif ($method eq "system") {
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ }
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } else {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ &log("system","\"logout_$__ok\"");
+ }
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, die älter als 60 Sekunden sind
+ my $dir2rm = $_[0];
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_");
+ &list_dir("data/online/rooms/$_",2);
+ rmdir("data/online/rooms/$_") if ($#dir2 = 1);
+ }
+ }
+}
+
+sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen.
+ my ($alias2check,$method) = @_;
+ my $ip;
+ for($i=0 ;$i<=5;) {
+ &read_file("data/online/ident/$alias2check");
+ $ip = <DATEI>;
+ close DATEI;
+ if ($ip ne $ENV{'REMOTE_ADDR'}) {
+ $i++;
+ } else {
+ goto ENDCHECKIP
+ }
+ if ($i<=5) {
+ &log("system","\"secure_ip\"");
+ if ($method eq undef) {
+ &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.");
+ } else {
+ &post_prv("$alias2check","<font color=red>Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.</font>");
+ &input_html("true") if ($method = 2);
+ }
+ exit;
+ }
+ }
+ENDCHECKIP:
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = "nc";
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+
+
diff --git a/0.2.3/help_html b/0.2.3/help_html new file mode 100644 index 0000000..79b94fa --- /dev/null +++ b/0.2.3/help_html @@ -0,0 +1,616 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table width=100% bgcolor=555555> + <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> + Abmelden mit einer + Farbe/n ( + <font color=red> + Namensfarbe + </font>/ + <font color=ffa500> + Textfarbe + </font> + ) wechseln. Angabe in Hexadezimal. Wird + <font color=ffa500> + Textfarbe + </font> + nicht angegeben, dann hat der Text die + <font color=red> + Namensfarbe + </font> + </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 + </div> + </td> + <td> + <div> + Handeln mit 2 Farben + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +/me + </div> + </td> + <td> + <div> + Handeln mit einer Farbe + </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. (Wird nicht vom Chat protokolliert) + </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. (Wird nicht vom Chat protokolliert) + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +// + </div> + </td> + <td> + <div> + Wurde zuletzt eine öffentliche Nachricht gepostet, dann wird diese nocheinmal gepostet. (Funktioniert nicht bei Befehlen, flüstern oder schreien) + </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> +/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> +/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 + </div> + </td> + <td> + <div> + Zeigt an, wer eingelog ist. + </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. + </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=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=green> + OW + </font> + </div> + </td> + <td> + <div> +/ban + </div> + </td> + <td> + <div> + Zeigt alle verbannten Benutzer an + </div> + </td> + </tr> + <tr> + <td> + <div> + <font color=green> + OW + </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=green> + OW + </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=green> + OW + </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=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 bestehenden Räumen) + </div> + </td> + </tr> +</table> +<hr> +<div> + Zur Erklärung: NC steht für "Normale Chatter", WÄ für "Wächter" und OW für "Oberwächter". + Obrige Befehle können nur von der/den jeweiligen Benutzergruppe/n oder höher ausgeführt werden. +</div> +</body> +</html>
\ No newline at end of file diff --git a/0.2.3/htdocs.pl b/0.2.3/htdocs.pl new file mode 100644 index 0000000..17aef05 --- /dev/null +++ b/0.2.3/htdocs.pl @@ -0,0 +1,222 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "help_html") { + &printfile("data/htdocs/help_html","Alle Chatbefehle"); +} elsif ($var eq "menu_html") { + &menu_html; +} elsif ($var eq "werda_html") { + &werda_html; +} elsif ($var eq "logs_html") { + &logs_html; +} elsif ($var eq "view_sulogs_html") { + &hirachie($alias); + if ($hirachie eq "ow") { + &start_html("Oberwächter-Logdateien"); + print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a><hr>"; + &printfile($tmp); + print "</div></body></html>"; + } +} elsif ($var eq "view_logs_html") { + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + &printfile($tmp,$tmp,"log"); + } +} elsif ($var eq "superuser_html") { + &superuser_html; +} elsif ($var eq "bar_html") { + print + $q->start_html(-bgcolor=>"ffa500"), + $q->end_html; +} else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; +} + +sub menu_html { + if ($tmp eq "quit") { + print + $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" ); + sleep 1; + &remove_online($alias); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + } + &start_html("Menü","menu"); +print <<END; + <center> + <div> + [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp" target="werda">Wer ist da?</a>] + [<a href="main2.pl?var=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>] + [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Chat-Optionen</a>] + [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzerliste</a>] + [<a href="htdocs.pl?var=help_html" target="Befehle">Chat-Befehle</a>] + [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Benutzerboard</a>] + [<a href="htdocs.pl?var=superuser_html&alias=$alias" target="Hirachie">Superuser</a>] + [<a href="htdocs.pl?var=logs_html&alias=$alias" target="Logdateien">Logdateien</a>] + [<a href="push.pl?alias=$alias&room=$room&var=clear_screen" target="main">Weiterchatten</a>] + [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias">Chat verlassen</a>] + </div> + </center> +</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 + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + my $room = $_; + &list_dir("data/online/rooms/$room",2); + local $nr = $#dir2-1; + print $q->b( $_ ), + "($nr)", + $q->br; + foreach(@dir2) { + if ($_ ne ".." && $_ ne ".") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " "; + } + } + print $q->br, $q->br; + } + } + print + "</div>", + $q->end_html; +} + +sub logs_html { + &secure_checkip($alias); + &start_html("Logdateien"); + print <<END; +<div> + Hier befinden sich alle Logdateien +</div> +<hr> +END + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + if ($hirachie eq "ow") { + print $q->div( "Folgende Logdateien können nur von Oberwächtern (OW) gelesen werden" ); + &printfile("data/htdocs/logs_html"); + &list_dir("data/logs/ow"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/ow/$_") { + print $q->a( { -href=>"htdocs.pl?var=view_sulogs_html&alias=$alias&tmp=data/logs/ow/$_", + -target=>$_}, + "$_" ). + " ", + } + } + print $q->hr; + } + print $q->div( "Folgende Logdateien können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + &list_dir("data/logs"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/$_") { + print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_", + -target=>"_new" }, + "$_" ), + " "; + } + } + if ($hirachie eq "wa") { + print $q->hr, + $q->div( "Oberwächter können zusätzlich die Systemlogdateien lesen. Du bist allerdings ein \"Wächter\" und ", + " bist nicht dazu berechtigt " ), + $q->br; + &printfile("data/htdocs/logs_html"); + } + } else { + print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ", + "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde. Oberwächter ", + "können folgende Systemlogdateien zusätzlich lesen:" ), + $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 "; + &hirachie($alias); + if ($hirachie eq "ow") { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.</div>", + $q->hr; + } elsif ( $hirachie 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.2.3/logs_html b/0.2.3/logs_html new file mode 100644 index 0000000..1317062 --- /dev/null +++ b/0.2.3/logs_html @@ -0,0 +1,391 @@ +<br> +<div> + In der System-Logdatei tauchen folgende Ursachen auf: +</div> +<br> +<table border=0 width=100% bgcolor=555555> + <tr> + <th bgcolor=666666> + <div> + Ursache + </div> + </th> + <th bgcolor=666666> + <div> + Beschreibung + </div> + </th> + </tr> + <tr> + <td> + <div> + edit_profile_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sein Profil erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_pw_wrong + </div> + </td> + <td> + <div> + Beim Editieren der Chat-Optionen stimmten die beiden Passwortfelder nicht überein. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_colors_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chatfarben erfolgreich gewechselt. + </div> + </td> + </tr> + <tr> + <td> + <div> +edit_options_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chat-Optionen erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> +first_http_ok + </div> + </td> + <td> + <div> + Der angegebenen IP# wurde Startseite erfolgreich angezeigt. (Benutzername noch nicht vorhanden) + </div> + </td> + </tr> + <tr> + <td> + <div> +login_alias_banned + </div> + </td> + <td> + <div> + Angegebener Benutzer konnte sich nicht in das System einloggen, da sein benutzername verbannt war. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_alias_notexists + </div> + </td> + <td> + <div> + Beim Einlogversuch existierte der angegebene Benutzername nicht. + </div> + </td> + </tr> + <tr> + <td> + <div> +login_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich in das System eingelogt. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_pw_wrong + </div> + </td> + <td> + <div> + Beim Einloggen wurde das falsche PW eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich (manuell) aus dem System ausgelogt. ("... verläßt den Chat ...") + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + User hat gemerkt, daß sich + <font color=red> + Alias + </font> + nicht mehr im Chat befindet. ("... hat den Chat verlassen ..."). + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + verbannt + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ow + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zu verbannen ( + <font color=red> + Alias + </font> + war Oberwächter und konnte nicht verbannt werden ) + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_rban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + "entbannt" + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Wächter eingetragen.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + existierte nicht in der Benutzerdatenbank.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ow-exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Oberwächter eingetragen. Oberwächter können nicht zeitgleich Wächter sein.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + erfolgreich zum Wächter ernannt. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter konnte + <font color=red> + Alias + </font> + nicht zum Wächter ernennen. (War nicht als WÄ registriert).. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + vom Wächter zum normalen Chatter degradiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_exists + </div> + </td> + <td> + <div> + Bei der Registrierung war der Benutzername bereits vorhanden. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_prohibited + </div> + </td> + <td> + <div> + Bei der Registrierung war der angegebene Benutzername verboten (enthielt Sonderzeichen). + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sich erfolgreich registriert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_pw_wrong + </div> + </td> + <td> + <div> + Bei der Registrierung wurde das PW falsch eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + secure_ip + </div> + </td> + <td> + <div> + Unbefugter Zugriff der angegebenen IP# auf den angegebenen Benutzernamen. + </div> + </td> + </tr> + <tr> + <td> + <div> + sys_msg_<font color=red>Raum</font> + </div> + </td> + <td> + <div> + Angegebener Oberwächter schreibt eine Systemnachricht aus + <font color=red> + Raum + </font>. + </div> + </td> + </tr> +</table> +<br>
\ No newline at end of file diff --git a/0.2.3/main.pl b/0.2.3/main.pl new file mode 100644 index 0000000..ac156fb --- /dev/null +++ b/0.2.3/main.pl @@ -0,0 +1,497 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "input_html") { + &input_html; +} elsif ($var eq "post_msg") { + &post_msg; +} elsif ($var eq "change_room") { + &change_room; +} else { + &error("Parameter fehlt"); +} + +sub input_html { # Eingabemaske für den Chat. + my ($reload,$action,$whisper,$lastmsg) = @_; + $action = $q->param('action') if ($action eq ""); + if ($tmp eq "away") { + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>"); + } elsif ($tmp eq "login") { + &remove_rooms; + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>"); + &log("logins","\"login_ok\""); + } + if ($action ne "" && $action ne "whisper" && $action ne "away") { + print "<html><head><script language=\"JavaScript\">"; + if ($action eq "change_room") { + print "open(\"online.pl?alias=$alias&room=$room\",\"online\");"; + print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol\",\"input\");"; + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } elsif ($action eq "change_colors") { + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } + print "</script></head><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } else { + print "<html><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } + print "<center><form action=\"main.pl\">"; + print "<input type=\"hidden\" name=\"tmp\" value=\"away\">" if ($action eq "away"); + print <<END; + <input type="hidden" name="var" value="post_msg"> + <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="id" value="$whisper"> + <input type="hidden" name="lastmsg" value="$lastmsg"> + <input size="70" name="msg"> + <input type="submit" value="Texten"></form></center> +END +if ($reload eq "true") { +print <<END; + <script language="JavaScript"> + <!-- + document.forms[0].msg.focus(); + //--> + </script> +END +} +print + $q->end_html; +} + +sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde. + $| = 1; # Cache von Perl ausschalten + $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren + $msg =~ s#kilahu#yChat#g; + $msg =~ s#ooperle#per!#g; + if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht + $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>"; + $msg =~ s#"#'#g; # " in ' umtauschen für den befehl "//" + &input_html("true","",$id,$msg); # -> Reload=true, Action=none, Whisper=$id + &secure_checkip($alias,1); + &post($msg); + } else { + &secure_checkip($alias,2); + &cmd($msg); + } +} + +sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können. + $_[0] = $_[0]." "; + $_[0] = substr($_[0], 1, length($_[0])-1); + my @cmd = split(/ /, $_[0]); + my $cmd = substr($_[0],0 , index($_[0], " ")); + my ($reload,$action,$whisper) = ("true","",$id); +#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< +#############>- DER LETZTEN ZUGEFLÜSTERTEN PERSON NOCHEINMAL FLÜSTERN -< + if ($cmd eq "/") { + &post($q->param('lastmsg')); +#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< + } elsif ($cmd eq "about") { + &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>"); +#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< + } elsif ($cmd eq "away") { + if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde + $tmp = ""; + } + for ($i=1; $i <= $#cmd; $i++) { + $tmp = $tmp." ".$cmd[$i]; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$tmp</font> ) ...</i></font>"); + $action = "away"; +#############>- 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\",\"main\");</script>"); +#############>- FARBEN WECHSELN -< + } elsif ($cmd eq "col") { + $col = $cmd[1]; + my $tmpsecol = $cmd[2]; + if ($tmpsecol eq "") { + $secol = $col + } else { + $secol = $tmpsecol; + } + &read_file("data/user/options/$alias"); + my @pro = <DATEI>; + close DATEI; + &write_file_new("data/user/options/$alias"); + print DATEI $pro[0]."".$col."\n".$secol; + close DATEI; + &log("system","\"edit_colors_ok\""); + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt ...</font></i>"); + $action = "change_colors"; +#############>- 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>"); +#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< + } elsif ($cmd eq "j") { + &change_room("j",$cmd[1],$room); + $action = "change_room"; +#############>- HANDELN -< + } elsif ($cmd eq "me" || $cmd eq "m") { + for ($i=1; $i <= $#cmd; $i++) { + $me_msg = $me_msg." ".$cmd[$i]; + } + if ($cmd eq "m") { + &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>"); + } else { + &post("<i><font color=$col>$alias $me_msg</font></i>"); + } +#############>- FLÜSTERN ( Auch mit '/' ) -< + } elsif ($cmd eq "msg" || $cmd eq "") { + my ($alias2post,$msg2post) = ($cmd[1],""); + if ($cmd eq "msg") { + for ($i=2; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } else { + $alias2post = $id; + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } + &list_dir("data/online/users"); + foreach(@dir) { + if ($_ eq $alias2post) { + &write_file("data/msgs/$alias2post"); + print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &write_file("data/msgs/$alias"); + print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &input_html($reload,"",$alias2post); + exit; + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>"); +#############>- DAS SYSTEM VERLASSEN -< + } elsif ($cmd eq "q") { + &post_prv("$alias","<script language=\"JavaScript\">window.open(\"index.pl?tmp=quit\",\"_top\");</script>"); + sleep 1; + &remove_online($alias,$room); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + exit; +#############>- SCHREIEN -< + } elsif ($cmd eq "s") { + my $msg2scream,$msg2post; + for ($i=1; $i <= $#cmd; $i++) { + $msg2scream = $msg2scream." ".$cmd[$i]; + } + $msg2post = "\U$msg2scream"; + &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>"); +#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< +} elsif ($cmd eq "w") { + &list_dir("data/online/rooms/$room"); + my ($is,$nr) = ("t",0); + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $personen = $personen." ".$_; + $nr++; + } + } + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff>$nr Person$nrs befinde$is sich im aktuellen Raum (\"$room\"): <font color=ffa500>$personen</font></font>"); +#############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< + } elsif ($cmd eq "wc" || $cmd eq "wc/") { + $raum = $cmd[1]; + if ($raum eq "" && $cmd eq "wc") { + &list_dir("data/online/users"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/users/$_"); + } + my $nr = ($#dir-1); + my ($nrs,$is) = ("","ist"); + if ($nr != 1) { + $nrs = "en"; + $is = "sind"; + } + &post_prv("$alias","<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; + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + &list_dir("data/online/rooms/$_",2); + my $nr = $#dir2-1; + $msg2post = $msg2post."<tr><td><b><font size=2 color=ffffff>$_ ($nr)</font></b></td><td><font size=2 color=ffffff>"; + 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; + &list_dir("data/online/rooms/$raum"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_"); + } + my ($nr,$is) = (($#dir-1),"t"); + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>"); + } +#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< + } elsif ($cmd eq "wj" || $cmd eq "ju") { + my $alias2search = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum"); + foreach $user (@dir2) { + if (-f "data/online/rooms/$raum/$user") { + if ($user eq $alias2search) { + if ($cmd eq "wj") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>"); + } else { + $action = "change_room"; + &change_room("ju",$raum,$room,$alias2search); + } + &input_html($reload,$action,$whisper); + exit; + } + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff> ist nicht eingelogt !</font></font>"); +#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- ALIAS VERBANNEN BZW. ENTBANNEN -< + } elsif ($cmd eq "ban" || $cmd eq "rban") { + &hirachie($alias); + if ($hirachie eq "ow") { + my ($alias2handle,$registriert) = $cmd[1]; + &list_dir("data/user/options"); + foreach(@dir) { + $registriert = "true" if ($_ eq $alias2handle); + } + if ($registriert ne "true") { + if ($cmd eq "ban") { + if ($alias2handle ne "") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>"); + } else { + &read_file("data/ban"); + my @banned = <DATEI>; + my ($benutzer); + my $nr = $#banned+1; + close DATEI; + foreach(@banned) { + $benutzer = $benutzer." ".$_; + } + &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>"); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>"); + } + &input_html("true"); + exit; + } + &read_file("data/ban"); + my @banlist = <DATEI>; + close DATEI; + foreach(@banlist) { + if ($_ eq "$alias2handle\n") { + if ($cmd eq "ban") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>"); + } else { + my $banned = "false"; + foreach(@banlist) { + $banned = "true" if ($_ eq "$alias2handle\n"); + } + if ($banned eq "true") { + my @newbanlist; + foreach(@banlist) { + push @newbanlist,$_ if ($_ ne "$alias2handle\n"); + } + &write_file_new("data/ban"); + print DATEI @newbanlist; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>"); + &log("system","\"ow_rban_$alias2handle_ok\""); + } + } + &input_html("true"); + exit; + } + } + if ($cmd eq "ban") { + &hirachie($alias2handle); + if ($hirachie ne "ow") { + &write_file("data/ban"); + print DATEI "$alias2handle\n"; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>"); + &log("system","\"ow_ban_".$alias2handle."_ok\""); + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>"); + &log("system","\"ow_ban_".$alias2handle."_ow\""); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>"); + } + } +#############>- IP # VON ALIAS ANZEIGEN LASSEN -< + } elsif ($cmd eq "ip") { + &hirachie($alias); + if ($hirachie eq "ow") { + my $alias2prove = $cmd[1]; + &list_dir("data/online/ident"); + foreach(@dir) { + if ($_ eq $alias2prove) { + &read_file("data/online/ident/$_"); + local $ipnr = <DATEI>; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>"); + } + } + } +#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< + } elsif ($cmd eq "k") { + &hirachie($alias); + if ($hirachie eq "wa" || $hirachie eq "ow") { + my $alias2kick = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2); + foreach $chatter (@dir2) { + if ($chatter eq $alias2kick) { + &hirachie($alias2kick); + if ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>"); + &log("system","wa_k_$alias2kick_ow"); #!! + } elsif ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Wächter und kann nicht \"gekickt\" werden !</font></font>"); + &log("system","wa_k_$alias2kick_ow"); #!! + } else { + &post_prv("$alias2kick","<script language=\"JavaScript\">window.open(\"index.pl?tmp=kick\",\"_top\");</script>"); + &zeit; + $_ = undef if ($room eq $_); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_); + &log("system","wa_k_$alias2kick"); #!! + &remove_online($alias2kick,$_,"kick"); + &secure_removeip($alias2kick); + } + &input_html("true"); + exit; + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>"); + } +#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -< + } elsif ($cmd eq "sys") { + &hirachie($alias); + if ($hirachie eq "ow") { + for ($i=1; $i <= $#cmd; $i++) { + $sys_msg = $sys_msg." ".$cmd[$i]; + } + &zeit; + &post_all("<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>"); + &log("system","\"sys_msg_$room\""); + } +#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -< + } elsif ($cmd eq "wa" || $cmd eq "rwa") { + &hirachie($alias); + if ($hirachie eq "ow") { + &zeit; + my $alias2handle = $cmd[1]; + if ($cmd eq "wa") { + my $anerkennen = "false"; + &list_dir("data/user/options"); + foreach(@dir) { + if ($_ eq $alias2handle) { + $anerkennen = "true"; + } + } + if ($anerkennen eq "true") { + &hirachie($alias2handle); + if ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_exists\""); + } elsif ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_oh-exists\""); + } else { + &write_file("data/wa"); + print DATEI $alias2handle."\n"; + close DATEI; + &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>"); + &log("system","\"oh_wa_".$alias2handle."_ok\""); + } + } else { + &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_notexists\""); + } + } elsif ($cmd eq "rwa") { + &read_file("data/wa"); + my @wafile = <DATEI>; + close DATEI; + my $aberkennen = "false"; + foreach(@wafile) { + if ($_ ne "$alias2handle\n") { + push @newafile,$_; + } else { + $aberkennen = "true"; + } + } + &write_file_new("data/wa"); + print DATEI @newafile; + close DATEI; + if ($aberkennen eq "true") { + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>"); + &log("system","\"oh_rwa_".$alias2handle."_ok\""); + } else { + &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>"); + &log("system","\"oh_rwa_".$alias2handle."_notexists\""); + } + } + } +#############>- ENDE DER CHATBEFEHLE -< +} +&input_html($reload,$action,$whisper); +} + +sub change_room { # Den Chat-Raum wechseln + my ($method,$newroom,$oldroom,$alias2follow) = @_; + $room = $oldroom; + &secure_checkip($alias); # IP Nummer überprüfen + &zeit; # Zeit 'erneuern' + if ($method eq "j") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } elsif ($method eq "ju") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<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>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } + &rm_rooms; +} + diff --git a/0.2.3/main2.pl b/0.2.3/main2.pl new file mode 100644 index 0000000..cdc6886 --- /dev/null +++ b/0.2.3/main2.pl @@ -0,0 +1,513 @@ +#!/usr/bin/perl -w + + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### + +if ($var eq "list_alias_html") { + &list_alias_html; +} elsif ($var eq "alias_html") { + &alias_html; +} elsif ($var eq "edit_profile_html") { + &edit_html("edit_profile_html"); +} elsif ($var eq "edit_options_html") { + &edit_html("edit_options_html"); +} elsif ($var eq "gb_html") { + &gb_html; +} elsif ($var eq "post_gb") { + &post_gb; +} elsif ($var eq "rm_gb_alias") { + &rm_gb; +} elsif ($var eq "edit_profile") { + &edit("edit_profile"); +} elsif ($var eq "edit_options") { + &edit("edit_options"); +} 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="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 + &secure_checkip($alias); + &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"; + } + if (-e "$tmpath") { + &read_file("$tmpath"); + my @datei = <DATEI>; + close DATEI; + pop(@datei) if ($#datei > 99); + my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + @newdatei = ("@newdatei", "@datei"); + &write_file_new("$tmpath"); + print DATEI @newdatei; + close DATEI; + } else { + &write_file_new("$tmpath"); + print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + close DATEI; + } + 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=$alias\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp\" target=\"_new\">Dein Profil</a> gehängt ... </font>"); + &alias_html; + exit; + } +} + +sub rm_gb { # Gästebucheintrag entfernen + &secure_checkip($alias); + $tmp = $alias; + &read_file("data/user/gbooks/$alias"); + my @gbfile = <DATEI>; + close DATEI; + my @newgbfile = (); + for($i=0; $i <= $#gbfile; $i++) { + push(@newgbfile,$gbfile[$i]) if ($i != $id); + } + &write_file_new("data/user/gbooks/$alias"); + print DATEI @newgbfile; + close DATEI; + &alias_html("rm_ok"); +} + +sub list_alias_html { # Liste aller Benutzer + &start_html("Alle Benutzer"); + &list_dir("data/user/options"); + my @liste = sort(@dir); + my $nr = $#dir-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=$_" }, + "$_"), + " "; + } + } +print <<END; + </div> +</body> +</html> +END +} + +sub alias_html { # Anzeigen eines Benutzerprofils + my $message = $_[0]; + local $counter = undef; + &read_file("data/user/counts/$tmp"); + $counter = <DATEI>; + close DATEI; + $counter++; + &write_file_new("data/user/counts/$tmp"); + print DATEI $counter; + close DATEI; + &start_html($tmp); +print <<END; +<div> + <a href="htdocs.pl?var=werda_html&alias=$alias">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 +} + &read_file("data/user/profiles/$tmp"); + @data = <DATEI>; + close DATEI; +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="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"> +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) = @_; + &secure_checkip($alias); + &start_html("Benutzerprofil ändern"); + if ($method eq "edit_options_html") { + &read_file("data/user/options/$alias"); + } elsif ($method eq "edit_profile_html") { + &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol","input"); + open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol","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 auf <a href="push.pl?alias=$alias&room=$room">Weiterchatten</a> klicken. +</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; +<form action="main2.pl"> + <input type="hidden" name="alias" value="$alias"> + <input type="hidden" name="var" value="edit_options"> + <div> + Dein Passwort + <font color=ffa500> + (Gut merken !!) + </font> + <br> + <input type="password" name="id" value="$data[0]"> + </div> + <br> + <div> + Geb hier das Passwort erneuert ein: + <br> + <input type="password" name="tmp" value="$data[0]"> + </div> + <br> + <div> + "Deine Farbe (Farbe Deines Nicks, Angabe in Hexadezimal): + <br> + <input type="text" name="col" value="$data[1]"> + </div> + <br> + <div> + Deine zweite Farbe (Farbe Deiner Nachrichten, Angabe in Hexadezimal): + <br> + <input type="text" name="secol" value="$data[2]"> + </div> + <br> +END + } 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="alias" value="$alias"> + <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="submit" value="Daten ändern ..."> + </font> + </form> +</body> +</html> +END +} + + +sub edit { # Benutzerprofil od. Chat-Optionen abspeichern + &secure_checkip($alias); + my $method = $_[0]; + if ($method eq "edit_profile") { + &write_file_new("data/user/profiles/$alias"); + print DATEI $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 DATEI; + &log("system","\"edit_profile_ok\""); + &edit_html("edit_profile_html","edit_profile_ok"); + } elsif ($method eq "edit_options") { + if ($id ne $tmp) { + &log("system","\"edit_pw_wrong\""); + &edit_html("edit_options_html","edit_pw_wrong"); + exit; + } + &secure_checkip($alias); + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n".$col."\n".$secol; + close DATEI; + &log("system","\"edit_options_ok\""); + &edit_html("edit_options_html","edit_options_ok"); + } +} diff --git a/0.2.3/online.pl b/0.2.3/online.pl new file mode 100644 index 0000000..2e8bf8d --- /dev/null +++ b/0.2.3/online.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +&secure_checkip($alias); +&start_html("Online","online"); +&online($alias,$room); +&list_dir("data/online/rooms/".$room); +print + $q->div( "$room:" ), + "<font size=1 color=ffffef face=arial>"; + foreach $online (@dir) { + if (-f "data/online/rooms/$room/$online") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$online", + -target=>"$online" }, "$online"), $q->br; + } + } +print + "</font>", + $q->end_html; + +sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern + my ($alias,$room) = @_; + &write_file_new("data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-e "data/online/rooms/$room") { + } else { + mkdir "data/online/rooms/$room", 0777; + } + &write_file_new("data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen + my $provetime = <DATEI>; + close DATEI; + if ($provetime < (time - 30)) { + &write_file_new("data/online/prove"); + print DATEI time; + close DATEI; + &rm_alias("data/online/users"); + &rm_rooms; + } +} + diff --git a/0.2.3/push.pl b/0.2.3/push.pl new file mode 100644 index 0000000..7cabba9 --- /dev/null +++ b/0.2.3/push.pl @@ -0,0 +1,93 @@ +#!/usr/bin/perl -w
+use CGI;
+$q = new CGI;
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkip($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+$| = 1; # Cache von Perl ausschalten
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title Copyright by Paul C. Bütow 2k $tmp\n");
+
+if ($var eq "push_logs_html") {
+ $msgfile = $tmp;
+ print "<hr><font size=2 color=ffffff face=arial>";
+} elsif ($var eq "clear_screen") {
+ $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+} else {
+ $msgfile = "data/msgs/$alias";
+ print $q->br;
+}
+
+open (MSGFILE, $msgfile);
+
+#################################
+##ENDLOSSCHLEIFE FÜR DEN STREAM##
+#################################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 29) { # Nach 30 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
+print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen\">Weiterchatten</a> klicken.</font>";
diff --git a/0.2.3/setup.sh b/0.2.3/setup.sh new file mode 100644 index 0000000..c5e369e --- /dev/null +++ b/0.2.3/setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +mkdir data +mkdir data/logs +chmod 777 data/logs +mkdir data/msgs +chmod 777 data/msgs +mkdir data/logs/ow +chmod 777 data/logs/ow +mkdir data/user +chmod 777 data/user +mkdir data/user/counts +chmod 777 data/user/counts +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/online +chmod 777 data/online +mkdir data/online/rooms +chmod 777 data/online/rooms +mkdir data/online/users +chmod 777 data/online/users +mkdir data/online/ident +chmod 777 data/online/ident +mkdir data/htdocs +chmod 777 data/htdocs +mv help_html data/htdocs +mv logs_html data/htdocs +chmod 777 data/htdocs/* +chmod 777 * +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.jpg ../../htdocs/yChat/ +echo +echo yChat Setup beendet ... +echo Created and copyrighted by Paul C. Bütow aka Snooper +echo +rm setup.sh diff --git a/0.2.3/unten.gif b/0.2.3/unten.gif Binary files differnew file mode 100644 index 0000000..285fb53 --- /dev/null +++ b/0.2.3/unten.gif diff --git a/0.2.3/yBanner.gif b/0.2.3/yBanner.gif Binary files differnew file mode 100644 index 0000000..e4b691e --- /dev/null +++ b/0.2.3/yBanner.gif diff --git a/0.2.3/yChat.jpg b/0.2.3/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.2.3/yChat.jpg diff --git a/0.2.4a/INSTALL.txt b/0.2.4a/INSTALL.txt new file mode 100644 index 0000000..13fb7bb --- /dev/null +++ b/0.2.4a/INSTALL.txt @@ -0,0 +1,107 @@ +#############################################################################
+## yChat.de Version 0.2.4 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+INSTALL.txt => Dieses Dokument
+
+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 für den Chat notwendigen HTML-Dokumente:
+ ./cgi-bin/yChat/data/htdocs/*
+
+ Folgende Dateien müssen in das "data/htdocs" verzeichnis bewegt werden:
+
+ help_html => 101 Hilfedatei
+ logs_html => 101 Logbeschreibung
+
+- Hier befinden sich alle Logdateien, die vom Chat erstellt werden:
+ ./cgi-bin/yChat/data/logs/*
+
+- Hier befinden sich alle Oberwächter-Logdateien:
+ ./cgi-bin/yChat/data/logs/ow/*
+
+- Hier befinden sich die Message-Dateien der eingelogten Benutzer:
+ ./cgi-bin/yChat/data/msgs/*
+
+- Hier befinden sich alle Daten der registrierten Benutzer:
+ ./cgi-bin/yChat/data/user/*
+
+- Hier wird abgespeichert, wie oft ein Benutzerprofil insgesant schon
+ aufgerufen wurde:
+ ./cgi-bin/yChat/data/user/counts/*
+
+- Hier 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 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
+ ./cgi-bin/yChat/data/online/rooms/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper
\ No newline at end of file diff --git a/0.2.4a/LIESMICH.txt b/0.2.4a/LIESMICH.txt new file mode 100644 index 0000000..8d68f71 --- /dev/null +++ b/0.2.4a/LIESMICH.txt @@ -0,0 +1,33 @@ +#############################################################################
+## yChat.de Version 0.2.4 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ servers.yChat.de => Liste aller laufenden yChat-Systeme
+ install.yChat.de => Installationsdokumentation
+ liesmich.yChat.de => Allgemeine Bedingungen usw.
+ updates.yChat.de => Update-dListe
+ www.yChat.de => Das Skript zum testen
\ No newline at end of file diff --git a/0.2.4a/TODO.txt b/0.2.4a/TODO.txt new file mode 100644 index 0000000..5d8d7db --- /dev/null +++ b/0.2.4a/TODO.txt @@ -0,0 +1,32 @@ +Folgende Funktionen werden demnächst in yChat implentiert:
+
+ - Räume auf/abschließen, themen geben, Raumbesetzer (vergl.
+ mit den normalen Häuptlingen aus Kilahu).
+
+ - 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.
+
+ - Farbtabelle unter "Optionen".
+
+ - E-Mail zusendung bei verlorenem Passwort.
+
+ - Totale Onlinezeit der einzelnen Chatter soll protokolliert
+ werden. Daraus wird dann eine Top20 der Chatter erstellt.
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Java-Applet-Eingabezeile für einen flüssigeren Chat
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.2.4a/UPDATES.txt b/0.2.4a/UPDATES.txt new file mode 100644 index 0000000..7dc7f50 --- /dev/null +++ b/0.2.4a/UPDATES.txt @@ -0,0 +1,43 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.2.3 auf 0.2.4
+ - Optimierung bzw. Verbesserung der Push-Routine push.pl.
+ - Server-Ping wurde von 2-Pings-per-Second auf 4 erhöht.
+ - yChat-Banner wurde erstellt und ist unter
+ documents.yChat.de/yBanner.jpg vorzufinden.
+ - Unter der URL servers.yChat.de wurde eine Serverliste angelegt,
+ welche anzeigt wo yChat-Systeme laufen.
+ - Des weiteren wurden die URLs updates.yChat.de, install.yChat.de
+ und liesmich.yChat.de eingerichtet.
+ - Die Menüpunkte wurden zusammengefaßt, damit sie unter einer
+ Auflösung von 800x600 nur eine Zeile belegen.
+ - Einige Bugs wurden entfernt.
+
+Update von 0.2.2 auf 0.2.3 - 25.11.2k
+ - Smooth scrolling JavaScript (Vielen Dank an Andreas Buchwald).
+ - "IP#-Fehler" wurde so gut wie beseitigt.
+ - Aufrufe der einzelnen Benutzerprofile wird gezählt und angezeigt.
+ Diese werden in data/user/counts/* gespeichert.
+ - Automatische Einrichtung des Chats mit setup.sh und Telnet.
+ - Menüpunkt "Dein Profil" wurde entfernt da eigenes Profil auch
+ stets über die Onlineliste aufgerufen werden kann.
+
+Update von 0.2.1 auf 0.2.2 - 23.11.2k
+ - Einige Bugs wurden entfernt.
+ - Geschwindigkeit des Chats wurde optimiert.
+ - Eine Liste aller eingelogten Benutzer erscheint am Rand. Hierfür
+ wurde die Datei online.pl eingeführt. Sie aktuallisiert sich alle
+ 20 Sekunden.
+ - Die UPDATES.txt wurde eingeführt.
+
+Update von 0.2.0 auf 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden nun anders verwaltet.
+
+Update von Alpha XVIII auf 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ überarbeitet.
+ - Neue Versionsnumern wurden eingeführt.
\ No newline at end of file diff --git a/0.2.4a/bar.gif b/0.2.4a/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.2.4a/bar.gif diff --git a/0.2.4a/config.pm b/0.2.4a/config.pm new file mode 100644 index 0000000..4428e38 --- /dev/null +++ b/0.2.4a/config.pm @@ -0,0 +1,321 @@ +########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "29.11.2k";
+$version = "0.2.4";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ body.online { background-color: 444444; background-image: none }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($method,$msg2log) = @_;
+ &zeit;
+ if ( $method eq "msg") {
+ $log = "data/logs/$room-$day.$month.$year";
+ } elsif ($method eq "logins") {
+ $log = "data/logs/ow/logins-$day.$month.$year";
+ $syslog = "data/logs/ow/system-$day.$month.$year";
+ } elsif ($method eq "system") {
+ $log = "data/logs/ow/system-$day.$month.$year";
+ }
+ &write_file($log);
+ if ($method eq "msg") {
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ } elsif ($method eq "logins") {
+ print DATEI "($day.$month.-$hours:$min:$sec) User: $alias IP#: $ENV{'REMOTE_ADDR'} Agent: $ENV{'HTTP_USER_AGENT'}\n<br>";
+ close DATEI;
+ &write_file($syslog);
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ } elsif ($method eq "system") {
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ }
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } else {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ &log("system","\"logout_$__ok\"");
+ }
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, die älter als 60 Sekunden sind
+ my $dir2rm = $_[0];
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_");
+ &list_dir("data/online/rooms/$_",2);
+ rmdir("data/online/rooms/$_") if ($#dir2 = 1);
+ }
+ }
+}
+
+sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen.
+ my ($alias2check,$method) = @_;
+ my $ip;
+ for($i=0 ;$i<=5;) {
+ &read_file("data/online/ident/$alias2check");
+ $ip = <DATEI>;
+ close DATEI;
+ if ($ip ne $ENV{'REMOTE_ADDR'}) {
+ $i++;
+ } else {
+ goto ENDCHECKIP
+ }
+ if ($i<=5) {
+ &log("system","\"secure_ip\"");
+ if ($method eq undef) {
+ &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.");
+ } else {
+ &post_prv("$alias2check","<font color=red>Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.</font>");
+ &input_html("true") if ($method = 2);
+ }
+ exit;
+ }
+ }
+ENDCHECKIP:
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = "nc";
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+
+
diff --git a/0.2.4a/help_html b/0.2.4a/help_html new file mode 100644 index 0000000..79b94fa --- /dev/null +++ b/0.2.4a/help_html @@ -0,0 +1,616 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table width=100% bgcolor=555555> + <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> + Abmelden mit einer + Farbe/n ( + <font color=red> + Namensfarbe + </font>/ + <font color=ffa500> + Textfarbe + </font> + ) wechseln. Angabe in Hexadezimal. Wird + <font color=ffa500> + Textfarbe + </font> + nicht angegeben, dann hat der Text die + <font color=red> + Namensfarbe + </font> + </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 + </div> + </td> + <td> + <div> + Handeln mit 2 Farben + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +/me + </div> + </td> + <td> + <div> + Handeln mit einer Farbe + </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. (Wird nicht vom Chat protokolliert) + </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. (Wird nicht vom Chat protokolliert) + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +// + </div> + </td> + <td> + <div> + Wurde zuletzt eine öffentliche Nachricht gepostet, dann wird diese nocheinmal gepostet. (Funktioniert nicht bei Befehlen, flüstern oder schreien) + </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> +/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> +/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 + </div> + </td> + <td> + <div> + Zeigt an, wer eingelog ist. + </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. + </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=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=green> + OW + </font> + </div> + </td> + <td> + <div> +/ban + </div> + </td> + <td> + <div> + Zeigt alle verbannten Benutzer an + </div> + </td> + </tr> + <tr> + <td> + <div> + <font color=green> + OW + </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=green> + OW + </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=green> + OW + </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=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 bestehenden Räumen) + </div> + </td> + </tr> +</table> +<hr> +<div> + Zur Erklärung: NC steht für "Normale Chatter", WÄ für "Wächter" und OW für "Oberwächter". + Obrige Befehle können nur von der/den jeweiligen Benutzergruppe/n oder höher ausgeführt werden. +</div> +</body> +</html>
\ No newline at end of file diff --git a/0.2.4a/htdocs.pl b/0.2.4a/htdocs.pl new file mode 100644 index 0000000..b52dd6b --- /dev/null +++ b/0.2.4a/htdocs.pl @@ -0,0 +1,222 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "help_html") { + &printfile("data/htdocs/help_html","Alle Chatbefehle"); +} elsif ($var eq "menu_html") { + &menu_html; +} elsif ($var eq "werda_html") { + &werda_html; +} elsif ($var eq "logs_html") { + &logs_html; +} elsif ($var eq "view_sulogs_html") { + &hirachie($alias); + if ($hirachie eq "ow") { + &start_html("Oberwächter-Logdateien"); + print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a><hr>"; + &printfile($tmp); + print "</div></body></html>"; + } +} elsif ($var eq "view_logs_html") { + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + &printfile($tmp,$tmp,"log"); + } +} elsif ($var eq "superuser_html") { + &superuser_html; +} elsif ($var eq "bar_html") { + print + $q->start_html(-bgcolor=>"ffa500"), + $q->end_html; +} else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; +} + +sub menu_html { + if ($tmp eq "quit") { + print + $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" ); + sleep 1; + &remove_online($alias); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + } + &start_html("Menü","menu"); +print <<END; + <center> + <div> + [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp" target="werda">Wer ist da?</a>] + [<a href="main2.pl?var=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>] + [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Optionen</a>] + [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzer</a>] + [<a href="htdocs.pl?var=help_html" target="Befehle">Befehle</a>] + [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Board</a>] + [<a href="htdocs.pl?var=superuser_html&alias=$alias" target="Hirachie">Superuser</a>] + [<a href="htdocs.pl?var=logs_html&alias=$alias" target="Logdateien">Logs</a>] + [<a href="push.pl?alias=$alias&room=$room&var=clear_screen" target="main">Weiterchatten</a>] + [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias">Verlassen</a>] + </div> + </center> +</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 + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + my $room = $_; + &list_dir("data/online/rooms/$room",2); + local $nr = $#dir2-1; + print $q->b( $_ ), + "($nr)", + $q->br; + foreach(@dir2) { + if ($_ ne ".." && $_ ne ".") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " "; + } + } + print $q->br, $q->br; + } + } + print + "</div>", + $q->end_html; +} + +sub logs_html { + &secure_checkip($alias); + &start_html("Logdateien"); + print <<END; +<div> + Hier befinden sich alle Logdateien +</div> +<hr> +END + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + if ($hirachie eq "ow") { + print $q->div( "Folgende Logdateien können nur von Oberwächtern (OW) gelesen werden" ); + &printfile("data/htdocs/logs_html"); + &list_dir("data/logs/ow"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/ow/$_") { + print $q->a( { -href=>"htdocs.pl?var=view_sulogs_html&alias=$alias&tmp=data/logs/ow/$_", + -target=>$_}, + "$_" ). + " ", + } + } + print $q->hr; + } + print $q->div( "Folgende Logdateien können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + &list_dir("data/logs"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/$_") { + print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_", + -target=>"_new" }, + "$_" ), + " "; + } + } + if ($hirachie eq "wa") { + print $q->hr, + $q->div( "Oberwächter können zusätzlich die Systemlogdateien lesen. Du bist allerdings ein \"Wächter\" und ", + " bist nicht dazu berechtigt " ), + $q->br; + &printfile("data/htdocs/logs_html"); + } + } else { + print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ", + "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde. Oberwächter ", + "können folgende Systemlogdateien zusätzlich lesen:" ), + $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 "; + &hirachie($alias); + if ($hirachie eq "ow") { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.</div>", + $q->hr; + } elsif ( $hirachie 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.2.4a/index.pl b/0.2.4a/index.pl new file mode 100644 index 0000000..4f1e24d --- /dev/null +++ b/0.2.4a/index.pl @@ -0,0 +1,354 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = <DATEI>; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&start_html("Created by Paul C. Bütow 2k"); +print <<END; + <center> + <table width=400> + <tr> + <td> + <b> + <div> + $title - ( <a href="http://servers.yChat.de">yChat-Servers</a> ) + <img src="$gfxpath/yChat.jpg"> + </div> + </b> +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 + &log("system","\"first_http_ok\""); + } +print <<END; + <hr> + <form action="index.pl"> + <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="id" value="$id"> + </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> + <div> + yChat befindet sich momentan noch in der Entwicklungsphase ! + <br> + Fragen gehen an Paul Bütow ( + <a href="mailto:paul\@buetow.oxg.de"> + paul\@buetow.oxg.de + </a> + ) :-) + <br> + <br> + Diese Seite wurde schon $counter mal aufgerufen. + </td> + </tr> + </table> + </center> +</body> +</html> +END +} + + +sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers. +my $reload = $_[0]; +&start_html("Registration"); +print <<END; + <center> + <table width=400> + <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="id" value="$id"> + </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"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = <DATEI>; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = <DATEI>; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + &log("system","\"login_alias_banned\""); + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + &write_file_new("data/online/ident/$alias"); + print DATEI $ENV{'REMOTE_ADDR'}; + close DATEI; + &frameset_html; + exit; + } else { + &log("system","\"login_pw_wrong\""); + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + &log("system","\"login_alias_notexists\""); + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &log("system","\"reg_alias_prohibited\""); + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &log("system","\"reg_pw_wrong\""); + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &log("system","\"reg_alias_exists\""); + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>"); + &log("system","\"reg_ok\""); + &login_html; +} + +sub frameset_html { +print <<END; +<html> + <head> + <title> + $title - Created by Paul C. Bütow 2k + </title> + </head> +<frameset border=0 frameborder=0 framespacing=0 rows="50,5,*,55"> + <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol" scrolling="no"> + <frame src="htdocs.pl?var=bar_html scrolling="no"> + <frameset border=0 frameborder=0 framespacing=0 cols="150,*"> + <frame name="online" src="online.pl?room=$room&alias=$alias"> + <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen"> + </frameset> + <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login" scrolling="no"> +</frameset> +</html> +END +} diff --git a/0.2.4a/logs_html b/0.2.4a/logs_html new file mode 100644 index 0000000..1317062 --- /dev/null +++ b/0.2.4a/logs_html @@ -0,0 +1,391 @@ +<br> +<div> + In der System-Logdatei tauchen folgende Ursachen auf: +</div> +<br> +<table border=0 width=100% bgcolor=555555> + <tr> + <th bgcolor=666666> + <div> + Ursache + </div> + </th> + <th bgcolor=666666> + <div> + Beschreibung + </div> + </th> + </tr> + <tr> + <td> + <div> + edit_profile_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sein Profil erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_pw_wrong + </div> + </td> + <td> + <div> + Beim Editieren der Chat-Optionen stimmten die beiden Passwortfelder nicht überein. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_colors_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chatfarben erfolgreich gewechselt. + </div> + </td> + </tr> + <tr> + <td> + <div> +edit_options_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chat-Optionen erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> +first_http_ok + </div> + </td> + <td> + <div> + Der angegebenen IP# wurde Startseite erfolgreich angezeigt. (Benutzername noch nicht vorhanden) + </div> + </td> + </tr> + <tr> + <td> + <div> +login_alias_banned + </div> + </td> + <td> + <div> + Angegebener Benutzer konnte sich nicht in das System einloggen, da sein benutzername verbannt war. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_alias_notexists + </div> + </td> + <td> + <div> + Beim Einlogversuch existierte der angegebene Benutzername nicht. + </div> + </td> + </tr> + <tr> + <td> + <div> +login_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich in das System eingelogt. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_pw_wrong + </div> + </td> + <td> + <div> + Beim Einloggen wurde das falsche PW eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich (manuell) aus dem System ausgelogt. ("... verläßt den Chat ...") + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + User hat gemerkt, daß sich + <font color=red> + Alias + </font> + nicht mehr im Chat befindet. ("... hat den Chat verlassen ..."). + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + verbannt + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ow + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zu verbannen ( + <font color=red> + Alias + </font> + war Oberwächter und konnte nicht verbannt werden ) + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_rban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + "entbannt" + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Wächter eingetragen.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + existierte nicht in der Benutzerdatenbank.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ow-exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Oberwächter eingetragen. Oberwächter können nicht zeitgleich Wächter sein.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + erfolgreich zum Wächter ernannt. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter konnte + <font color=red> + Alias + </font> + nicht zum Wächter ernennen. (War nicht als WÄ registriert).. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + vom Wächter zum normalen Chatter degradiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_exists + </div> + </td> + <td> + <div> + Bei der Registrierung war der Benutzername bereits vorhanden. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_prohibited + </div> + </td> + <td> + <div> + Bei der Registrierung war der angegebene Benutzername verboten (enthielt Sonderzeichen). + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sich erfolgreich registriert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_pw_wrong + </div> + </td> + <td> + <div> + Bei der Registrierung wurde das PW falsch eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + secure_ip + </div> + </td> + <td> + <div> + Unbefugter Zugriff der angegebenen IP# auf den angegebenen Benutzernamen. + </div> + </td> + </tr> + <tr> + <td> + <div> + sys_msg_<font color=red>Raum</font> + </div> + </td> + <td> + <div> + Angegebener Oberwächter schreibt eine Systemnachricht aus + <font color=red> + Raum + </font>. + </div> + </td> + </tr> +</table> +<br>
\ No newline at end of file diff --git a/0.2.4a/main.pl b/0.2.4a/main.pl new file mode 100644 index 0000000..36a759a --- /dev/null +++ b/0.2.4a/main.pl @@ -0,0 +1,498 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden + +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "input_html") { + &input_html; +} elsif ($var eq "post_msg") { + &post_msg; +} elsif ($var eq "change_room") { + &change_room; +} else { + &error("Parameter fehlt"); +} + +sub input_html { # Eingabemaske für den Chat. + my ($reload,$action,$whisper,$lastmsg) = @_; + $action = $q->param('action') if ($action eq ""); + if ($tmp eq "away") { + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>"); + } elsif ($tmp eq "login") { + &remove_rooms; + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>"); + &log("logins","\"login_ok\""); + } + if ($action ne "" && $action ne "whisper" && $action ne "away") { + print "<html><head><script language=\"JavaScript\">"; + if ($action eq "change_room") { + print "open(\"online.pl?alias=$alias&room=$room\",\"online\");"; + print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol\",\"input\");"; + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } elsif ($action eq "change_colors") { + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } + print "</script></head><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } else { + print "<html><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } + print "<center><form action=\"main.pl\">"; + print "<input type=\"hidden\" name=\"tmp\" value=\"away\">" if ($action eq "away"); + print <<END; + <input type="hidden" name="var" value="post_msg"> + <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="id" value="$whisper"> + <input type="hidden" name="lastmsg" value="$lastmsg"> + <input size="70" name="msg"> + <input type="submit" value="Texten"></form></center> +END +if ($reload eq "true") { +print <<END; + <script language="JavaScript"> + <!-- + document.forms[0].msg.focus(); + //--> + </script> +END +} +print + $q->end_html; +} + +sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde. + $| = 1; # Cache von Perl ausschalten + $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren + $msg =~ s#kilahu#yChat#g; + $msg =~ s#ooperle#per!#g; + if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht + $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>"; + $msg =~ s#"#'#g; # " in ' umtauschen für den befehl "//" + &input_html("true","",$id,$msg); # -> Reload=true, Action=none, Whisper=$id + &secure_checkip($alias,1); + &post($msg); + } else { + &secure_checkip($alias,2); + &cmd($msg); + } +} + +sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können. + $_[0] = $_[0]." "; + $_[0] = substr($_[0], 1, length($_[0])-1); + my @cmd = split(/ /, $_[0]); + my $cmd = substr($_[0],0 , index($_[0], " ")); + my ($reload,$action,$whisper) = ("true","",$id); +#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< +#############>- DER LETZTEN ZUGEFLÜSTERTEN PERSON NOCHEINMAL FLÜSTERN -< + if ($cmd eq "/") { + &post($q->param('lastmsg')); +#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< + } elsif ($cmd eq "about") { + &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>"); +#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< + } elsif ($cmd eq "away") { + if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde + $tmp = ""; + } + for ($i=1; $i <= $#cmd; $i++) { + $tmp = $tmp." ".$cmd[$i]; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$tmp</font> ) ...</i></font>"); + $action = "away"; +#############>- 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\",\"main\");</script>"); +#############>- FARBEN WECHSELN -< + } elsif ($cmd eq "col") { + $col = $cmd[1]; + my $tmpsecol = $cmd[2]; + if ($tmpsecol eq "") { + $secol = $col + } else { + $secol = $tmpsecol; + } + &read_file("data/user/options/$alias"); + my @pro = <DATEI>; + close DATEI; + &write_file_new("data/user/options/$alias"); + print DATEI $pro[0]."".$col."\n".$secol; + close DATEI; + &log("system","\"edit_colors_ok\""); + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt ...</font></i>"); + $action = "change_colors"; +#############>- 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>"); +#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< + } elsif ($cmd eq "j") { + &change_room("j",$cmd[1],$room); + $action = "change_room"; +#############>- HANDELN -< + } elsif ($cmd eq "me" || $cmd eq "m") { + for ($i=1; $i <= $#cmd; $i++) { + $me_msg = $me_msg." ".$cmd[$i]; + } + if ($cmd eq "m") { + &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>"); + } else { + &post("<i><font color=$col>$alias $me_msg</font></i>"); + } +#############>- FLÜSTERN ( Auch mit '/' ) -< + } elsif ($cmd eq "msg" || $cmd eq "") { + my ($alias2post,$msg2post) = ($cmd[1],""); + if ($cmd eq "msg") { + for ($i=2; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } else { + $alias2post = $id; + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } + &list_dir("data/online/users"); + foreach(@dir) { + if ($_ eq $alias2post) { + &write_file("data/msgs/$alias2post"); + print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &write_file("data/msgs/$alias"); + print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &input_html($reload,"",$alias2post); + exit; + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>"); +#############>- DAS SYSTEM VERLASSEN -< + } elsif ($cmd eq "q") { + &post_prv("$alias","<script language=\"JavaScript\">window.open(\"index.pl?tmp=quit\",\"_top\");</script>"); + sleep 1; + &remove_online($alias,$room); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + exit; +#############>- SCHREIEN -< + } elsif ($cmd eq "s") { + my ($msg2scream,$msg2post); + for ($i=1; $i <= $#cmd; $i++) { + $msg2scream = $msg2scream." ".$cmd[$i]; + } + $msg2post = "\U$msg2scream"; + &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>"); +#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< +} elsif ($cmd eq "w") { + &list_dir("data/online/rooms/$room"); + my ($is,$nr) = ("t",0); + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $personen = $personen." ".$_; + $nr++; + } + } + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff>$nr Person$nrs befinde$is sich im aktuellen Raum (\"$room\"): <font color=ffa500>$personen</font></font>"); +#############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< + } elsif ($cmd eq "wc" || $cmd eq "wc/") { + $raum = $cmd[1]; + if ($raum eq "" && $cmd eq "wc") { + &list_dir("data/online/users"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/users/$_"); + } + my $nr = ($#dir-1); + my ($nrs,$is) = ("","ist"); + if ($nr != 1) { + $nrs = "en"; + $is = "sind"; + } + &post_prv("$alias","<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; + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + &list_dir("data/online/rooms/$_",2); + my $nr = $#dir2-1; + $msg2post = $msg2post."<tr><td><b><font size=2 color=ffffff>$_ ($nr)</font></b></td><td><font size=2 color=ffffff>"; + 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; + &list_dir("data/online/rooms/$raum"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_"); + } + my ($nr,$is) = (($#dir-1),"t"); + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>"); + } +#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< + } elsif ($cmd eq "wj" || $cmd eq "ju") { + my $alias2search = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum"); + foreach $user (@dir2) { + if (-f "data/online/rooms/$raum/$user") { + if ($user eq $alias2search) { + if ($cmd eq "wj") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>"); + } else { + $action = "change_room"; + &change_room("ju",$raum,$room,$alias2search); + } + &input_html($reload,$action,$whisper); + exit; + } + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff> ist nicht eingelogt !</font></font>"); +#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- ALIAS VERBANNEN BZW. ENTBANNEN -< + } elsif ($cmd eq "ban" || $cmd eq "rban") { + &hirachie($alias); + if ($hirachie eq "ow") { + my ($alias2handle,$registriert) = $cmd[1]; + &list_dir("data/user/options"); + foreach(@dir) { + $registriert = "true" if ($_ eq $alias2handle); + } + if ($registriert ne "true") { + if ($cmd eq "ban") { + if ($alias2handle ne "") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>"); + } else { + &read_file("data/ban"); + my @banned = <DATEI>; + my ($benutzer); + my $nr = $#banned+1; + close DATEI; + foreach(@banned) { + $benutzer = $benutzer." ".$_; + } + &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>"); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>"); + } + &input_html("true"); + exit; + } + &read_file("data/ban"); + my @banlist = <DATEI>; + close DATEI; + foreach(@banlist) { + if ($_ eq "$alias2handle\n") { + if ($cmd eq "ban") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>"); + } else { + my $banned = "false"; + foreach(@banlist) { + $banned = "true" if ($_ eq "$alias2handle\n"); + } + if ($banned eq "true") { + my @newbanlist; + foreach(@banlist) { + push @newbanlist,$_ if ($_ ne "$alias2handle\n"); + } + &write_file_new("data/ban"); + print DATEI @newbanlist; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>"); + &log("system","\"ow_rban_$alias2handle_ok\""); + } + } + &input_html("true"); + exit; + } + } + if ($cmd eq "ban") { + &hirachie($alias2handle); + if ($hirachie ne "ow") { + &write_file("data/ban"); + print DATEI "$alias2handle\n"; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>"); + &log("system","\"ow_ban_".$alias2handle."_ok\""); + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>"); + &log("system","\"ow_ban_".$alias2handle."_ow\""); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>"); + } + } +#############>- IP # VON ALIAS ANZEIGEN LASSEN -< + } elsif ($cmd eq "ip") { + &hirachie($alias); + if ($hirachie eq "ow") { + my $alias2prove = $cmd[1]; + &list_dir("data/online/ident"); + foreach(@dir) { + if ($_ eq $alias2prove) { + &read_file("data/online/ident/$_"); + local $ipnr = <DATEI>; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>"); + } + } + } +#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< + } elsif ($cmd eq "k") { + &hirachie($alias); + if ($hirachie eq "wa" || $hirachie eq "ow") { + my $alias2kick = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2); + foreach $chatter (@dir2) { + if ($chatter eq $alias2kick) { + &hirachie($alias2kick); + if ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>"); + &log("system","wa_k_$alias2kick_ow"); #!! + } elsif ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Wächter und kann nicht \"gekickt\" werden !</font></font>"); + &log("system","wa_k_$alias2kick_ow"); #!! + } else { + &post_prv("$alias2kick","<script language=\"JavaScript\">window.open(\"index.pl?tmp=kick\",\"_top\");</script>"); + &zeit; + $_ = undef if ($room eq $_); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_); + &log("system","wa_k_$alias2kick"); #!! + &remove_online($alias2kick,$_,"kick"); + &secure_removeip($alias2kick); + } + &input_html("true"); + exit; + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>"); + } +#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -< + } elsif ($cmd eq "sys") { + &hirachie($alias); + if ($hirachie eq "ow") { + for ($i=1; $i <= $#cmd; $i++) { + $sys_msg = $sys_msg." ".$cmd[$i]; + } + &zeit; + &post_all("<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>"); + &log("system","\"sys_msg_$room\""); + } +#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -< + } elsif ($cmd eq "wa" || $cmd eq "rwa") { + &hirachie($alias); + if ($hirachie eq "ow") { + &zeit; + my $alias2handle = $cmd[1]; + if ($cmd eq "wa") { + my $anerkennen = "false"; + &list_dir("data/user/options"); + foreach(@dir) { + if ($_ eq $alias2handle) { + $anerkennen = "true"; + } + } + if ($anerkennen eq "true") { + &hirachie($alias2handle); + if ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_exists\""); + } elsif ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_oh-exists\""); + } else { + &write_file("data/wa"); + print DATEI $alias2handle."\n"; + close DATEI; + &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>"); + &log("system","\"oh_wa_".$alias2handle."_ok\""); + } + } else { + &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>"); + &log("system","\"oh_wa_".$alias2handle."_notexists\""); + } + } elsif ($cmd eq "rwa") { + &read_file("data/wa"); + my @wafile = <DATEI>; + close DATEI; + my $aberkennen = "false"; + foreach(@wafile) { + if ($_ ne "$alias2handle\n") { + push @newafile,$_; + } else { + $aberkennen = "true"; + } + } + &write_file_new("data/wa"); + print DATEI @newafile; + close DATEI; + if ($aberkennen eq "true") { + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>"); + &log("system","\"oh_rwa_".$alias2handle."_ok\""); + } else { + &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>"); + &log("system","\"oh_rwa_".$alias2handle."_notexists\""); + } + } + } +#############>- ENDE DER CHATBEFEHLE -< +} +&input_html($reload,$action,$whisper); +} + +sub change_room { # Den Chat-Raum wechseln + my ($method,$newroom,$oldroom,$alias2follow) = @_; + $room = $oldroom; + &secure_checkip($alias); # IP Nummer überprüfen + &zeit; # Zeit 'erneuern' + if ($method eq "j") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } elsif ($method eq "ju") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<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>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } + &rm_rooms; +} + diff --git a/0.2.4a/main2.pl b/0.2.4a/main2.pl new file mode 100644 index 0000000..cdc6886 --- /dev/null +++ b/0.2.4a/main2.pl @@ -0,0 +1,513 @@ +#!/usr/bin/perl -w + + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### + +if ($var eq "list_alias_html") { + &list_alias_html; +} elsif ($var eq "alias_html") { + &alias_html; +} elsif ($var eq "edit_profile_html") { + &edit_html("edit_profile_html"); +} elsif ($var eq "edit_options_html") { + &edit_html("edit_options_html"); +} elsif ($var eq "gb_html") { + &gb_html; +} elsif ($var eq "post_gb") { + &post_gb; +} elsif ($var eq "rm_gb_alias") { + &rm_gb; +} elsif ($var eq "edit_profile") { + &edit("edit_profile"); +} elsif ($var eq "edit_options") { + &edit("edit_options"); +} 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="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 + &secure_checkip($alias); + &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"; + } + if (-e "$tmpath") { + &read_file("$tmpath"); + my @datei = <DATEI>; + close DATEI; + pop(@datei) if ($#datei > 99); + my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + @newdatei = ("@newdatei", "@datei"); + &write_file_new("$tmpath"); + print DATEI @newdatei; + close DATEI; + } else { + &write_file_new("$tmpath"); + print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + close DATEI; + } + 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=$alias\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp\" target=\"_new\">Dein Profil</a> gehängt ... </font>"); + &alias_html; + exit; + } +} + +sub rm_gb { # Gästebucheintrag entfernen + &secure_checkip($alias); + $tmp = $alias; + &read_file("data/user/gbooks/$alias"); + my @gbfile = <DATEI>; + close DATEI; + my @newgbfile = (); + for($i=0; $i <= $#gbfile; $i++) { + push(@newgbfile,$gbfile[$i]) if ($i != $id); + } + &write_file_new("data/user/gbooks/$alias"); + print DATEI @newgbfile; + close DATEI; + &alias_html("rm_ok"); +} + +sub list_alias_html { # Liste aller Benutzer + &start_html("Alle Benutzer"); + &list_dir("data/user/options"); + my @liste = sort(@dir); + my $nr = $#dir-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=$_" }, + "$_"), + " "; + } + } +print <<END; + </div> +</body> +</html> +END +} + +sub alias_html { # Anzeigen eines Benutzerprofils + my $message = $_[0]; + local $counter = undef; + &read_file("data/user/counts/$tmp"); + $counter = <DATEI>; + close DATEI; + $counter++; + &write_file_new("data/user/counts/$tmp"); + print DATEI $counter; + close DATEI; + &start_html($tmp); +print <<END; +<div> + <a href="htdocs.pl?var=werda_html&alias=$alias">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 +} + &read_file("data/user/profiles/$tmp"); + @data = <DATEI>; + close DATEI; +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="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"> +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) = @_; + &secure_checkip($alias); + &start_html("Benutzerprofil ändern"); + if ($method eq "edit_options_html") { + &read_file("data/user/options/$alias"); + } elsif ($method eq "edit_profile_html") { + &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol","input"); + open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol","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 auf <a href="push.pl?alias=$alias&room=$room">Weiterchatten</a> klicken. +</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; +<form action="main2.pl"> + <input type="hidden" name="alias" value="$alias"> + <input type="hidden" name="var" value="edit_options"> + <div> + Dein Passwort + <font color=ffa500> + (Gut merken !!) + </font> + <br> + <input type="password" name="id" value="$data[0]"> + </div> + <br> + <div> + Geb hier das Passwort erneuert ein: + <br> + <input type="password" name="tmp" value="$data[0]"> + </div> + <br> + <div> + "Deine Farbe (Farbe Deines Nicks, Angabe in Hexadezimal): + <br> + <input type="text" name="col" value="$data[1]"> + </div> + <br> + <div> + Deine zweite Farbe (Farbe Deiner Nachrichten, Angabe in Hexadezimal): + <br> + <input type="text" name="secol" value="$data[2]"> + </div> + <br> +END + } 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="alias" value="$alias"> + <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="submit" value="Daten ändern ..."> + </font> + </form> +</body> +</html> +END +} + + +sub edit { # Benutzerprofil od. Chat-Optionen abspeichern + &secure_checkip($alias); + my $method = $_[0]; + if ($method eq "edit_profile") { + &write_file_new("data/user/profiles/$alias"); + print DATEI $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 DATEI; + &log("system","\"edit_profile_ok\""); + &edit_html("edit_profile_html","edit_profile_ok"); + } elsif ($method eq "edit_options") { + if ($id ne $tmp) { + &log("system","\"edit_pw_wrong\""); + &edit_html("edit_options_html","edit_pw_wrong"); + exit; + } + &secure_checkip($alias); + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n".$col."\n".$secol; + close DATEI; + &log("system","\"edit_options_ok\""); + &edit_html("edit_options_html","edit_options_ok"); + } +} diff --git a/0.2.4a/online.pl b/0.2.4a/online.pl new file mode 100644 index 0000000..2e8bf8d --- /dev/null +++ b/0.2.4a/online.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +&secure_checkip($alias); +&start_html("Online","online"); +&online($alias,$room); +&list_dir("data/online/rooms/".$room); +print + $q->div( "$room:" ), + "<font size=1 color=ffffef face=arial>"; + foreach $online (@dir) { + if (-f "data/online/rooms/$room/$online") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$online", + -target=>"$online" }, "$online"), $q->br; + } + } +print + "</font>", + $q->end_html; + +sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern + my ($alias,$room) = @_; + &write_file_new("data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-e "data/online/rooms/$room") { + } else { + mkdir "data/online/rooms/$room", 0777; + } + &write_file_new("data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen + my $provetime = <DATEI>; + close DATEI; + if ($provetime < (time - 30)) { + &write_file_new("data/online/prove"); + print DATEI time; + close DATEI; + &rm_alias("data/online/users"); + &rm_rooms; + } +} + diff --git a/0.2.4a/push.pl b/0.2.4a/push.pl new file mode 100644 index 0000000..af96017 --- /dev/null +++ b/0.2.4a/push.pl @@ -0,0 +1,96 @@ +#!/usr/bin/perl -w
+use CGI;
+#use CGI qw/:push -nph/;
+CGI->compile(':all');
+$q = new CGI;
+
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkip($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+$| = 1; # Cache von Perl ausschalten
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title Copyright by Paul C. Bütow 2k $tmp\n");
+
+if ($var eq "push_logs_html") {
+ $msgfile = $tmp;
+ print "<hr><font size=2 color=ffffff face=arial>";
+} elsif ($var eq "clear_screen") {
+ $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+} else {
+ $msgfile = "data/msgs/$alias";
+ print $q->br;
+}
+
+open (MSGFILE, $msgfile);
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) { # Nach 15 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.2.4a/setup.sh b/0.2.4a/setup.sh new file mode 100644 index 0000000..c5e369e --- /dev/null +++ b/0.2.4a/setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +mkdir data +mkdir data/logs +chmod 777 data/logs +mkdir data/msgs +chmod 777 data/msgs +mkdir data/logs/ow +chmod 777 data/logs/ow +mkdir data/user +chmod 777 data/user +mkdir data/user/counts +chmod 777 data/user/counts +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/online +chmod 777 data/online +mkdir data/online/rooms +chmod 777 data/online/rooms +mkdir data/online/users +chmod 777 data/online/users +mkdir data/online/ident +chmod 777 data/online/ident +mkdir data/htdocs +chmod 777 data/htdocs +mv help_html data/htdocs +mv logs_html data/htdocs +chmod 777 data/htdocs/* +chmod 777 * +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.jpg ../../htdocs/yChat/ +echo +echo yChat Setup beendet ... +echo Created and copyrighted by Paul C. Bütow aka Snooper +echo +rm setup.sh diff --git a/0.2.4a/unten.gif b/0.2.4a/unten.gif Binary files differnew file mode 100644 index 0000000..285fb53 --- /dev/null +++ b/0.2.4a/unten.gif diff --git a/0.2.4a/yBanner.gif b/0.2.4a/yBanner.gif Binary files differnew file mode 100644 index 0000000..e4b691e --- /dev/null +++ b/0.2.4a/yBanner.gif diff --git a/0.2.4a/yChat.jpg b/0.2.4a/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.2.4a/yChat.jpg diff --git a/0.2.4c/INSTALL.txt b/0.2.4c/INSTALL.txt new file mode 100644 index 0000000..13fb7bb --- /dev/null +++ b/0.2.4c/INSTALL.txt @@ -0,0 +1,107 @@ +#############################################################################
+## yChat.de Version 0.2.4 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+INSTALL.txt => Dieses Dokument
+
+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 für den Chat notwendigen HTML-Dokumente:
+ ./cgi-bin/yChat/data/htdocs/*
+
+ Folgende Dateien müssen in das "data/htdocs" verzeichnis bewegt werden:
+
+ help_html => 101 Hilfedatei
+ logs_html => 101 Logbeschreibung
+
+- Hier befinden sich alle Logdateien, die vom Chat erstellt werden:
+ ./cgi-bin/yChat/data/logs/*
+
+- Hier befinden sich alle Oberwächter-Logdateien:
+ ./cgi-bin/yChat/data/logs/ow/*
+
+- Hier befinden sich die Message-Dateien der eingelogten Benutzer:
+ ./cgi-bin/yChat/data/msgs/*
+
+- Hier befinden sich alle Daten der registrierten Benutzer:
+ ./cgi-bin/yChat/data/user/*
+
+- Hier wird abgespeichert, wie oft ein Benutzerprofil insgesant schon
+ aufgerufen wurde:
+ ./cgi-bin/yChat/data/user/counts/*
+
+- Hier 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 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
+ ./cgi-bin/yChat/data/online/rooms/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper
\ No newline at end of file diff --git a/0.2.4c/LIESMICH.txt b/0.2.4c/LIESMICH.txt new file mode 100644 index 0000000..8d68f71 --- /dev/null +++ b/0.2.4c/LIESMICH.txt @@ -0,0 +1,33 @@ +#############################################################################
+## yChat.de Version 0.2.4 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ servers.yChat.de => Liste aller laufenden yChat-Systeme
+ install.yChat.de => Installationsdokumentation
+ liesmich.yChat.de => Allgemeine Bedingungen usw.
+ updates.yChat.de => Update-dListe
+ www.yChat.de => Das Skript zum testen
\ No newline at end of file diff --git a/0.2.4c/UPDATES.txt b/0.2.4c/UPDATES.txt new file mode 100644 index 0000000..7dc7f50 --- /dev/null +++ b/0.2.4c/UPDATES.txt @@ -0,0 +1,43 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.2.3 auf 0.2.4
+ - Optimierung bzw. Verbesserung der Push-Routine push.pl.
+ - Server-Ping wurde von 2-Pings-per-Second auf 4 erhöht.
+ - yChat-Banner wurde erstellt und ist unter
+ documents.yChat.de/yBanner.jpg vorzufinden.
+ - Unter der URL servers.yChat.de wurde eine Serverliste angelegt,
+ welche anzeigt wo yChat-Systeme laufen.
+ - Des weiteren wurden die URLs updates.yChat.de, install.yChat.de
+ und liesmich.yChat.de eingerichtet.
+ - Die Menüpunkte wurden zusammengefaßt, damit sie unter einer
+ Auflösung von 800x600 nur eine Zeile belegen.
+ - Einige Bugs wurden entfernt.
+
+Update von 0.2.2 auf 0.2.3 - 25.11.2k
+ - Smooth scrolling JavaScript (Vielen Dank an Andreas Buchwald).
+ - "IP#-Fehler" wurde so gut wie beseitigt.
+ - Aufrufe der einzelnen Benutzerprofile wird gezählt und angezeigt.
+ Diese werden in data/user/counts/* gespeichert.
+ - Automatische Einrichtung des Chats mit setup.sh und Telnet.
+ - Menüpunkt "Dein Profil" wurde entfernt da eigenes Profil auch
+ stets über die Onlineliste aufgerufen werden kann.
+
+Update von 0.2.1 auf 0.2.2 - 23.11.2k
+ - Einige Bugs wurden entfernt.
+ - Geschwindigkeit des Chats wurde optimiert.
+ - Eine Liste aller eingelogten Benutzer erscheint am Rand. Hierfür
+ wurde die Datei online.pl eingeführt. Sie aktuallisiert sich alle
+ 20 Sekunden.
+ - Die UPDATES.txt wurde eingeführt.
+
+Update von 0.2.0 auf 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden nun anders verwaltet.
+
+Update von Alpha XVIII auf 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ überarbeitet.
+ - Neue Versionsnumern wurden eingeführt.
\ No newline at end of file diff --git a/0.2.4c/bar.gif b/0.2.4c/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.2.4c/bar.gif diff --git a/0.2.4c/config.pm b/0.2.4c/config.pm new file mode 100644 index 0000000..5c08fbc --- /dev/null +++ b/0.2.4c/config.pm @@ -0,0 +1,321 @@ +########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "ChatPipe" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "29.11.2k";
+$version = "0.2.4";
+$title = "yChat.de ($version)";
+$gfxpath = "../../gfx/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ body.online { background-color: 444444; background-image: none }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($method,$msg2log) = @_;
+ &zeit;
+ if ( $method eq "msg") {
+ $log = "data/logs/$room-$day.$month.$year";
+ } elsif ($method eq "logins") {
+ $log = "data/logs/ow/logins-$day.$month.$year";
+ $syslog = "data/logs/ow/system-$day.$month.$year";
+ } elsif ($method eq "system") {
+ $log = "data/logs/ow/system-$day.$month.$year";
+ }
+ &write_file($log);
+ if ($method eq "msg") {
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ } elsif ($method eq "logins") {
+ print DATEI "($day.$month.-$hours:$min:$sec) User: $alias IP#: $ENV{'REMOTE_ADDR'} Agent: $ENV{'HTTP_USER_AGENT'}\n<br>";
+ close DATEI;
+ &write_file($syslog);
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ } elsif ($method eq "system") {
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ }
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } else {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ &log("system","\"logout_$__ok\"");
+ }
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, die älter als 60 Sekunden sind
+ my $dir2rm = $_[0];
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_");
+ &list_dir("data/online/rooms/$_",2);
+ rmdir("data/online/rooms/$_") if ($#dir2 = 1);
+ }
+ }
+}
+
+sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen.
+ my ($alias2check,$method) = @_;
+ my $ip;
+ for($i=0 ;$i<=5;) {
+ &read_file("data/online/ident/$alias2check");
+ $ip = <DATEI>;
+ close DATEI;
+ if ($ip ne $ENV{'REMOTE_ADDR'}) {
+ $i++;
+ } else {
+ goto ENDCHECKIP
+ }
+ if ($i<=5) {
+ &log("system","\"secure_ip\"");
+ if ($method eq undef) {
+ &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.");
+ } else {
+ &post_prv("$alias2check","<font color=red>Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.</font>");
+ &input_html("true") if ($method = 2);
+ }
+ exit;
+ }
+ }
+ENDCHECKIP:
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = "nc";
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+
+
diff --git a/0.2.4c/help_html b/0.2.4c/help_html new file mode 100644 index 0000000..79b94fa --- /dev/null +++ b/0.2.4c/help_html @@ -0,0 +1,616 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table width=100% bgcolor=555555> + <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> + Abmelden mit einer + Farbe/n ( + <font color=red> + Namensfarbe + </font>/ + <font color=ffa500> + Textfarbe + </font> + ) wechseln. Angabe in Hexadezimal. Wird + <font color=ffa500> + Textfarbe + </font> + nicht angegeben, dann hat der Text die + <font color=red> + Namensfarbe + </font> + </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 + </div> + </td> + <td> + <div> + Handeln mit 2 Farben + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +/me + </div> + </td> + <td> + <div> + Handeln mit einer Farbe + </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. (Wird nicht vom Chat protokolliert) + </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. (Wird nicht vom Chat protokolliert) + </div> + </td> + </tr> + <tr> + <td> + <div> + NC + </div> + </td> + <td> + <div> +// + </div> + </td> + <td> + <div> + Wurde zuletzt eine öffentliche Nachricht gepostet, dann wird diese nocheinmal gepostet. (Funktioniert nicht bei Befehlen, flüstern oder schreien) + </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> +/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> +/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 + </div> + </td> + <td> + <div> + Zeigt an, wer eingelog ist. + </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. + </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=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=green> + OW + </font> + </div> + </td> + <td> + <div> +/ban + </div> + </td> + <td> + <div> + Zeigt alle verbannten Benutzer an + </div> + </td> + </tr> + <tr> + <td> + <div> + <font color=green> + OW + </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=green> + OW + </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=green> + OW + </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=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 bestehenden Räumen) + </div> + </td> + </tr> +</table> +<hr> +<div> + Zur Erklärung: NC steht für "Normale Chatter", WÄ für "Wächter" und OW für "Oberwächter". + Obrige Befehle können nur von der/den jeweiligen Benutzergruppe/n oder höher ausgeführt werden. +</div> +</body> +</html>
\ No newline at end of file diff --git a/0.2.4c/htdocs.pl b/0.2.4c/htdocs.pl new file mode 100644 index 0000000..b52dd6b --- /dev/null +++ b/0.2.4c/htdocs.pl @@ -0,0 +1,222 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "help_html") { + &printfile("data/htdocs/help_html","Alle Chatbefehle"); +} elsif ($var eq "menu_html") { + &menu_html; +} elsif ($var eq "werda_html") { + &werda_html; +} elsif ($var eq "logs_html") { + &logs_html; +} elsif ($var eq "view_sulogs_html") { + &hirachie($alias); + if ($hirachie eq "ow") { + &start_html("Oberwächter-Logdateien"); + print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a><hr>"; + &printfile($tmp); + print "</div></body></html>"; + } +} elsif ($var eq "view_logs_html") { + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + &printfile($tmp,$tmp,"log"); + } +} elsif ($var eq "superuser_html") { + &superuser_html; +} elsif ($var eq "bar_html") { + print + $q->start_html(-bgcolor=>"ffa500"), + $q->end_html; +} else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; +} + +sub menu_html { + if ($tmp eq "quit") { + print + $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" ); + sleep 1; + &remove_online($alias); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + } + &start_html("Menü","menu"); +print <<END; + <center> + <div> + [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp" target="werda">Wer ist da?</a>] + [<a href="main2.pl?var=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>] + [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Optionen</a>] + [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzer</a>] + [<a href="htdocs.pl?var=help_html" target="Befehle">Befehle</a>] + [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Board</a>] + [<a href="htdocs.pl?var=superuser_html&alias=$alias" target="Hirachie">Superuser</a>] + [<a href="htdocs.pl?var=logs_html&alias=$alias" target="Logdateien">Logs</a>] + [<a href="push.pl?alias=$alias&room=$room&var=clear_screen" target="main">Weiterchatten</a>] + [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias">Verlassen</a>] + </div> + </center> +</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 + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + my $room = $_; + &list_dir("data/online/rooms/$room",2); + local $nr = $#dir2-1; + print $q->b( $_ ), + "($nr)", + $q->br; + foreach(@dir2) { + if ($_ ne ".." && $_ ne ".") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " "; + } + } + print $q->br, $q->br; + } + } + print + "</div>", + $q->end_html; +} + +sub logs_html { + &secure_checkip($alias); + &start_html("Logdateien"); + print <<END; +<div> + Hier befinden sich alle Logdateien +</div> +<hr> +END + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + if ($hirachie eq "ow") { + print $q->div( "Folgende Logdateien können nur von Oberwächtern (OW) gelesen werden" ); + &printfile("data/htdocs/logs_html"); + &list_dir("data/logs/ow"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/ow/$_") { + print $q->a( { -href=>"htdocs.pl?var=view_sulogs_html&alias=$alias&tmp=data/logs/ow/$_", + -target=>$_}, + "$_" ). + " ", + } + } + print $q->hr; + } + print $q->div( "Folgende Logdateien können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + &list_dir("data/logs"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/$_") { + print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_", + -target=>"_new" }, + "$_" ), + " "; + } + } + if ($hirachie eq "wa") { + print $q->hr, + $q->div( "Oberwächter können zusätzlich die Systemlogdateien lesen. Du bist allerdings ein \"Wächter\" und ", + " bist nicht dazu berechtigt " ), + $q->br; + &printfile("data/htdocs/logs_html"); + } + } else { + print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ", + "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde. Oberwächter ", + "können folgende Systemlogdateien zusätzlich lesen:" ), + $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 "; + &hirachie($alias); + if ($hirachie eq "ow") { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.</div>", + $q->hr; + } elsif ( $hirachie 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.2.4c/index.pl b/0.2.4c/index.pl new file mode 100644 index 0000000..5a465c4 --- /dev/null +++ b/0.2.4c/index.pl @@ -0,0 +1,354 @@ +#!/usr/bin/perl -w
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header; # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUFGERUFEN WERDEN?##
+#####################################
+if ($var eq "create_alias_html") {
+ &create_alias_html;
+} elsif ($var eq "create_alias") {
+ &create_alias;
+} elsif ($var eq "login_html") {
+ &login_html;
+} elsif ($alias eq "") {
+ &login_html;
+} else {
+ &checklogin;
+}
+
+sub login_html { # Erste Startseite
+local $counter = undef;
+&read_file("data/count");
+ $counter = <DATEI>;
+close DATEI;
+$counter++;
+&write_file_new("data/count");
+ print DATEI $counter;
+close DATEI;
+&start_html("Created by Paul C. Bütow 2k");
+print <<END;
+ <center>
+ <table width=400>
+ <tr>
+ <td>
+ <b>
+ <div>
+ $title - ( <a href="http://servers.yChat.de">yChat-Servers</a> )
+ <img src="$gfxpath/yChat.jpg">
+ </div>
+ </b>
+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
+ &log("system","\"first_http_ok\"");
+ }
+print <<END;
+ <hr>
+ <form action="index.pl">
+ <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="id" value="$id">
+ </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>
+ <div>
+ yChat befindet sich momentan noch in der Entwicklungsphase !
+ <br>
+ Fragen gehen an Paul Bütow (
+ <a href="mailto:paul\@buetow.oxg.de">
+ paul\@buetow.oxg.de
+ </a>
+ ) :-)
+ <br>
+ <br>
+ Diese Seite wurde schon $counter mal aufgerufen.
+ </td>
+ </tr>
+ </table>
+ </center>
+</body>
+</html>
+END
+}
+
+
+sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers.
+my $reload = $_[0];
+&start_html("Registration");
+print <<END;
+ <center>
+ <table width=400>
+ <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="id" value="$id">
+ </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";
+ &list_dir("data/user/options");
+ for (my $i=0; $i<=$#dir; $i++) {
+ if ($dir[$i] eq $alias) {
+ &read_file("data/user/options/$alias");
+ @datei = <DATEI>;
+ close DATEI;
+ chomp($datei[0]);
+ if ($datei[0] eq $id) {
+ &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist
+ @banned = <DATEI>;
+ close DATEI;
+ foreach(@banned) {
+ if ($_ eq "$alias\n") {
+ &log("system","\"login_alias_banned\"");
+ $tmp = "banned";
+ &login_html();
+ exit;
+ }
+ }
+ $col = $datei[1];
+ $secol = $datei[2];
+ &write_file_new("data/online/ident/$alias");
+ print DATEI $ENV{'REMOTE_ADDR'};
+ close DATEI;
+ &frameset_html;
+ exit;
+ } else {
+ &log("system","\"login_pw_wrong\"");
+ $lognotexists = "false";
+ }
+ }
+ }
+ if ($lognotexists eq "true") {
+ &log("system","\"login_alias_notexists\"");
+ }
+ &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite.
+}
+
+sub create_alias { # Erstellung eines neuen Benutzers.
+ if ($alias =~ /[\W]/ || $alias eq "") {
+ &log("system","\"reg_alias_prohibited\"");
+ &create_alias_html("alias_prohibited");;
+ exit;
+ } elsif ($id ne $tmp) {
+ &log("system","\"reg_pw_wrong\"");
+ &create_alias_html("pw_wrong");
+ exit;
+ }
+ &list_dir("data/user/options");
+ for (my $i=0; $i<=$#dir; $i++) {
+ if ($dir[$i] eq $alias) {
+ &log("system","\"reg_alias_exists\"");
+ &create_alias_html("alias_exists");
+ exit;
+ }
+ }
+ &write_file_new("data/user/options/$alias");
+ print DATEI $id."\n";
+ close DATEI;
+ &zeit;
+ &list_dir("data/user/options");
+ my $number = $#dir-1;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>");
+ &log("system","\"reg_ok\"");
+ &login_html;
+}
+
+sub frameset_html {
+print <<END;
+<html>
+ <head>
+ <title>
+ Willkommen auf der Chat Pipe
+ </title>
+ </head>
+<frameset border=0 frameborder=0 framespacing=0 rows="50,1,*,66">
+ <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol" scrolling="no">
+ <frame src="htdocs.pl?var=bar_html scrolling="no">
+ <frameset border=0 frameborder=0 framespacing=0 cols="110,*">
+ <frame name="online" src="online.pl?room=$room&alias=$alias">
+ <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen">
+ </frameset>
+ <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login" scrolling="no">
+</frameset>
+</html>
+END
+}
diff --git a/0.2.4c/logs_html b/0.2.4c/logs_html new file mode 100644 index 0000000..1317062 --- /dev/null +++ b/0.2.4c/logs_html @@ -0,0 +1,391 @@ +<br> +<div> + In der System-Logdatei tauchen folgende Ursachen auf: +</div> +<br> +<table border=0 width=100% bgcolor=555555> + <tr> + <th bgcolor=666666> + <div> + Ursache + </div> + </th> + <th bgcolor=666666> + <div> + Beschreibung + </div> + </th> + </tr> + <tr> + <td> + <div> + edit_profile_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sein Profil erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_pw_wrong + </div> + </td> + <td> + <div> + Beim Editieren der Chat-Optionen stimmten die beiden Passwortfelder nicht überein. + </div> + </td> + </tr> + <tr> + <td> + <div> + edit_colors_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chatfarben erfolgreich gewechselt. + </div> + </td> + </tr> + <tr> + <td> + <div> +edit_options_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat seine Chat-Optionen erfolgreich editiert. + </div> + </td> + </tr> + <tr> + <td> + <div> +first_http_ok + </div> + </td> + <td> + <div> + Der angegebenen IP# wurde Startseite erfolgreich angezeigt. (Benutzername noch nicht vorhanden) + </div> + </td> + </tr> + <tr> + <td> + <div> +login_alias_banned + </div> + </td> + <td> + <div> + Angegebener Benutzer konnte sich nicht in das System einloggen, da sein benutzername verbannt war. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_alias_notexists + </div> + </td> + <td> + <div> + Beim Einlogversuch existierte der angegebene Benutzername nicht. + </div> + </td> + </tr> + <tr> + <td> + <div> +login_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich in das System eingelogt. + </div> + </td> + </tr> + <tr> + <td> + <div> + login_pw_wrong + </div> + </td> + <td> + <div> + Beim Einloggen wurde das falsche PW eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_ok + </div> + </td> + <td> + <div> + Angegebener Benutzer hat sich erfolgreich (manuell) aus dem System ausgelogt. ("... verläßt den Chat ...") + </div> + </td> + </tr> + <tr> + <td> + <div> + logout_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + User hat gemerkt, daß sich + <font color=red> + Alias + </font> + nicht mehr im Chat befindet. ("... hat den Chat verlassen ..."). + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + verbannt + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_ban_<font color=red>Alias</font>_ow + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zu verbannen ( + <font color=red> + Alias + </font> + war Oberwächter und konnte nicht verbannt werden ) + </div> + </td> + </tr> + <tr> + <td> + <div> +ow_rban_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + "entbannt" + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Wächter eingetragen.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + existierte nicht in der Benutzerdatenbank.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ow-exists + </div> + </td> + <td> + <div> + Oberwächter hat ohne Erfolg versucht + <font color=red> + Alias + </font> + zum Wächter zu ernennen. ( + <font color=red> + Alias + </font> + war bereits als Oberwächter eingetragen. Oberwächter können nicht zeitgleich Wächter sein.) + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_wa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + erfolgreich zum Wächter ernannt. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_notexists + </div> + </td> + <td> + <div> + Oberwächter konnte + <font color=red> + Alias + </font> + nicht zum Wächter ernennen. (War nicht als WÄ registriert).. + </div> + </td> + </tr> + <tr> + <td> + <div> + ow_rwa_<font color=red>Alias</font>_ok + </div> + </td> + <td> + <div> + Oberwächter hat + <font color=red> + Alias + </font> + vom Wächter zum normalen Chatter degradiert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_exists + </div> + </td> + <td> + <div> + Bei der Registrierung war der Benutzername bereits vorhanden. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_alias_prohibited + </div> + </td> + <td> + <div> + Bei der Registrierung war der angegebene Benutzername verboten (enthielt Sonderzeichen). + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_ok + </div> + </td> + <td> + <div> + Angegebener Benutzername hat sich erfolgreich registriert. + </div> + </td> + </tr> + <tr> + <td> + <div> + reg_pw_wrong + </div> + </td> + <td> + <div> + Bei der Registrierung wurde das PW falsch eingegeben. + </div> + </td> + </tr> + <tr> + <td> + <div> + secure_ip + </div> + </td> + <td> + <div> + Unbefugter Zugriff der angegebenen IP# auf den angegebenen Benutzernamen. + </div> + </td> + </tr> + <tr> + <td> + <div> + sys_msg_<font color=red>Raum</font> + </div> + </td> + <td> + <div> + Angegebener Oberwächter schreibt eine Systemnachricht aus + <font color=red> + Raum + </font>. + </div> + </td> + </tr> +</table> +<br>
\ No newline at end of file diff --git a/0.2.4c/main.pl b/0.2.4c/main.pl new file mode 100644 index 0000000..99206d5 --- /dev/null +++ b/0.2.4c/main.pl @@ -0,0 +1,560 @@ +#!/usr/bin/perl -w
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "input_html") {
+ &input_html;
+} elsif ($var eq "post_msg") {
+ &post_msg;
+} elsif ($var eq "change_room") {
+ &change_room;
+} else {
+ &error("Parameter fehlt");
+}
+
+sub input_html { # Eingabemaske für den Chat.
+ my ($reload,$action,$whisper,$lastmsg) = @_;
+ $action = $q->param('action') if ($action eq "");
+ if ($tmp eq "away") {
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>");
+ } elsif ($tmp eq "login") {
+ &remove_rooms;
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>");
+ &log("logins","\"login_ok\"");
+ }
+ if ($action ne "" && $action ne "whisper" && $action ne "away") {
+ print "<html><head><script language=\"JavaScript\">";
+ if ($action eq "change_room") {
+ print "open(\"online.pl?alias=$alias&room=$room\",\"online\");";
+ print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol\",\"input\");";
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");";
+ } elsif ($action eq "change_colors") {
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");";
+ }
+ print "</script></head><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>";
+ } else {
+ print "<html><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>";
+ }
+ print "<form action=\"main.pl\">";
+ print "<input type=\"hidden\" name=\"tmp\" value=\"away\">" if ($action eq "away");
+ print <<END;
+ <select NAME="col" size="1">
+ <option selected value="$col">Nickfarbe ($col)</option>
+ <option value="0000FF">Blau (1)</option>
+ <option value="008000">Grün</option>
+ <option value="000000">Schwarz</option>
+ <option value="808000">Oliv</option>
+ <option value="000080">Marineblau</option>
+ <option value="800080">Purpur</option>
+ <option value="808080">Braun</option>
+ <option value="FF00FF">Fuchsia</option>
+ <option value="008080">Stahlblau</option>
+ <option value="333333">Mittelschwarz</option>
+ <option value="003399">BärBlau</option>
+ <option value="0066CC">Blau (2)</option>
+ <option value="009933">Grün</option>
+ <option value="006666">Oliv</option>
+ <option value="FF0000">VollRot</option>
+ <option value="CC0000">RostRot</option>
+ <option value="990099">Lila</option>
+ <option value="FF00FF">Pink</option>
+ <option value="FF9900">Orange</option>
+ <option value="CC6600">Ocker</option>
+ <option value="996600">Braun</option>
+ <option value="666666">Grau</option>
+ <option value="0A6307">Dunkelgrün</option>
+ <option value="9C1B7C">Dunkellila</option>
+ <option value="3D0DB9">Dunkelblau</option>
+ <option value="8FA5ED">Hellblau</option>
+ <option value="FFFF00">Gelb</option>
+ <option value="3D4863">?????</option>
+ </select>
+ <select NAME="secol" size="1">
+ <option selected value="$secol">Schriftfarbe ($secol)</option>
+ <option value="0000FF">Blau (1)</option>
+ <option value="008000">Grün</option>
+ <option value="000000">Schwarz</option>
+ <option value="808000">Oliv</option>
+ <option value="000080">Marineblau</option>
+ <option value="800080">Purpur</option>
+ <option value="808080">Braun</option>
+ <option value="FF00FF">Fuchsia</option>
+ <option value="008080">Stahlblau</option>
+ <option value="333333">Mittelschwarz</option>
+ <option value="003399">BärBlau</option>
+ <option value="0066CC">Blau (2)</option>
+ <option value="009933">Grün</option>
+ <option value="006666">Oliv</option>
+ <option value="FF0000">VollRot</option>
+ <option value="CC0000">RostRot</option>
+ <option value="990099">Lila</option>
+ <option value="FF00FF">Pink</option>
+ <option value="FF9900">Orange</option>
+ <option value="CC6600">Ocker</option>
+ <option value="996600">Braun</option>
+ <option value="666666">Grau</option>
+ <option value="0A6307">Dunkelgrün</option>
+ <option value="9C1B7C">Dunkellila</option>
+ <option value="3D0DB9">Dunkelblau</option>
+ <option value="8FA5ED">Hellblau</option>
+ <option value="FFFF00">Gelb</option>
+ <option value="3D4863">?????</option>
+ </select>
+ <input type="hidden" name="var" value="post_msg">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="room" value="$room">
+ <input type="hidden" name="id" value="$whisper">
+ <input type="hidden" name="lastmsg" value="$lastmsg">
+ <br>
+ <input size="80" maxlength="250" name="msg">
+ <input type="submit" value="Texten">
+
+</form>
+END
+if ($reload eq "true") {
+print <<END;
+ <script language="JavaScript">
+ <!--
+ document.forms[0].msg.focus();
+ //-->
+ </script>
+END
+}
+print
+ $q->end_html;
+}
+
+sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde.
+ $| = 1; # Cache von Perl ausschalten
+ $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren
+ $msg =~ s#kilahu#yChat#g;
+ $msg =~ s#ooperle#per!#g;
+ if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht
+ $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>";
+ $msg =~ s#"#'#g; # " in ' umtauschen für den befehl "//"
+ &input_html("true","",$id,$msg); # -> Reload=true, Action=none, Whisper=$id
+ &secure_checkip($alias,1);
+ &post($msg);
+ } else {
+ &secure_checkip($alias,2);
+ &cmd($msg);
+ }
+}
+
+sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können.
+ $_[0] = $_[0]." ";
+ $_[0] = substr($_[0], 1, length($_[0])-1);
+ my @cmd = split(/ /, $_[0]);
+ my $cmd = substr($_[0],0 , index($_[0], " "));
+ my ($reload,$action,$whisper) = ("true","",$id);
+#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -<
+#############>- DER LETZTEN ZUGEFLÜSTERTEN PERSON NOCHEINMAL FLÜSTERN -<
+ if ($cmd eq "/") {
+ &post($q->param('lastmsg'));
+#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -<
+ } elsif ($cmd eq "about") {
+ &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>");
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde
+ $tmp = "";
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $tmp = $tmp." ".$cmd[$i];
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$tmp</font> ) ...</i></font>");
+ $action = "away";
+#############>- 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\",\"main\");</script>");
+#############>- FARBEN WECHSELN -<
+ } elsif ($cmd eq "col") {
+ $col = $cmd[1];
+ my $tmpsecol = $cmd[2];
+ if ($tmpsecol eq "") {
+ $secol = $col
+ } else {
+ $secol = $tmpsecol;
+ }
+ &read_file("data/user/options/$alias");
+ my @pro = <DATEI>;
+ close DATEI;
+ &write_file_new("data/user/options/$alias");
+ print DATEI $pro[0]."".$col."\n".$secol;
+ close DATEI;
+ &log("system","\"edit_colors_ok\"");
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt ...</font></i>");
+ $action = "change_colors";
+#############>- 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>");
+#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
+ } elsif ($cmd eq "j") {
+ &change_room("j",$cmd[1],$room);
+ $action = "change_room";
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ if ($cmd eq "m") {
+ &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>");
+ } else {
+ &post("<i><font color=$col>$alias $me_msg</font></i>");
+ }
+#############>- FLÜSTERN ( Auch mit '/' ) -<
+ } elsif ($cmd eq "msg" || $cmd eq "") {
+ my ($alias2post,$msg2post) = ($cmd[1],"");
+ if ($cmd eq "msg") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ } else {
+ $alias2post = $id;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ }
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ if ($_ eq $alias2post) {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &write_file("data/msgs/$alias");
+ print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &input_html($reload,"",$alias2post);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>");
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &post_prv("$alias","<script language=\"JavaScript\">window.open(\"index.pl?tmp=quit\",\"_top\");</script>");
+ sleep 1;
+ &remove_online($alias,$room);
+ &secure_removeip($alias);
+ unlink("data/msgs/$alias");
+ exit;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my $msg2scream,$msg2post;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ $msg2post = "\U$msg2scream";
+ &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>");
+#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -<
+} elsif ($cmd eq "w") {
+ &list_dir("data/online/rooms/$room");
+ my ($is,$nr) = ("t",0);
+ foreach(@dir) {
+ if (-f "data/online/rooms/$room/$_") {
+ $personen = $personen." ".$_;
+ $nr++;
+ }
+ }
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "n";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>$nr Person$nrs befinde$is sich im aktuellen Raum (\"$room\"): <font color=ffa500>$personen</font></font>");
+#############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -<
+ } elsif ($cmd eq "wc" || $cmd eq "wc/") {
+ $raum = $cmd[1];
+ if ($raum eq "" && $cmd eq "wc") {
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/users/$_");
+ }
+ my $nr = ($#dir-1);
+ my ($nrs,$is) = ("","ist");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "sind";
+ }
+ &post_prv("$alias","<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;
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ &list_dir("data/online/rooms/$_",2);
+ my $nr = $#dir2-1;
+ $msg2post = $msg2post."<tr><td><b><font size=2 color=ffffff>$_ ($nr)</font></b></td><td><font size=2 color=ffffff>";
+ 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;
+ &list_dir("data/online/rooms/$raum");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_");
+ }
+ my ($nr,$is) = (($#dir-1),"t");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "n";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -<
+ } elsif ($cmd eq "wj" || $cmd eq "ju") {
+ my $alias2search = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum");
+ foreach $user (@dir2) {
+ if (-f "data/online/rooms/$raum/$user") {
+ if ($user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>");
+ } else {
+ $action = "change_room";
+ &change_room("ju",$raum,$room,$alias2search);
+ }
+ &input_html($reload,$action,$whisper);
+ exit;
+ }
+ }
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff> ist nicht eingelogt !</font></font>");
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN BZW. ENTBANNEN -<
+ } elsif ($cmd eq "ban" || $cmd eq "rban") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my ($alias2handle,$registriert) = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ $registriert = "true" if ($_ eq $alias2handle);
+ }
+ if ($registriert ne "true") {
+ if ($cmd eq "ban") {
+ if ($alias2handle ne "") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>");
+ } else {
+ &read_file("data/ban");
+ my @banned = <DATEI>;
+ my ($benutzer);
+ my $nr = $#banned+1;
+ close DATEI;
+ foreach(@banned) {
+ $benutzer = $benutzer." ".$_;
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>");
+ }
+ &input_html("true");
+ exit;
+ }
+ &read_file("data/ban");
+ my @banlist = <DATEI>;
+ close DATEI;
+ foreach(@banlist) {
+ if ($_ eq "$alias2handle\n") {
+ if ($cmd eq "ban") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>");
+ } else {
+ my $banned = "false";
+ foreach(@banlist) {
+ $banned = "true" if ($_ eq "$alias2handle\n");
+ }
+ if ($banned eq "true") {
+ my @newbanlist;
+ foreach(@banlist) {
+ push @newbanlist,$_ if ($_ ne "$alias2handle\n");
+ }
+ &write_file_new("data/ban");
+ print DATEI @newbanlist;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>");
+ &log("system","\"ow_rban_$alias2handle_ok\"");
+ }
+ }
+ &input_html("true");
+ exit;
+ }
+ }
+ if ($cmd eq "ban") {
+ &hirachie($alias2handle);
+ if ($hirachie ne "ow") {
+ &write_file("data/ban");
+ print DATEI "$alias2handle\n";
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>");
+ &log("system","\"ow_ban_".$alias2handle."_ok\"");
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>");
+ &log("system","\"ow_ban_".$alias2handle."_ow\"");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>");
+ }
+ }
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "ip") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/online/ident");
+ foreach(@dir) {
+ if ($_ eq $alias2prove) {
+ &read_file("data/online/ident/$_");
+ local $ipnr = <DATEI>;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ }
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2);
+ foreach $chatter (@dir2) {
+ if ($chatter eq $alias2kick) {
+ &hirachie($alias2kick);
+ if ($hirachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>");
+ &log("system","wa_k_$alias2kick_ow"); #!!
+ } elsif ($hirachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Wächter und kann nicht \"gekickt\" werden !</font></font>");
+ &log("system","wa_k_$alias2kick_ow"); #!!
+ } else {
+ &post_prv("$alias2kick","<script language=\"JavaScript\">window.open(\"index.pl?tmp=kick\",\"_top\");</script>");
+ &zeit;
+ $_ = undef if ($room eq $_);
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_);
+ &log("system","wa_k_$alias2kick"); #!!
+ &remove_online($alias2kick,$_,"kick");
+ &secure_removeip($alias2kick);
+ }
+ &input_html("true");
+ exit;
+ }
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>");
+ }
+#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -<
+ } elsif ($cmd eq "sys") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $sys_msg = $sys_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post_all("<i><font color=ffffff>($hours:$min:$sec)</font></i> <b><font size=2 color=red>Systemnachricht von $alias für alle</font></b><i><font color=ffffff>: $sys_msg ...</font></i>");
+ &log("system","\"sys_msg_$room\"");
+ }
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -<
+ } elsif ($cmd eq "wa" || $cmd eq "rwa") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ &zeit;
+ my $alias2handle = $cmd[1];
+ if ($cmd eq "wa") {
+ my $anerkennen = "false";
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if ($_ eq $alias2handle) {
+ $anerkennen = "true";
+ }
+ }
+ if ($anerkennen eq "true") {
+ &hirachie($alias2handle);
+ if ($hirachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>");
+ &log("system","\"oh_wa_".$alias2handle."_exists\"");
+ } elsif ($hirachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>");
+ &log("system","\"oh_wa_".$alias2handle."_oh-exists\"");
+ } else {
+ &write_file("data/wa");
+ print DATEI $alias2handle."\n";
+ close DATEI;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>");
+ &log("system","\"oh_wa_".$alias2handle."_ok\"");
+ }
+ } else {
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ &log("system","\"oh_wa_".$alias2handle."_notexists\"");
+ }
+ } elsif ($cmd eq "rwa") {
+ &read_file("data/wa");
+ my @wafile = <DATEI>;
+ close DATEI;
+ my $aberkennen = "false";
+ foreach(@wafile) {
+ if ($_ ne "$alias2handle\n") {
+ push @newafile,$_;
+ } else {
+ $aberkennen = "true";
+ }
+ }
+ &write_file_new("data/wa");
+ print DATEI @newafile;
+ close DATEI;
+ if ($aberkennen eq "true") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>");
+ &log("system","\"oh_rwa_".$alias2handle."_ok\"");
+ } else {
+ &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>");
+ &log("system","\"oh_rwa_".$alias2handle."_notexists\"");
+ }
+ }
+ }
+#############>- ENDE DER CHATBEFEHLE -<
+}
+&input_html($reload,$action,$whisper);
+}
+
+sub change_room { # Den Chat-Raum wechseln
+ my ($method,$newroom,$oldroom,$alias2follow) = @_;
+ $room = $oldroom;
+ &secure_checkip($alias); # IP Nummer überprüfen
+ &zeit; # Zeit 'erneuern'
+ if ($method eq "j") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ } elsif ($method eq "ju") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<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>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ }
+ &rm_rooms;
+}
+
diff --git a/0.2.4c/main2.pl b/0.2.4c/main2.pl new file mode 100644 index 0000000..7691aef --- /dev/null +++ b/0.2.4c/main2.pl @@ -0,0 +1,561 @@ +#!/usr/bin/perl -w
+
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+
+if ($var eq "list_alias_html") {
+ &list_alias_html;
+} elsif ($var eq "alias_html") {
+ &alias_html;
+} elsif ($var eq "edit_profile_html") {
+ &edit_html("edit_profile_html");
+} elsif ($var eq "edit_options_html") {
+ &edit_html("edit_options_html");
+} elsif ($var eq "gb_html") {
+ &gb_html;
+} elsif ($var eq "post_gb") {
+ &post_gb;
+} elsif ($var eq "rm_gb_alias") {
+ &rm_gb;
+} elsif ($var eq "edit_profile") {
+ &edit("edit_profile");
+} elsif ($var eq "edit_options") {
+ &edit("edit_options");
+} 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="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
+ &secure_checkip($alias);
+ &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";
+ }
+ if (-e "$tmpath") {
+ &read_file("$tmpath");
+ my @datei = <DATEI>;
+ close DATEI;
+ pop(@datei) if ($#datei > 99);
+ my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ @newdatei = ("@newdatei", "@datei");
+ &write_file_new("$tmpath");
+ print DATEI @newdatei;
+ close DATEI;
+ } else {
+ &write_file_new("$tmpath");
+ print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ close DATEI;
+ }
+ 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=$alias\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp\" target=\"_new\">Dein Profil</a> gehängt ... </font>");
+ &alias_html;
+ exit;
+ }
+}
+
+sub rm_gb { # Gästebucheintrag entfernen
+ &secure_checkip($alias);
+ $tmp = $alias;
+ &read_file("data/user/gbooks/$alias");
+ my @gbfile = <DATEI>;
+ close DATEI;
+ my @newgbfile = ();
+ for($i=0; $i <= $#gbfile; $i++) {
+ push(@newgbfile,$gbfile[$i]) if ($i != $id);
+ }
+ &write_file_new("data/user/gbooks/$alias");
+ print DATEI @newgbfile;
+ close DATEI;
+ &alias_html("rm_ok");
+}
+
+sub list_alias_html { # Liste aller Benutzer
+ &start_html("Alle Benutzer");
+ &list_dir("data/user/options");
+ my @liste = sort(@dir);
+ my $nr = $#dir-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=$_" },
+ "$_"),
+ " ";
+ }
+ }
+print <<END;
+ </div>
+</body>
+</html>
+END
+}
+
+sub alias_html { # Anzeigen eines Benutzerprofils
+ my $message = $_[0];
+ local $counter = undef;
+ &read_file("data/user/counts/$tmp");
+ $counter = <DATEI>;
+ close DATEI;
+ $counter++;
+ &write_file_new("data/user/counts/$tmp");
+ print DATEI $counter;
+ close DATEI;
+ &start_html($tmp);
+print <<END;
+<div>
+ <a href="htdocs.pl?var=werda_html&alias=$alias">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
+}
+ &read_file("data/user/profiles/$tmp");
+ @data = <DATEI>;
+ close DATEI;
+print <<END;
+ <div>
+ Dieses Profil wurde insgesamt schon $counter mal aufgerufen !
+ <br>
+ <br>
+ Alias: $tmp
+ <br>
+ <br>
+ Geschlecht: $data[0]
+ <br>
+ <br>
+ BH größe *g*: <b>$data[1]</b>
+ <br>
+ <br>
+ Nachname: $data[2]
+ <br>
+ <br>
+ Vorname: $data[3]
+ <br>
+ <br>
+ Alter: $data[4]
+ <br>
+ <br>
+ Land: $data[5]
+ <br>
+ <br>
+ Wohnort: $data[6]
+ <br>
+ <br>
+ E-Mail:
+ <a href="mailto:$data[7]">$data[7]</a>
+ <br>
+ <br>
+ ICQ-Nummer: $data[8]
+ <br>
+ <br>
+ Homepage:
+ <a href="$data[9]" target="_new">$data[9]</a>
+ <br>
+ <br>
+ Sternzeichen:
+ $data[10]
+ <br>
+ <br>
+ Weiteres:
+ <br>
+ <br>
+ $data[11]
+ <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="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">
+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) = @_;
+ &secure_checkip($alias);
+ &start_html("Benutzerprofil ändern");
+ if ($method eq "edit_options_html") {
+ &read_file("data/user/options/$alias");
+ } elsif ($method eq "edit_profile_html") {
+ &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol","input");
+ open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol","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 auf <a href="push.pl?alias=$alias&room=$room">Weiterchatten</a> klicken.
+</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;
+ <form action="main2.pl">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="var" value="edit_profile">
+ <br>
+ <div>
+ Geschlecht:
+ <br>
+<select NAME="mw" size="1">
+ <option selected value="$data[0]">$data[0]</option>
+ <option value="Männlich">Männlich</option>
+ <option value="Weiblich">Weiblich</option>
+ </select>
+ </div>
+<br>
+ <div>
+ BH größe *fg* (<b>Nur Angeben wenn Weiblich gewählt</b>):
+ <br>
+ <input name="bh" value="$data[1]">
+ </div>
+<br>
+<div>
+ Dein Nachname:
+ <br>
+ <input name="nachname" value="$data[2]">
+ </div>
+ <br>
+ <div>
+ Dein Vorname:
+ <br>
+ <input name="vorname" value="$data[3]">
+ </div>
+ <br>
+ <div>
+ Dein Alter:
+ <br>
+ <input name="alter" value="$data[4]">
+ </div>
+ <br>
+ <div>
+ Wohnort:
+ <br>
+ <select NAME="wohnort" size="1">
+<option selected value="$data[5]">$data[5]</option>
+<option value="Wohnsitz nicht in Deutschland">Wohnsitz nicht in Deutschland</option>
+<option value="Baden-Württemberg">Baden-Württemberg</option>
+<option value="Bayern">Bayern</option>
+<option value="Berlin">Berlin</option>
+<option value="Brandenburg">Brandenburg</option>
+<option value="Bremen">Bremen</option>
+<option value="Hamburg">Hamburg</option>
+<option value="Hessen">Hessen</option>
+<option value="Mecklenburg-Vorpommern">Mecklenburg-Vorpommern</option>
+<option value="Niedersachsen">Niedersachsen</option>
+<option value="Nordrhein-Westfalen">Nordrhein-Westfalen</option>
+<option value="Rheinland-Pfalz">Rheinland-Pfalz</option>
+<option value="Saarland">Saarland</option>
+<option value="Sachsen">Sachsen</option>
+<option value="Sachsen-Anhalt">Sachsen-Anhalt</option>
+<option value="Schleswig-Holstein">Schleswig-Holstein</option>
+<option value="Thüringen">Thüringen</option>
+ </select>
+ </div>
+<br>
+ <div>
+ Land:
+ <br>
+<select NAME="land" size="1">
+<option selected value="$data[6]">$data[6]</option>
+<option value="Deutschland">Deutschland </option>
+<option value="Österreich">Österreich </option>
+<option value="Schweiz">Schweiz </option>
+<option value="Liechtenstein">Liechtenstein </option>
+<option value="Wohne in einem anderen Land"> Wohne in einem anderen Land </option>
+ </select>
+ </div>
+ <br>
+ <div>
+ Deine E-Mail Adresse:
+ <br>
+ <input name="email" value="$data[7]">
+ </div>
+ <br>
+ <div>
+ Deine ICQ-Nummer:
+ <br>
+ <input name="icq" value="$data[8]">
+ </div>
+ <br>
+ <div>
+ Deine Homepage:
+ <br>
+ <input name="homepage" value="$data[9]">
+ </div>
+ <br>
+ <div>
+ Sternzeichen:
+ <br>
+<select NAME="stern" size="1">
+ <option selected value="$data[10]">$data[10]</option>
+ <option value="Wassermann">Wassermann</option>
+ <option value="Löwe">Löwe</option>
+ <option value="Widder">Widder</option>
+ <option value="Zwillinge">Zwillinge</option>
+ <option value="Stier">Stier</option>
+ <option value="Waage">Waage</option>
+ <option value="Fische">Fische</option>
+ <option value="Krebs">Krebs</option>
+ <option value="Jungfrau">Jungfrau</option>
+ <option value="Skorpion">Skorpion</option>
+ <option value="Schütze">Schütze</option>
+ <option value="Steinbock">Steinbock</option>
+ </select>
+ </div>
+ <br>
+ <div>
+ Weiteres:
+ <br>
+ <textarea rows="5" cols="40"name="weiteres" wrap="virtual">$data[11]</textarea>
+ </div>
+END
+ }
+print <<END;
+ <hr>
+ <font color=ffffff>
+ <input type="submit" value="Daten ändern ...">
+ </font>
+ </form>
+</body>
+</html>
+END
+}
+
+
+sub edit { # Benutzerprofil od. Chat-Optionen abspeichern
+ &secure_checkip($alias);
+ my $method = $_[0];
+ if ($method eq "edit_profile") {
+ &write_file_new("data/user/profiles/$alias");
+ print DATEI
+ $q->param('mw')."\n"
+.$q->param('bh')."\n"
+.$q->param('nachname')."\n"
+.$q->param('vorname')."\n"
+.$q->param('alter')."\n"
+.$q->param('wohnort')."\n"
+.$q->param('land')."\n"
+.$q->param('email')."\n"
+.$q->param('icq')."\n"
+.$q->param('homepage')."\n"
+.$q->param('stern')."\n"
+.$q->param('weiteres');
+ close DATEI;
+ &log("system","\"edit_profile_ok\"");
+ &edit_html("edit_profile_html","edit_profile_ok");
+ } elsif ($method eq "edit_options") {
+ if ($id ne $tmp) {
+ &log("system","\"edit_pw_wrong\"");
+ &edit_html("edit_options_html","edit_pw_wrong");
+ exit;
+ }
+ &secure_checkip($alias);
+ &write_file_new("data/user/options/$alias");
+ print DATEI $id."\n".$col."\n".$secol;
+ close DATEI;
+ &log("system","\"edit_options_ok\"");
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
diff --git a/0.2.4c/online.pl b/0.2.4c/online.pl new file mode 100644 index 0000000..2e8bf8d --- /dev/null +++ b/0.2.4c/online.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl -w + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +&secure_checkip($alias); +&start_html("Online","online"); +&online($alias,$room); +&list_dir("data/online/rooms/".$room); +print + $q->div( "$room:" ), + "<font size=1 color=ffffef face=arial>"; + foreach $online (@dir) { + if (-f "data/online/rooms/$room/$online") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$online", + -target=>"$online" }, "$online"), $q->br; + } + } +print + "</font>", + $q->end_html; + +sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern + my ($alias,$room) = @_; + &write_file_new("data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-e "data/online/rooms/$room") { + } else { + mkdir "data/online/rooms/$room", 0777; + } + &write_file_new("data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen + my $provetime = <DATEI>; + close DATEI; + if ($provetime < (time - 30)) { + &write_file_new("data/online/prove"); + print DATEI time; + close DATEI; + &rm_alias("data/online/users"); + &rm_rooms; + } +} + diff --git a/0.2.4c/push.pl b/0.2.4c/push.pl new file mode 100644 index 0000000..af96017 --- /dev/null +++ b/0.2.4c/push.pl @@ -0,0 +1,96 @@ +#!/usr/bin/perl -w
+use CGI;
+#use CGI qw/:push -nph/;
+CGI->compile(':all');
+$q = new CGI;
+
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkip($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+$| = 1; # Cache von Perl ausschalten
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title Copyright by Paul C. Bütow 2k $tmp\n");
+
+if ($var eq "push_logs_html") {
+ $msgfile = $tmp;
+ print "<hr><font size=2 color=ffffff face=arial>";
+} elsif ($var eq "clear_screen") {
+ $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+} else {
+ $msgfile = "data/msgs/$alias";
+ print $q->br;
+}
+
+open (MSGFILE, $msgfile);
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) { # Nach 15 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.2.4c/setup.sh b/0.2.4c/setup.sh new file mode 100644 index 0000000..c5e369e --- /dev/null +++ b/0.2.4c/setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +mkdir data +mkdir data/logs +chmod 777 data/logs +mkdir data/msgs +chmod 777 data/msgs +mkdir data/logs/ow +chmod 777 data/logs/ow +mkdir data/user +chmod 777 data/user +mkdir data/user/counts +chmod 777 data/user/counts +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/online +chmod 777 data/online +mkdir data/online/rooms +chmod 777 data/online/rooms +mkdir data/online/users +chmod 777 data/online/users +mkdir data/online/ident +chmod 777 data/online/ident +mkdir data/htdocs +chmod 777 data/htdocs +mv help_html data/htdocs +mv logs_html data/htdocs +chmod 777 data/htdocs/* +chmod 777 * +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.jpg ../../htdocs/yChat/ +echo +echo yChat Setup beendet ... +echo Created and copyrighted by Paul C. Bütow aka Snooper +echo +rm setup.sh diff --git a/0.2.4c/unten.gif b/0.2.4c/unten.gif Binary files differnew file mode 100644 index 0000000..285fb53 --- /dev/null +++ b/0.2.4c/unten.gif diff --git a/0.2.4c/yBanner.gif b/0.2.4c/yBanner.gif Binary files differnew file mode 100644 index 0000000..e4b691e --- /dev/null +++ b/0.2.4c/yBanner.gif diff --git a/0.2.4c/yChat.jpg b/0.2.4c/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.2.4c/yChat.jpg diff --git a/0.2.5a2/INSTALL.txt b/0.2.5a2/INSTALL.txt new file mode 100644 index 0000000..77c4628 --- /dev/null +++ b/0.2.5a2/INSTALL.txt @@ -0,0 +1,103 @@ +#############################################################################
+## yChat.de Version 0.2.5 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+INSTALL.txt => Dieses Dokument
+help.sno => Datei beinhaltet alle Chatbefehle
+
+Folgende Verzeichnisse müssen erstellt werden (chmod 777 sollte
+funktionieren):
+
+- Hier befinden sich alle für den Chat notwenidgen Daten:
+ ./cgi-bin/yChat/data/*
+
+- Hier befinden sich alle Logdateien, die vom Chat erstellt werden:
+ ./cgi-bin/yChat/data/logs/*
+
+- Hier befinden sich die Message-Dateien der eingelogten Benutzer:
+ ./cgi-bin/yChat/data/msgs/*
+
+- Hier befinden sich alle Daten der registrierten Benutzer:
+ ./cgi-bin/yChat/data/user/*
+
+- Hier wird abgespeichert, wie oft ein Benutzerprofil insgesant schon
+ aufgerufen wurde:
+ ./cgi-bin/yChat/data/user/counts/*
+
+- Hier befinden sich alle Chat-Optionen und Passwörter der registrierten
+ Benutzer:
+ ./cgi-bin/yChat/data/user/options/*
+
+- Hier befinden sich alle Benutzerprofile der Benutzer:
+ ./cgi-bin/yChat/data/user/profiles/*
+
+- Hier befinden sich alle Gästebucheinträge der Benutzer:
+ ./cgi-bin/yChat/data/user/gbooks/*
+
+- Hier wird Protokolliert, wann sich die Benutzer zum letzten mal eingelogt haben:
+ ./cgi-bin/yChat/data/user/lastlogin/*
+
+- Hier befinden sich alle Daten zu den aktuellen Chaträumen und User die online sind
+ ./cgi-bin/yChat/data/online/*
+
+- Hier befinden sich alle offnenen Räume
+ ./cgi-bin/yChat/data/online/rooms/*
+
+- Hier befinden sich die Chatter, die sich in den jew. Räumen befinden. Die
+ Verzeichnisse der Räume werden automatisch erstellt.
+ ./cgi-bin/yChat/data/online/rooms/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+ yBanner.gif => 400x40 yChat-Banner
+ yBanner2.gif => 88x31 yChat-Banner
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper
\ No newline at end of file diff --git a/0.2.5a2/LIESMICH.txt b/0.2.5a2/LIESMICH.txt new file mode 100644 index 0000000..1bfe3d9 --- /dev/null +++ b/0.2.5a2/LIESMICH.txt @@ -0,0 +1,45 @@ +#############################################################################
+## yChat.de Version 0.2.5 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.install.yChat.de => Installationsdokumentation
+ www.liesmich.yChat.de => Allgemeine Bedingungen usw.
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript zum testen
+
+Vielen Dank an:
+
+ - Andreas Buchwald für die Programmierung des "Nach-UntenScroll-JavaScripts"
+ (www.anklepper.de).
+
+ - Michi aka Snoopy für die Erstellung und Anregung der Farbtabelle
+ (www.berlin-singeltreff.de).
+
+ - Peacemaker für die Erstellung des yChat-Logos
+ (www.peaceplace.de).
diff --git a/0.2.5a2/TODO.txt b/0.2.5a2/TODO.txt new file mode 100644 index 0000000..80440ce --- /dev/null +++ b/0.2.5a2/TODO.txt @@ -0,0 +1,27 @@ +Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - Löschung aller Chatter, die sich seit 60 Tagen nicht mehr
+ eingelogt haben.
+
+ - IP-Adressen ver-/entbannen.
+
+ - E-Mail zusendung bei verlorenem Passwort.
+
+ - Totale Onlinezeit der einzelnen Chatter soll protokolliert
+ werden. Daraus wird dann eine Top20 der Chatter erstellt.
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Java-Applet-Eingabezeile für einen flüssigeren Chat
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.2.5a2/UPDATES.txt b/0.2.5a2/UPDATES.txt new file mode 100644 index 0000000..f746a96 --- /dev/null +++ b/0.2.5a2/UPDATES.txt @@ -0,0 +1,75 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.2.4 auf 0.2.5
vom 15.12.2k + - Derjenige, der einen Raum zuerst betritt, hat Raumbesetzerrechte.
+ - Raumbesetzer, Wächter und Oberwächte können weitere Raumbesetzer
+ bestimmen. Diese können Raumbeseter auch wieder degradieren.
+ - Raumbesetzer, Wächter und Oberwächter können dem aktuellen Raum
+ auf/absperren und Themen geben. Wächter und Oberwächter können
+ abgesperrte Räume betreten.
+ - Das Verzeichnis ".data/htdocs" wurde entfernt. Die Datei help_html
+ heist nun help.sno und befindet sich im yChat-Hauptverzeichnis.
+ - Das Verzeichnis ".data/user/lastlogin" wurde hinzugefügt. Hier
+ wird beim erfolgreichen Einloggen ein "Timestamp" gesetzt. Später
+ sollen Oberwächter "veraltete" Benutzer entfernen können.
+ - Neuer Oberwächterbefehl: "/kill Alias" entfernt Alias ganz und gar
+ vom System. Oberwächter und Wächter können nicht entfernt werden.
+ - Perl-Cache wurde im gesamten System komplett deaktiviert ( Weniger
+ Ladezeiten der HTML-Dokumente ).
+ - Nur Nachrichten aus dem Raum "Cyberbar" werden gelogt.
+ Selbsterstellte Räume werden nichtmehr gelogt. Viele Logfunktionen
+ wurden entfernt (weniger Serverbalast).
+ - Beseitigung einiger kleinen Bugs.
+ - Unter "Optionen" im Chat wir die Farbe nun mit einem Drop-Down-Menü
+ ausgewählt ( Vielen dank an Michi aka Snoopy ).
+ - Auf der Startseite wird nun angezeigt wieviele Benutzer eingelogt
+ sind. Ist keiner eingelogt, dann wird das System "aufgeräumt". D.h.
+ Dateien die nicht mehr gebraucht werden und noch nicht gelöscht
+ wurden werden entfernt ( z.B. Nachrichtendateien der einzelnen
+ Chatter und die Dateien die die IP-Nummern der eingelogten Benutzer
+ beinhalteten usw.).
+ - Hunzufügung einer TODO-Liste. Hier sind mehrere Funktionen
+ vermerkt, die in späteren yChat-Versionen eingebaut werden sollen.
+ (www.todo.yChat.de oder TODO.txt).
+
+Update von 0.2.3 auf 0.2.4 - 30.11.2k
+ - Optimierung bzw. Verbesserung der Push-Routine push.pl.
+ - Server-Ping wurde von 2-Pings-per-Minute auf 4 erhöht.
+ - yChat-Banner wurde erstellt und ist unter
+ documents.yChat.de/yBanner.jpg vorzufinden.
+ - Unter der URL servers.yChat.de wurde eine Serverliste angelegt,
+ welche anzeigt wo yChat-Systeme laufen.
+ - Des weiteren wurden die URLs updates.yChat.de, install.yChat.de
+ und liesmich.yChat.de eingerichtet.
+ - Die Menüpunkte wurden zusammengefaßt, damit sie unter einer
+ Auflösung von 800x600 nur eine Zeile belegen.
+ - Einige Bugs wurden entfernt.
+
+Update von 0.2.2 auf 0.2.3 - 25.11.2k
+ - Smooth scrolling JavaScript ( Vielen Dank an Andreas Buchwald ).
+ - "IP#-Fehler" wurde so gut wie beseitigt.
+ - Aufrufe der einzelnen Benutzerprofile wird gezählt und angezeigt.
+ Diese werden in data/user/counts/* gespeichert.
+ - Automatische Einrichtung des Chats mit setup.sh und Telnet.
+ - Menüpunkt "Dein Profil" wurde entfernt da eigenes Profil auch
+ stets über die Onlineliste aufgerufen werden kann.
+
+Update von 0.2.1 auf 0.2.2 - 23.11.2k
+ - Einige Bugs wurden entfernt.
+ - Geschwindigkeit des Chats wurde optimiert.
+ - Eine Liste aller eingelogten Benutzer erscheint am Rand. Hierfür
+ wurde die Datei online.pl eingeführt. Sie aktuallisiert sich alle
+ 20 Sekunden.
+ - Die UPDATES.txt wurde eingeführt.
+
+Update von 0.2.0 auf 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden nun anders verwaltet.
+
+Update von Alpha XVIII auf 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ überarbeitet.
+ - Neue Versionsnumern wurden eingeführt.
\ No newline at end of file diff --git a/0.2.5a2/bar.gif b/0.2.5a2/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.2.5a2/bar.gif diff --git a/0.2.5a2/config.pm b/0.2.5a2/config.pm new file mode 100644 index 0000000..029394a --- /dev/null +++ b/0.2.5a2/config.pm @@ -0,0 +1,320 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "16.12.2k";
+$version = "0.2.5a2";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ body.online { background-color: 444444; background-image: none }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("$msg2post") if ($room eq "Cyberbar");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($msg2log) = @_;
+ &zeit;
+ &write_file("data/logs/$day.$month.$year");
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen!");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } elsif ($method ne "kick") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ }
+ &rm_rstat($room,$alias) if ($room ne undef);
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, dessen Timestamps älter als 60 Sekunden sind
+ my ($dir2rm,$rstatroom) = @_;
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ &rm_rstat($rstatroom,$_) if ($rstatroom ne undef);
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_",$_);
+ &list_dir("data/online/rooms/$_",2);
+ if ($#dir2 = 1) {
+ rmdir("data/online/rooms/$_");
+ }
+ }
+ }
+}
+
+sub rm_rstat { # Benutzer als Raumbesetzer austragen
+ my ($rstatroom,$r_alias) = @_;
+ &read_file("data/online/rstat/$rstatroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $newfile = $rstat[0].$rstat[1];
+ for ($i=2;$i<=$#rstat;$i++) {
+ $newfile = $newfile."\n".$rstat[$i] if ($rstat[$i] ne $r_alias."\n");
+ }
+ write_file_new("data/online/rstat/$rstatroom");
+ print DATEI $newfile;
+ close DATEI;
+}
+
+sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen.
+ my ($alias2check,$method) = @_;
+ my $ip;
+ for($i=0 ;$i<=5;) {
+ &read_file("data/online/ident/$alias2check");
+ $ip = <DATEI>;
+ close DATEI;
+ if ($ip ne $ENV{'REMOTE_ADDR'}) {
+ $i++;
+ } else {
+ goto ENDCHECKIP
+ }
+ if ($i<=5) {
+ if ($method eq undef) {
+ &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.");
+ } else {
+ &post_prv("$alias2check","<font color=red>Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.</font>");
+ &input_html("true") if ($method = 2);
+ }
+ exit;
+ }
+ }
+ENDCHECKIP:
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = undef;
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten
\ No newline at end of file diff --git a/0.2.5a2/help.sno b/0.2.5a2/help.sno new file mode 100644 index 0000000..8fe0455 --- /dev/null +++ b/0.2.5a2/help.sno @@ -0,0 +1,54 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table width=100% bgcolor=555555> +<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>/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>//</div></td><td><div>Wurde zuletzt eine öffentliche Nachricht gepostet, dann wird diese nocheinmal gepostet (Funktioniert nicht bei und nach Befehlen, flüstern oder schreien)</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>/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>/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 jedeglich 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>/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=green>OW</font></div></td><td><div>/ban</div></td><td><div>Zeigt alle verbannten Benutzer an</div></td></tr> +<tr><td><div><font color=green>OW</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=green>OW</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=green>OW</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=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.2.5a2/htdocs.pl b/0.2.5a2/htdocs.pl new file mode 100644 index 0000000..c1008a7 --- /dev/null +++ b/0.2.5a2/htdocs.pl @@ -0,0 +1,206 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "help_html") { + &printfile("help.sno","Alle Chatbefehle"); +} elsif ($var eq "menu_html") { + &menu_html; +} elsif ($var eq "werda_html") { + &werda_html; +} elsif ($var eq "logs_html") { + &logs_html; +} elsif ($var eq "view_sulogs_html") { + &hirachie($alias); + if ($hirachie eq "ow") { + &start_html("Oberwächter-Logdateien"); + print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a><hr>"; + &printfile($tmp); + print "</div></body></html>"; + } +} elsif ($var eq "view_logs_html") { + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + &printfile($tmp,$tmp,"log"); + } +} elsif ($var eq "superuser_html") { + &superuser_html; +} elsif ($var eq "bar_html") { + print + $q->start_html(-bgcolor=>"ffa500"), + $q->end_html; +} else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; +} + +sub menu_html { + if ($tmp eq "quit") { + print + $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" ); + sleep 1; + &remove_online($alias); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + } + &start_html("Menü","menu"); +print <<END; + <center> + <div> + [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp" target="werda">Wer ist da?</a>] + [<a href="main2.pl?var=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>] + [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Optionen</a>] + [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzer</a>] + [<a href="htdocs.pl?var=help_html" target="Befehle">Befehle</a>] + [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Board</a>] + [<a href="htdocs.pl?var=superuser_html&alias=$alias" target="Hirachie">Superuser</a>] + [<a href="htdocs.pl?var=logs_html&alias=$alias" target="Logdateien">Logs</a>] + [<a href="push.pl?alias=$alias&room=$room&var=clear_screen" target="main">Weiterchatten</a>] + [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias">Verlassen</a>] + </div> + </center> +</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 + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + my $room = $_; + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n"); + &list_dir("data/online/rooms/$room",2); + local $nr = $#dir2-1; + print $q->b( $_ ), + " $door ($nr) Raumthema: $rstat[1]", + $q->br; + foreach(@dir2) { + if ($_ ne ".." && $_ ne ".") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " "; + } + } + print $q->br, $q->br; + } + } + print + "</div>", + $q->end_html; +} + +sub logs_html { + &secure_checkip($alias); + &start_html("Logdateien"); + print <<END; +<div> + Hier befinden sich alle Logdateien +</div> +<hr> +END + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + &list_dir("data/logs"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/$_") { + print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_", + -target=>"_new" }, + "$_" ), + " "; + } + } + } else { + print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ", + "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde." ), + $q->hr; + &printfile("data/htdocs/logs_html"); + } + print + $q->end_html; +} + +sub superuser_html { # Zeigt an, wer Superuser ist + &start_html("Superuser"); + print "<div>Hallo $alias. Du bist als "; + &hirachie($alias); + if ($hirachie eq "ow") { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.</div>", + $q->hr; + } elsif ( $hirachie 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.2.5a2/index.pl b/0.2.5a2/index.pl new file mode 100644 index 0000000..bd2ce53 --- /dev/null +++ b/0.2.5a2/index.pl @@ -0,0 +1,368 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = <DATEI>; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&list_dir("data/online/users"); +my $logtin = $#dir-1; +&start_html("Created by Paul C. Bütow 2k"); +print <<END; + <center> + <table width=400> + <tr> + <td> + <b> + <div> + $title - ( <a href="http://servers.yChat.de">yChat-Servers</a> ) + <img src="$gfxpath/yChat.jpg"> + </div> + </b> +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 action="index.pl"> + <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="id" value="$id"> + </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> + <div> + yChat befindet sich momentan noch in der Entwicklungsphase ! + <br> + Fragen gehen an Paul Bütow ( + <a href="mailto:paul\@buetow.oxg.de"> + paul\@buetow.oxg.de + </a> + ) :-) + <br> + <br> + Diese Seite wurde schon $counter mal aufgerufen. Es sind z.Z. $logtin Benutzer online. + </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. +my $reload = $_[0]; +&start_html("Registration"); +print <<END; + <center> + <table width=400> + <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="id" value="$id"> + </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"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = <DATEI>; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = <DATEI>; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + &write_file_new("data/online/ident/$alias"); + print DATEI $ENV{'REMOTE_ADDR'}; + close DATEI; + &write_file_new("data/user/lastlogin/$alias"); + print DATEI time; + close DATEI; + &frameset_html; + exit; + } else { + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("<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 by Paul C. Bütow 2k + </title> + </head> +<frameset border=0 frameborder=0 framespacing=0 rows="50,*,55"> + <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol" scrolling="no"> + <frameset border=0 frameborder=0 framespacing=0 cols="150,*"> + <frame name="online" src="online.pl?room=$room&alias=$alias"> + <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen"> + </frameset> + <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login" scrolling="no"> +</frameset> +</html> +END +} diff --git a/0.2.5a2/main.pl b/0.2.5a2/main.pl new file mode 100644 index 0000000..3934423 --- /dev/null +++ b/0.2.5a2/main.pl @@ -0,0 +1,633 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden + +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "input_html") { + &input_html; +} elsif ($var eq "post_msg") { + &post_msg; +} elsif ($var eq "change_room") { + &change_room; +} else { + &error("Parameter fehlt"); +} + +sub input_html { # Eingabemaske für den Chat. + my ($reload,$action,$whisper,$lastmsg) = @_; + $action = $q->param('action') if ($action eq ""); + if ($tmp eq "away") { + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>"); + } elsif ($tmp eq "login") { + &remove_rooms; + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>"); + } + if ($action ne "" && $action ne "whisper" && $action ne "away") { + print "<html><head><script language=\"JavaScript\">"; + if ($action eq "change_room") { + print "open(\"online.pl?alias=$alias&room=$room\",\"online\");"; + print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol\",\"input\");"; + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } elsif ($action eq "change_colors") { + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } + print "</script></head><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } else { + print "<html><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>"; + } + print "<form action=\"main.pl\">"; + print "<input type=\"hidden\" name=\"tmp\" value=\"away\">" if ($action eq "away"); + print <<END; + <input type="hidden" name="var" value="post_msg"> + <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="id" value="$whisper"> + <input type="hidden" name="lastmsg" value="$lastmsg"> + <input size="70" name="msg"> + <input type="submit" value="Texten"></form> +END +if ($reload eq "true") { +print <<END; + <script language="JavaScript"> + <!-- + document.forms[0].msg.focus(); + //--> + </script> +END +} +print + $q->end_html; +} + +sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde. + $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren + $msg =~ s#kilahu#yChat#g; + $msg =~ s#ooperle#ooper!#g; + if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht + $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>"; + $msg =~ s#"#''#g; # " in '' umtauschen für den Befehl "//" + &input_html("true","",$id,$msg); # -> Reload=true, Action=none, Whisper=$id + &secure_checkip($alias,1); + &post($msg); + } else { + &secure_checkip($alias,2); + &cmd($msg); + } +} + +sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können. + $_[0] = $_[0]." "; + $_[0] = substr($_[0], 1, length($_[0])-1); + my @cmd = split(/ /, $_[0]); + my $cmd = substr($_[0],0 , index($_[0], " ")); + my ($reload,$action,$whisper) = ("true","",$id); +#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< +#############>- DER LETZTEN ZUGEFLÜSTERTEN PERSON NOCHEINMAL FLÜSTERN -< + if ($cmd eq "/") { + &post($q->param('lastmsg')); +#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< + } elsif ($cmd eq "about") { + &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>"); +#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< + } elsif ($cmd eq "away") { + if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde + $tmp = ""; + } + for ($i=1; $i <= $#cmd; $i++) { + $tmp = $tmp." ".$cmd[$i]; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$tmp</font> ) ...</i></font>"); + $action = "away"; +#############>- 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\",\"main\");</script>"); +#############>- FARBEN WECHSELN -< + } elsif ($cmd eq "col") { + $col = $cmd[1]; + my $tmpsecol = $cmd[2]; + if ($tmpsecol eq "") { + $secol = $col + } else { + $secol = $tmpsecol; + } + &read_file("data/user/options/$alias"); + my @pro = <DATEI>; + close DATEI; + &write_file_new("data/user/options/$alias"); + print DATEI $pro[0]."".$col."\n".$secol; + close DATEI; + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt ...</font></i>"); + $action = "change_colors"; +#############>- 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>"); +#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< + } elsif ($cmd eq "j") { + &change_room("j",$cmd[1],$room); + $action = "change_room"; +#############>- HANDELN -< + } elsif ($cmd eq "me" || $cmd eq "m") { + for ($i=1; $i <= $#cmd; $i++) { + $me_msg = $me_msg." ".$cmd[$i]; + } + if ($cmd eq "m") { + &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>"); + } else { + &post("<i><font color=$col>$alias $me_msg</font></i>"); + } +#############>- FLÜSTERN ( Auch mit '/' ) -< + } elsif ($cmd eq "msg" || $cmd eq "") { + my ($alias2post,$msg2post) = ($cmd[1],""); + if ($cmd eq "msg") { + for ($i=2; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } else { + $alias2post = $id; + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } + &list_dir("data/online/users"); + foreach(@dir) { + if ($_ eq $alias2post) { + &write_file("data/msgs/$alias2post"); + print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &write_file("data/msgs/$alias"); + print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &input_html($reload,"",$alias2post); + exit; + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>"); +#############>- DAS SYSTEM VERLASSEN -< + } elsif ($cmd eq "q") { + &post_prv("$alias","<script language=\"JavaScript\">window.open(\"index.pl?tmp=quit\",\"_top\");</script>"); + sleep 1; + &remove_online($alias,$room); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + exit; +#############>- SCHREIEN -< + } elsif ($cmd eq "s") { + my ($msg2scream,$msg2post); + for ($i=1; $i <= $#cmd; $i++) { + $msg2scream = $msg2scream." ".$cmd[$i]; + } + $msg2post = "\U$msg2scream"; + &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>"); +#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< +} elsif ($cmd eq "w") { + &list_dir("data/online/rooms/$room"); + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n"); + my ($is,$nr) = ("t",0); + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $personen = $personen." ".$_; + $nr++; + } + } + &post_prv("$alias","<font size=2 color=ffffff>$room $door ($nr) [".$rstat[1]."] : <font color=ffa500>$personen</font></font>"); + + #############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< + } elsif ($cmd eq "wc" || $cmd eq "wc/") { + $raum = $cmd[1]; + if ($raum eq "" && $cmd eq "wc") { + &list_dir("data/online/users"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/users/$_"); + } + my $nr = ($#dir-1); + my ($nrs,$is) = ("","ist"); + if ($nr != 1) { + $nrs = "en"; + $is = "sind"; + } + &post_prv("$alias","<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; + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + &list_dir("data/online/rooms/$_",2); + &read_file("data/online/rstat/$_"); + my @rstat = <DATEI>; + close DATEI; + 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><td><font size=2 color=ffffff>"; + 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; + &list_dir("data/online/rooms/$raum"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_"); + } + my ($nr,$is) = (($#dir-1),"t"); + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>"); + } +#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< + } elsif ($cmd eq "wj" || $cmd eq "ju") { + my $alias2search = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum"); + foreach $user (@dir2) { + if (-f "data/online/rooms/$raum/$user") { + if ($user eq $alias2search) { + if ($cmd eq "wj") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>"); + } else { + $action = "change_room"; + &change_room("ju",$raum,$room,$alias2search); + } + &input_html($reload,$action,$whisper); + exit; + } + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff> ist nicht eingelogt !</font></font>"); +#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -< + } elsif ($cmd eq "l") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $lock = "0\n"; + &zeit; + if ($room eq "Cyberbar") { + &post("<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("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum ab ...</font></i>"); + } else { + &post("<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]; + } + write_file_new("data/online/rstat/$room"); + print DATEI $lock; + close DATEI; + } + } +#############>- RAUMBESETZER ERNENNEN -< + } elsif ($cmd eq "su") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $alias2su = $cmd[1]; + &list_dir("data/online/rooms/$room"); + foreach(@dir) { + if ($_ eq $alias2su) { + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + &hirachie($alias2su); + &prove_besetzer($alias2su,$room); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + &input_html($reload,$action,$whisper); + &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("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias ernennt \"$alias2su\" zum Raumbesetzer ...</font></i>"); + &write_file("data/online/rstat/$room"); + print DATEI $alias2su."\n"; + close DATEI; + &input_html("true",$action,$whisper); + exit; + } + } + &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + } +#############>- RAUMBESETZER ENTNENNEN -< + } elsif ($cmd eq "rsu") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $alias2rsu = $cmd[1]; + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + &prove_besetzer($alias2rsu,$room); + if ($r_besetzer eq "true") { + &zeit; + &post("<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"); + } + &write_file_new("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>"); + } + } +#############>- RAUM EIN THEMA GEBEN -< + } elsif ($cmd eq "t") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $theme; + for ($i=1; $i <= $#cmd; $i++) { + $theme = $theme." ".$cmd[$i]; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias gibt dem Raum das Thema <font color=red>( $theme )</font> ...</font></i>"); + $theme = $r_stat[0].$theme."\n"; + for ($i=2;$i<=$#r_stat;$i++) { + $theme = $theme.$r_stat[$i]; + } + write_file_new("data/online/rstat/$room"); + print DATEI $theme; + close DATEI; + } +#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- ALIAS VERBANNEN BZW. ENTBANNEN -< + } elsif ($cmd eq "ban" || $cmd eq "rban") { + &hirachie($alias); + if ($hirachie eq "ow") { + my ($alias2handle,$registriert) = $cmd[1]; + &list_dir("data/user/options"); + foreach(@dir) { + $registriert = "true" if ($_ eq $alias2handle); + } + if ($registriert ne "true") { + if ($cmd eq "ban") { + if ($alias2handle ne "") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>"); + } else { + &read_file("data/ban"); + my @banned = <DATEI>; + my ($benutzer); + my $nr = $#banned+1; + close DATEI; + foreach(@banned) { + $benutzer = $benutzer." ".$_; + } + &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>"); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>"); + } + &input_html("true"); + exit; + } + &read_file("data/ban"); + my @banlist = <DATEI>; + close DATEI; + foreach(@banlist) { + if ($_ eq "$alias2handle\n") { + if ($cmd eq "ban") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>"); + } else { + my $banned = "false"; + foreach(@banlist) { + $banned = "true" if ($_ eq "$alias2handle\n"); + } + if ($banned eq "true") { + my @newbanlist; + foreach(@banlist) { + push @newbanlist,$_ if ($_ ne "$alias2handle\n"); + } + &write_file_new("data/ban"); + print DATEI @newbanlist; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>"); + } + } + &input_html("true"); + exit; + } + } + if ($cmd eq "ban") { + &hirachie($alias2handle); + if ($hirachie ne "ow") { + &write_file("data/ban"); + print DATEI "$alias2handle\n"; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>"); + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>"); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>"); + } + } +#############>- IP # VON ALIAS ANZEIGEN LASSEN -< + } elsif ($cmd eq "ip") { + &hirachie($alias); + if ($hirachie eq "ow") { + my $alias2prove = $cmd[1]; + &list_dir("data/online/ident"); + foreach(@dir) { + if ($_ eq $alias2prove) { + &read_file("data/online/ident/$_"); + local $ipnr = <DATEI>; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>"); + } + } + } +#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< + } elsif ($cmd eq "k") { + &hirachie($alias); + if ($hirachie eq "wa" || $hirachie eq "ow") { + my $alias2kick = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2); + foreach $chatter (@dir2) { + if ($chatter eq $alias2kick) { + &hirachie($alias2kick); + if ($hirachie 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 ($hirachie 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 $_); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_); + &remove_online($alias2kick,$_,"kick"); + &secure_removeip($alias2kick); + } + &input_html("true"); + exit; + } + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>"); + } +#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -< + } elsif ($cmd eq "kill") { + &hirachie($alias); + if ($hirachie eq "ow") { + my $alias2kill = $cmd[1]; + &hirachie($alias2kill); + if ($hirachie 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 ($hirachie 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 { + unlink("data/user/options/$alias2kill"); + unlink("data/user/profiles/$alias2kill"); + unlink("data/user/gbooks/$alias2kill"); + unlink("data/user/counts/$alias2kill"); + unlink("data/user/lastlogin/$alias2kill"); + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias killt \"$alias2kill\" ganz und gar aus dem System ...</font></i>"); + } + } + #############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -< + } elsif ($cmd eq "sys") { + &hirachie($alias); + if ($hirachie eq "ow") { + for ($i=1; $i <= $#cmd; $i++) { + $sys_msg = $sys_msg." ".$cmd[$i]; + } + &zeit; + &post_all("<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>"); + } +#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -< + } elsif ($cmd eq "wa" || $cmd eq "rwa") { + &hirachie($alias); + if ($hirachie eq "ow") { + &zeit; + my $alias2handle = $cmd[1]; + if ($cmd eq "wa") { + my $anerkennen = "false"; + &list_dir("data/user/options"); + foreach(@dir) { + if ($_ eq $alias2handle) { + $anerkennen = "true"; + } + } + if ($anerkennen eq "true") { + &hirachie($alias2handle); + if ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>"); + } elsif ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>"); + } else { + &write_file("data/wa"); + print DATEI $alias2handle."\n"; + close DATEI; + &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>"); + } + } else { + &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>"); + } + } elsif ($cmd eq "rwa") { + &read_file("data/wa"); + my @wafile = <DATEI>; + close DATEI; + my $aberkennen = "false"; + foreach(@wafile) { + if ($_ ne "$alias2handle\n") { + push @newafile,$_; + } else { + $aberkennen = "true"; + } + } + &write_file_new("data/wa"); + print DATEI @newafile; + close DATEI; + if ($aberkennen eq "true") { + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>"); + } else { + &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>"); + } + } + } +#############>- ENDE DER CHATBEFEHLE -< +} +&input_html($reload,$action,$whisper); +} + +sub change_room { # Den Chat-Raum wechseln + my ($method,$newroom,$oldroom,$alias2follow) = @_; + # Überprüfen, ob Alias Raum betreten darf + &read_file("data/online/rstat/$newroom"); + my @rstat = <DATEI>; + close DATEI; + if ($rstat[0] eq "1\n") { + &hirachie($alias); + if ($hirachie eq "wa" || $hirachie eq "ow") { + } else { + &post_prv("$alias","<font size=2 color=ffffff>Der Raum \"<font color=ffa500>$newroom</font>\" ist leider abgesperrt!</font>"); + &input_html("true",$action,$id); + exit; + } + } + $room = $oldroom; + &secure_checkip($alias); # IP Nummer überprüfen + &zeit; # Zeit 'erneuern' + if ($method eq "j") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } elsif ($method eq "ju") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<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>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } + # Sicherheitshalber Alias erneuert entf. + unlink("data/online/rooms/$oldroom/$alias"); + &rm_rstat($oldroom,$alias); + &rm_rooms; +} + +sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat + my ($r_alias,$r_room) = @_; + $r_besetzer = "false"; + &read_file("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"); + } +}
\ No newline at end of file diff --git a/0.2.5a2/main2.pl b/0.2.5a2/main2.pl new file mode 100644 index 0000000..76f161b --- /dev/null +++ b/0.2.5a2/main2.pl @@ -0,0 +1,571 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### + +if ($var eq "list_alias_html") { + &list_alias_html; +} elsif ($var eq "alias_html") { + &alias_html; +} elsif ($var eq "edit_profile_html") { + &edit_html("edit_profile_html"); +} elsif ($var eq "edit_options_html") { + &edit_html("edit_options_html"); +} elsif ($var eq "gb_html") { + &gb_html; +} elsif ($var eq "post_gb") { + &post_gb; +} elsif ($var eq "rm_gb_alias") { + &rm_gb; +} elsif ($var eq "edit_profile") { + &edit("edit_profile"); +} elsif ($var eq "edit_options") { + &edit("edit_options"); +} 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="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 + &secure_checkip($alias); + &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"; + } + if (-e "$tmpath") { + &read_file("$tmpath"); + my @datei = <DATEI>; + close DATEI; + pop(@datei) if ($#datei > 99); + my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + @newdatei = ("@newdatei", "@datei"); + &write_file_new("$tmpath"); + print DATEI @newdatei; + close DATEI; + } else { + &write_file_new("$tmpath"); + print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + close DATEI; + } + 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=$alias\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp\" target=\"_new\">Dein Profil</a> gehängt ... </font>"); + &alias_html; + exit; + } +} + +sub rm_gb { # Gästebucheintrag entfernen + &secure_checkip($alias); + $tmp = $alias; + &read_file("data/user/gbooks/$alias"); + my @gbfile = <DATEI>; + close DATEI; + my @newgbfile = (); + for($i=0; $i <= $#gbfile; $i++) { + push(@newgbfile,$gbfile[$i]) if ($i != $id); + } + &write_file_new("data/user/gbooks/$alias"); + print DATEI @newgbfile; + close DATEI; + &alias_html("rm_ok"); +} + +sub list_alias_html { # Liste aller Benutzer + &start_html("Alle Benutzer"); + &list_dir("data/user/options"); + my @liste = sort(@dir); + my $nr = $#dir-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=$_" }, + "$_"), + " "; + } + } +print <<END; + </div> +</body> +</html> +END +} + +sub alias_html { # Anzeigen eines Benutzerprofils + my $message = $_[0]; + local $counter = undef; + &read_file("data/user/counts/$tmp"); + $counter = <DATEI>; + close DATEI; + $counter++; + &write_file_new("data/user/counts/$tmp"); + print DATEI $counter; + close DATEI; + &start_html($tmp); +print <<END; +<div> + <a href="htdocs.pl?var=werda_html&alias=$alias">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 +} + &read_file("data/user/profiles/$tmp"); + @data = <DATEI>; + close DATEI; +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="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"> +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) = @_; + &secure_checkip($alias); + &start_html("Benutzerprofil ändern"); + if ($method eq "edit_options_html") { + &read_file("data/user/options/$alias"); + } elsif ($method eq "edit_profile_html") { + &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol","input"); + open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol","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 auf <a href="push.pl?alias=$alias&room=$room">Weiterchatten</a> klicken. +</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; +<form action="main2.pl"> + <input type="hidden" name="alias" value="$alias"> + <input type="hidden" name="var" value="edit_options"> + <div> + Dein Passwort + <font color=ffa500> + (Gut merken !!) + </font> + <br> + <input type="password" name="id" value="$data[0]"> + </div> + <br> + <div> + Geb hier das Passwort erneuert ein: + <br> + <input type="password" name="tmp" value="$data[0]"> + </div> + <br> + <div> + "Deine Farbe (Farbe Deines Nicks): + <br> + <select NAME="col" size="1"> + <option selected value="$col">($data[1])</option> + <option value="0000FF">Blau (1)</option> + <option value="008000">Grün</option> + <option value="000000">Schwarz</option> + <option value="808000">Oliv</option> + <option value="000080">Marineblau</option> + <option value="800080">Purpur</option> + <option value="808080">Braun</option> + <option value="FF00FF">Fuchsia</option> + <option value="008080">Stahlblau</option> + <option value="333333">Mittelschwarz</option> + <option value="003399">BärBlau</option> + <option value="0066CC">Blau (2)</option> + <option value="009933">Grün</option> + <option value="006666">Oliv</option> + <option value="FF0000">VollRot</option> + <option value="CC0000">RostRot</option> + <option value="990099">Lila</option> + <option value="FF00FF">Pink</option> + <option value="FF9900">Orange</option> + <option value="CC6600">Ocker</option> + <option value="996600">Braun</option> + <option value="666666">Grau</option> + <option value="0A6307">Dunkelgrün</option> + <option value="9C1B7C">Dunkellila</option> + <option value="3D0DB9">Dunkelblau</option> + <option value="8FA5ED">Hellblau</option> + <option value="FFFF00">Gelb</option> + <option value="3D4863">?????</option> + </select> + </div> + <br> + <div> + Deine zweite Farbe (Farbe Deiner Nachrichten): + <br> + <select NAME="secol" size="1"> + <option selected value="$col">($data[2])</option> + <option value="0000FF">Blau (1)</option> + <option value="008000">Grün</option> + <option value="000000">Schwarz</option> + <option value="808000">Oliv</option> + <option value="000080">Marineblau</option> + <option value="800080">Purpur</option> + <option value="808080">Braun</option> + <option value="FF00FF">Fuchsia</option> + <option value="008080">Stahlblau</option> + <option value="333333">Mittelschwarz</option> + <option value="003399">BärBlau</option> + <option value="0066CC">Blau (2)</option> + <option value="009933">Grün</option> + <option value="006666">Oliv</option> + <option value="FF0000">VollRot</option> + <option value="CC0000">RostRot</option> + <option value="990099">Lila</option> + <option value="FF00FF">Pink</option> + <option value="FF9900">Orange</option> + <option value="CC6600">Ocker</option> + <option value="996600">Braun</option> + <option value="666666">Grau</option> + <option value="0A6307">Dunkelgrün</option> + <option value="9C1B7C">Dunkellila</option> + <option value="3D0DB9">Dunkelblau</option> + <option value="8FA5ED">Hellblau</option> + <option value="FFFF00">Gelb</option> + <option value="3D4863">?????</option> + </select> + </div> + <br> +END + } 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="alias" value="$alias"> + <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="submit" value="Daten ändern ..."> + </font> + </form> +</body> +</html> +END +} + + +sub edit { # Benutzerprofil od. Chat-Optionen abspeichern + &secure_checkip($alias); + my $method = $_[0]; + if ($method eq "edit_profile") { + &write_file_new("data/user/profiles/$alias"); + print DATEI $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 DATEI; + &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; + } + &secure_checkip($alias); + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n".$col."\n".$secol; + close DATEI; + &edit_html("edit_options_html","edit_options_ok"); + } +} diff --git a/0.2.5a2/online.pl b/0.2.5a2/online.pl new file mode 100644 index 0000000..cdc0d43 --- /dev/null +++ b/0.2.5a2/online.pl @@ -0,0 +1,56 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +&secure_checkip($alias); +&start_html("Online","online"); +&online($alias,$room); +&list_dir("data/online/rooms/".$room); +print + $q->div( "$room:" ), + "<font size=1 color=ffffef face=arial>"; + foreach $online (@dir) { + if (-f "data/online/rooms/$room/$online") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$online", + -target=>"$online" }, "$online"), $q->br; + } + } +print + "</font>", + $q->end_html; + +sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern + my ($alias,$room) = @_; + &write_file_new("data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-e "data/online/rooms/$room") { # Falls Raum nicht existiert anlegen + } else { + &write_file_new("data/online/rstat/$room"); # Raumbesetzerstatus setzen + print DATEI "0\n\n$alias\n"; + close DATEI; + mkdir "data/online/rooms/$room", 0777; + } + &write_file_new("data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen + my $provetime = <DATEI>; + close DATEI; + if ($provetime < (time - 30)) { + &write_file_new("data/online/prove"); + print DATEI time; + close DATEI; + &rm_alias("data/online/users"); + &rm_rooms; + } +} diff --git a/0.2.5a2/push.pl b/0.2.5a2/push.pl new file mode 100644 index 0000000..1cc55f0 --- /dev/null +++ b/0.2.5a2/push.pl @@ -0,0 +1,97 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+CGI->compile(':all');
+$q = new CGI;
+
+$| = 1; # Cache von Perl ausschalten
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkip($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title Created & Copyright by Paul C. Bütow $tmp\n");
+
+if ($var eq "push_logs_html") {
+ $msgfile = $tmp;
+ print "<hr><font size=2 color=ffffff face=arial>";
+} elsif ($var eq "clear_screen") {
+ $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+} else {
+ $msgfile = "data/msgs/$alias";
+ print $q->br;
+}
+
+open (MSGFILE, $msgfile);
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) { # Nach 15 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.2.5a2/setup.sh b/0.2.5a2/setup.sh new file mode 100644 index 0000000..71d0b60 --- /dev/null +++ b/0.2.5a2/setup.sh @@ -0,0 +1,40 @@ +#!/bin/sh +mkdir 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/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/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 * +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.jpg ../../htdocs/yChat/ +echo +echo yChat Setup beendet ... +echo Created and copyrighted by Paul C. Bütow aka Snooper +echo + diff --git a/0.2.5a2/unten.gif b/0.2.5a2/unten.gif Binary files differnew file mode 100644 index 0000000..285fb53 --- /dev/null +++ b/0.2.5a2/unten.gif diff --git a/0.2.5a2/yBanner.gif b/0.2.5a2/yBanner.gif Binary files differnew file mode 100644 index 0000000..e4b691e --- /dev/null +++ b/0.2.5a2/yBanner.gif diff --git a/0.2.5a2/yBanner2.gif b/0.2.5a2/yBanner2.gif Binary files differnew file mode 100644 index 0000000..0e9684e --- /dev/null +++ b/0.2.5a2/yBanner2.gif diff --git a/0.2.5a2/yChat.jpg b/0.2.5a2/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.2.5a2/yChat.jpg diff --git a/0.2.6a/INSTALL.txt b/0.2.6a/INSTALL.txt new file mode 100644 index 0000000..534014d --- /dev/null +++ b/0.2.6a/INSTALL.txt @@ -0,0 +1,106 @@ +#############################################################################
+## yChat.de Version 0.2.6 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+INSTALL.txt => Dieses Dokument
+help.sno => Datei beinhaltet alle Chatbefehle
+
+Folgende Verzeichnisse müssen erstellt werden (chmod 777 sollte
+funktionieren):
+
+- Hier befinden sich alle für den Chat notwenidgen Daten:
+ ./cgi-bin/yChat/data/*
+
+- Hier befinden sich alle Logdateien, die vom Chat erstellt werden:
+ ./cgi-bin/yChat/data/logs/*
+
+- Hier befinden sich die Message-Dateien der eingelogten Benutzer:
+ ./cgi-bin/yChat/data/msgs/*
+
+- Hier befinden sich alle Daten der registrierten Benutzer:
+ ./cgi-bin/yChat/data/user/*
+
+- Hier wird abgespeichert, wie oft ein Benutzerprofil insgesant schon
+ aufgerufen wurde:
+ ./cgi-bin/yChat/data/user/counts/*
+
+- Hier werden alle Memos abgespeichert.
+ ./cgi-bin/yChat/data/user/memos/*
+
+- Hier befinden sich alle Chat-Optionen und Passwörter der registrierten
+ Benutzer:
+ ./cgi-bin/yChat/data/user/options/*
+
+- Hier befinden sich alle Benutzerprofile der Benutzer:
+ ./cgi-bin/yChat/data/user/profiles/*
+
+- Hier befinden sich alle Gästebucheinträge der Benutzer:
+ ./cgi-bin/yChat/data/user/gbooks/*
+
+- Hier wird Protokolliert, wann sich die Benutzer zum letzten mal eingelogt haben:
+ ./cgi-bin/yChat/data/user/lastlogin/*
+
+- Hier befinden sich alle Daten zu den aktuellen Chaträumen und User die online sind
+ ./cgi-bin/yChat/data/online/*
+
+- Hier befinden sich alle offnenen Räume
+ ./cgi-bin/yChat/data/online/rooms/*
+
+- Hier befinden sich die Chatter, die sich in den jew. Räumen befinden. Die
+ Verzeichnisse der Räume werden automatisch erstellt.
+ ./cgi-bin/yChat/data/online/rooms/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+ yBanner.gif => 400x40 yChat-Banner
+ yBanner2.gif => 88x31 yChat-Banner
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper
\ No newline at end of file diff --git a/0.2.6a/LIESMICH.txt b/0.2.6a/LIESMICH.txt new file mode 100644 index 0000000..4f92a14 --- /dev/null +++ b/0.2.6a/LIESMICH.txt @@ -0,0 +1,45 @@ +#############################################################################
+## yChat.de Version 0.2.6 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.install.yChat.de => Installationsdokumentation
+ www.liesmich.yChat.de => Allgemeine Bedingungen usw.
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript zum testen
+
+Vielen Dank an:
+
+ - Andreas Buchwald für die Programmierung des "Nach-UntenScroll-JavaScripts"
+ (www.anklepper.de).
+
+ - Michi aka Snoopy für die Erstellung und Anregung der Farbtabelle
+ (www.berlin-singeltreff.de).
+
+ - Peacemaker für die Erstellung des yChat-Logos
+ (www.peaceplace.de).
diff --git a/0.2.6a/TODO.txt b/0.2.6a/TODO.txt new file mode 100644 index 0000000..c2ed8e0 --- /dev/null +++ b/0.2.6a/TODO.txt @@ -0,0 +1,25 @@ +Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - Löschung aller Chatter, die sich seit 60 Tagen nicht mehr
+ eingelogt haben.
+
+ - IP-Adressen ver-/entbannen.
+
+ - E-Mail zusendung bei verlorenem Passwort.
+
+ - Totale Onlinezeit der einzelnen Chatter soll protokolliert
+ werden. Daraus wird dann eine Top20 der Chatter erstellt.
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.2.6a/UPDATES.txt b/0.2.6a/UPDATES.txt new file mode 100644 index 0000000..227afc1 --- /dev/null +++ b/0.2.6a/UPDATES.txt @@ -0,0 +1,91 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.2.5 auf 0.2.6 vom 17.12.2k
+ - Das Eingabeframe reloaded sich nicht mehr nach jedem Posting.
+ Vielen Dank an Truhe aka Dave und Klepper aka Andreas Buchwald!
+ Bei den Chatbefehlen /col /away /j und /ju muß sich das
+ Eingabeframe weiterhin reloaden.
+ - Der Befehl // wurde entfernt. Dieser war nicht mehr erforderlich.
+ weil Nachrichten werden nur noch sehr selten verschluckt. Dieser
+ Chatbefehl postete die letzte Nachricht nocheinmal.
+ - Neuer Befehl: mit "/memo Alias hier der Text" hinterläßt man
+ Alias eine Memo. Logt sich Alias in den Chat ein, dann erhält
+ er diese sofort. Dafür wurde das Verzeichnis ".data/user/memos/"
+ angelegt.
+ - Programmcode wurde ein wenig optimiert.
+ - Das Design wurde ein wenig geändert.
+ - Beseitigung diverser Bugs.
+
+Update von 0.2.4 auf 0.2.5 vom 15.12.2k
+ - Derjenige, der einen Raum zuerst betritt, hat Raumbesetzerrechte.
+ - Raumbesetzer, Wächter und Oberwächte können weitere Raumbesetzer
+ bestimmen. Diese können Raumbeseter auch wieder degradieren.
+ - Raumbesetzer, Wächter und Oberwächter können dem aktuellen Raum
+ auf/absperren und Themen geben. Wächter und Oberwächter können
+ abgesperrte Räume betreten.
+ - Das Verzeichnis ".data/htdocs" wurde entfernt. Die Datei help_html
+ heist nun help.sno und befindet sich im yChat-Hauptverzeichnis.
+ - Das Verzeichnis ".data/user/lastlogin" wurde hinzugefügt. Hier
+ wird beim erfolgreichen Einloggen ein "Timestamp" gesetzt. Später
+ sollen Oberwächter "veraltete" Benutzer entfernen können.
+ - Neuer Oberwächterbefehl: "/kill Alias" entfernt Alias ganz und gar
+ vom System. Oberwächter und Wächter können nicht entfernt werden.
+ - Perl-Cache wurde im gesamten System komplett deaktiviert ( Weniger
+ Ladezeiten der HTML-Dokumente ).
+ - Nur Nachrichten aus dem Raum "Cyberbar" werden gelogt.
+ Selbsterstellte Räume werden nichtmehr gelogt. Viele Logfunktionen
+ wurden entfernt (weniger Serverbalast).
+ - Beseitigung einiger kleinen Bugs.
+ - Unter "Optionen" im Chat wir die Farbe nun mit einem Drop-Down-Menü
+ ausgewählt ( Vielen dank an Michi aka Snoopy ).
+ - Auf der Startseite wird nun angezeigt wieviele Benutzer eingelogt
+ sind. Ist keiner eingelogt, dann wird das System "aufgeräumt". D.h.
+ Dateien die nicht mehr gebraucht werden und noch nicht gelöscht
+ wurden werden entfernt ( z.B. Nachrichtendateien der einzelnen
+ Chatter und die Dateien die die IP-Nummern der eingelogten Benutzer
+ beinhalteten usw.).
+ - Hunzufügung einer TODO-Liste. Hier sind mehrere Funktionen
+ vermerkt, die in späteren yChat-Versionen eingebaut werden sollen.
+ (www.todo.yChat.de oder TODO.txt).
+
+Update von 0.2.3 auf 0.2.4 - 30.11.2k
+ - Optimierung bzw. Verbesserung der Push-Routine push.pl.
+ - Server-Ping wurde von 2-Pings-per-Minute auf 4 erhöht.
+ - yChat-Banner wurde erstellt und ist unter
+ documents.yChat.de/yBanner.jpg vorzufinden.
+ - Unter der URL servers.yChat.de wurde eine Serverliste angelegt,
+ welche anzeigt wo yChat-Systeme laufen.
+ - Des weiteren wurden die URLs updates.yChat.de, install.yChat.de
+ und liesmich.yChat.de eingerichtet.
+ - Die Menüpunkte wurden zusammengefaßt, damit sie unter einer
+ Auflösung von 800x600 nur eine Zeile belegen.
+ - Einige Bugs wurden entfernt.
+
+Update von 0.2.2 auf 0.2.3 - 25.11.2k
+ - Smooth scrolling JavaScript ( Vielen Dank an Andreas Buchwald ).
+ - "IP#-Fehler" wurde so gut wie beseitigt.
+ - Aufrufe der einzelnen Benutzerprofile wird gezählt und angezeigt.
+ Diese werden in data/user/counts/* gespeichert.
+ - Automatische Einrichtung des Chats mit setup.sh und Telnet.
+ - Menüpunkt "Dein Profil" wurde entfernt da eigenes Profil auch
+ stets über die Onlineliste aufgerufen werden kann.
+
+Update von 0.2.1 auf 0.2.2 - 23.11.2k
+ - Einige Bugs wurden entfernt.
+ - Geschwindigkeit des Chats wurde optimiert.
+ - Eine Liste aller eingelogten Benutzer erscheint am Rand. Hierfür
+ wurde die Datei online.pl eingeführt. Sie aktuallisiert sich alle
+ 20 Sekunden.
+ - Die UPDATES.txt wurde eingeführt.
+
+Update von 0.2.0 auf 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden nun anders verwaltet.
+
+Update von Alpha XVIII auf 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ überarbeitet.
+ - Neue Versionsnumern wurden eingeführt.
\ No newline at end of file diff --git a/0.2.6a/bar.gif b/0.2.6a/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.2.6a/bar.gif diff --git a/0.2.6a/config.pm b/0.2.6a/config.pm new file mode 100644 index 0000000..c3f701f --- /dev/null +++ b/0.2.6a/config.pm @@ -0,0 +1,321 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "19.12.2k";
+$version = "0.2.6a";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ body.online { background-color: 444444; background-image: none }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("$msg2post") if ($room eq "Cyberbar");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($msg2log) = @_;
+ &zeit;
+ &write_file("data/logs/$day.$month.$year");
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen!");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ unlink("data/msgs/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } elsif ($method ne "kick") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ }
+ &rm_rstat($room,$alias) if ($room ne undef);
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, dessen Timestamps älter als 60 Sekunden sind
+ my ($dir2rm,$rstatroom) = @_;
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ &rm_rstat($rstatroom,$_) if ($rstatroom ne undef);
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_",$_);
+ &list_dir("data/online/rooms/$_",2);
+ if ($#dir2 = 1) {
+ rmdir("data/online/rooms/$_");
+ }
+ }
+ }
+}
+
+sub rm_rstat { # Benutzer als Raumbesetzer austragen
+ my ($rstatroom,$r_alias) = @_;
+ &read_file("data/online/rstat/$rstatroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $newfile = $rstat[0].$rstat[1];
+ for ($i=2;$i<=$#rstat;$i++) {
+ $newfile = $newfile."\n".$rstat[$i] if ($rstat[$i] ne $r_alias."\n");
+ }
+ write_file_new("data/online/rstat/$rstatroom");
+ print DATEI $newfile;
+ close DATEI;
+}
+
+sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen.
+ my ($alias2check,$method) = @_;
+ my $ip;
+ for($i=0 ;$i<=5;) {
+ &read_file("data/online/ident/$alias2check");
+ $ip = <DATEI>;
+ close DATEI;
+ if ($ip ne $ENV{'REMOTE_ADDR'}) {
+ $i++;
+ } else {
+ goto ENDCHECKIP
+ }
+ if ($i<=5) {
+ if ($method eq undef) {
+ &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.");
+ } else {
+ &post_prv("$alias2check","<font color=red>Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.</font>");
+ &input_html("true") if ($method = 2);
+ }
+ exit;
+ }
+ }
+ENDCHECKIP:
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = undef;
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten
\ No newline at end of file diff --git a/0.2.6a/help.sno b/0.2.6a/help.sno new file mode 100644 index 0000000..2543c5c --- /dev/null +++ b/0.2.6a/help.sno @@ -0,0 +1,54 @@ +<div>
+ Alle Chat-Befehle:
+</div>
+<hr>
+<table width=100% bgcolor=555555>
+<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>/q</div></td><td><div>Cumunnity verlassen</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>/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 jedeglich 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>/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=green>OW</font></div></td><td><div>/ban</div></td><td><div>Zeigt alle verbannten Benutzer an</div></td></tr>
+<tr><td><div><font color=green>OW</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=green>OW</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=green>OW</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=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.2.6a/htdocs.pl b/0.2.6a/htdocs.pl new file mode 100644 index 0000000..68c8a8a --- /dev/null +++ b/0.2.6a/htdocs.pl @@ -0,0 +1,208 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "help_html") { + &printfile("help.sno","Alle Chatbefehle"); +} elsif ($var eq "menu_html") { + &menu_html; +} elsif ($var eq "blank_html") { + print "<html><body bgcolor=000000>",$q->end_html; +} elsif ($var eq "werda_html") { + &werda_html; +} elsif ($var eq "logs_html") { + &logs_html; +} elsif ($var eq "view_sulogs_html") { + &hirachie($alias); + if ($hirachie eq "ow") { + &start_html("Oberwächter-Logdateien"); + print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a><hr>"; + &printfile($tmp); + print "</div></body></html>"; + } +} elsif ($var eq "view_logs_html") { + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + &printfile($tmp,$tmp,"log"); + } +} elsif ($var eq "superuser_html") { + &superuser_html; +} elsif ($var eq "bar_html") { + print + $q->start_html(-bgcolor=>"ffa500"), + $q->end_html; +} else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; +} + +sub menu_html { + if ($tmp eq "quit") { + print + $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" ); + sleep 1; + &remove_online($alias); + &secure_removeip($alias); + unlink("data/msgs/$alias"); + } + &start_html("Menü","menu"); +print <<END; + <center> + <div> + [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp" target="werda">Wer ist da?</a>] + [<a href="main2.pl?var=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>] + [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Optionen</a>] + [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzer</a>] + [<a href="htdocs.pl?var=help_html" target="Befehle">Befehle</a>] + [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Board</a>] + [<a href="htdocs.pl?var=superuser_html&alias=$alias" target="Hirachie">Superuser</a>] + [<a href="htdocs.pl?var=logs_html&alias=$alias" target="Logdateien">Logs</a>] + [<a href="push.pl?alias=$alias&room=$room&var=clear_screen" target="main">Weiterchatten</a>] + [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias">Verlassen</a>] + </div> + </center> +</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 + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + my $room = $_; + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n"); + &list_dir("data/online/rooms/$room",2); + local $nr = $#dir2-1; + print $q->b( $_ ), + " $door ($nr) Raumthema: $rstat[1]", + $q->br; + foreach(@dir2) { + if ($_ ne ".." && $_ ne ".") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " "; + } + } + print $q->br, $q->br; + } + } + print + "</div>", + $q->end_html; +} + +sub logs_html { + &secure_checkip($alias); + &start_html("Logdateien"); + print <<END; +<div> + Hier befinden sich alle Logdateien +</div> +<hr> +END + &hirachie($alias); + if ($hirachie eq "ow" || $hirachie eq "wa") { + print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + &list_dir("data/logs"); + my @sortedir = sort(@dir); + foreach(@sortedir) { + if (-f "data/logs/$_") { + print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_", + -target=>"_new" }, + "$_" ), + " "; + } + } + } else { + print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ", + "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde." ), + $q->hr; + &printfile("data/htdocs/logs_html"); + } + print + $q->end_html; +} + +sub superuser_html { # Zeigt an, wer Superuser ist + &start_html("Superuser"); + print "<div>Hallo $alias. Du bist als "; + &hirachie($alias); + if ($hirachie eq "ow") { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.</div>", + $q->hr; + } elsif ( $hirachie 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.2.6a/index.pl b/0.2.6a/index.pl new file mode 100644 index 0000000..838ff44 --- /dev/null +++ b/0.2.6a/index.pl @@ -0,0 +1,369 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = <DATEI>; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&list_dir("data/online/users"); +my $logtin = $#dir-1; +&start_html("Created by Paul C. Bütow 2k"); +print <<END; + <center> + <table width=400> + <tr> + <td> + <b> + <div> + $title - ( <a href="http://servers.yChat.de">yChat-Servers</a> ) + <img src="$gfxpath/yChat.jpg"> + </div> + </b> +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 action="index.pl"> + <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="id" value="$id"> + </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> + <div> + yChat befindet sich momentan noch in der Entwicklungsphase ! + <br> + Fragen gehen an Paul Bütow ( + <a href="mailto:paul\@buetow.oxg.de"> + paul\@buetow.oxg.de + </a> + ) :-) + <br> + <br> + Diese Seite wurde schon $counter mal aufgerufen. Es sind z.Z. $logtin Benutzer online. + </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. +my $reload = $_[0]; +&start_html("Registration"); +print <<END; + <center> + <table width=400> + <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="id" value="$id"> + </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"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = <DATEI>; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = <DATEI>; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + &write_file_new("data/online/ident/$alias"); + print DATEI $ENV{'REMOTE_ADDR'}; + close DATEI; + &write_file_new("data/user/lastlogin/$alias"); + print DATEI time; + close DATEI; + &frameset_html; + exit; + } else { + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("<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 rows="50,*,55,0"> + <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol" scrolling="no"> + <frameset border=0 frameborder=0 framespacing=0 cols="150,*"> + <frame name="online" src="online.pl?room=$room&alias=$alias"> + <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen"> + </frameset> + <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login" scrolling="no"> + <frame name="reload" src="htdocs.pl?var=blank_html" scrolling="no"> +</frameset> +</html> +END +} diff --git a/0.2.6a/main.pl b/0.2.6a/main.pl new file mode 100644 index 0000000..a59800d --- /dev/null +++ b/0.2.6a/main.pl @@ -0,0 +1,698 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden + +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +if ($var eq "input_html") { + &input_html; +} elsif ($var eq "reload_html") { + &reload_html; +} elsif ($var eq "post_msg") { + &post_msg; +} elsif ($var eq "change_room") { + &change_room; +} else { + &error("Parameter fehlt"); +} + +sub input_html { # Eingabemaske für den Chat. + if ($tmp eq "login") { + &remove_rooms; + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>"); + } + my $whisper = @_; + $whisper = $q->param('whisper') if ($whisper == 0); +print <<END; +<html> + <head> + <script language="JavaScript"> + function delout() + { + document.inf.submit(); + document.inf.msg.focus(); + document.inf.msg.select(); + return false; + } + </script> + </head> +<body bgcolor=000000> + <form name="inf" target="reload" action="main.pl" method="GET" onsubmit="return delout()"> +END + print <<END; + <input type="hidden" name="var" value="post_msg"> + <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="id" value="$whisper"> + <input type="hidden" name="tmp" value="$tmp"> + <input size="80" name="msg"> + <input type="submit" value="Texten"> + </form> +</body> +</html> +END +} + +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\",\"online\");"; + print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper\",\"input\");"; + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + } elsif ($action eq "change_colors") { + print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");"; + print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper\",\"input\");"; + } elsif ($action eq "away") { + print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&tmp=noaway&whisper=$whisper\",\"input\");"; + } elsif ($action eq "whisper") { + print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper\",\"input\");"; + } + print "</script></head><body bgcolor=000000>"; + print + $q->end_html; +} + +sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde. + if ($tmp eq "noaway") { + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>"); + &post("<script language=\"JavaScript\">open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper\",\"input\");</script>"); + } + $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren + if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht + $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>"; + &reload_html($id,$tmp); # -> Action=none, Whisper=$id, $tmp =? noaway + &secure_checkip($alias,1); + &post($msg); + } else { + &secure_checkip($alias,2); + &cmd($msg); + } +} + +sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können. + $_[0] = $_[0]." "; + $_[0] = substr($_[0], 1, length($_[0])-1); + my @cmd = split(/ /, $_[0]); + my $cmd = substr($_[0],0 , index($_[0], " ")); + my ($whisper,$action) = ($id); +#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< +#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< + if ($cmd eq "about") { + &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>"); +#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< + } elsif ($cmd eq "away") { + if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde + my $away_msg = ""; + } + for ($i=1; $i <= $#cmd; $i++) { + $away_msg = $away_msg." ".$cmd[$i]; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$away_msg</font> ) ...</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\",\"main\");</script>"); + &reload_html($whisper); + exit; +#############>- FARBEN WECHSELN -< + } elsif ($cmd eq "col") { + $col = $cmd[1]; + my $tmpsecol = $cmd[2]; + if ($tmpsecol eq "") { + $secol = $col + } else { + $secol = $tmpsecol; + } + &read_file("data/user/options/$alias"); + my @pro = <DATEI>; + close DATEI; + &write_file_new("data/user/options/$alias"); + print DATEI $pro[0]."".$col."\n".$secol; + close DATEI; + &zeit; + &post("<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($whisper); + exit; +#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< + } elsif ($cmd eq "j") { + &change_room("j",$cmd[1],$room); + &reload_html($whisper,"change_room"); + exit; +#############>- HANDELN -< + } elsif ($cmd eq "me" || $cmd eq "m") { + for ($i=1; $i <= $#cmd; $i++) { + $me_msg = $me_msg." ".$cmd[$i]; + } + if ($cmd eq "m") { + &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>"); + } else { + &post("<i><font color=$col>$alias $me_msg</font></i>"); + } + &reload_html($whisper); + exit; +#############>- MEMO SCHREIBEN -< + } elsif ($cmd eq "memo") { + my $alias2memo = $cmd[1]; + &list_dir("data/user/options"); + foreach(@dir) { + if(-f "data/user/options/$alias2memo") { + for ($i=2; $i <= $#cmd; $i++) { + $memo_msg = $memo_msg." ".$cmd[$i]; + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>"); + &zeit; + &write_file("data/user/memos/$alias2memo"); + print DATEI "<font size=2 color=ffffff>(<font color=red>$day.$month. - $hours:$min:$sec</font>) $alias hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>"; + close DATEI; + &reload_html($whisper); + exit; + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>"); + &reload_html($whisper); + exit; +#############>- FLÜSTERN ( Auch mit '/' ) -< + } elsif ($cmd eq "msg" || $cmd eq "") { + my ($alias2post,$msg2post) = ($cmd[1],""); + if ($cmd eq "msg") { + for ($i=2; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + $action = "whisper"; + } else { + $alias2post = $id; + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } + &list_dir("data/online/users"); + foreach(@dir) { + if ($_ eq $alias2post) { + &write_file("data/msgs/$alias2post"); + print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &write_file("data/msgs/$alias"); + print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n"; + close DATEI; + &reload_html($alias2post,$action); + exit; + } + } + &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>"); +#############>- DAS SYSTEM VERLASSEN -< + } elsif ($cmd eq "q") { + &post_prv("$alias","<script language=\"JavaScript\">window.open(\"index.pl?tmp=quit\",\"_top\");</script>"); + sleep 2; + &remove_online($alias,$room); + &secure_removeip($alias); + exit; +#############>- SCHREIEN -< + } elsif ($cmd eq "s") { + my ($msg2scream,$msg2post); + for ($i=1; $i <= $#cmd; $i++) { + $msg2scream = $msg2scream." ".$cmd[$i]; + } + $msg2post = "\U$msg2scream"; + &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>"); + &reload_html($whisper); + exit; +#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< +} elsif ($cmd eq "w") { + &list_dir("data/online/rooms/$room"); + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n"); + my ($is,$nr) = ("t",0); + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $personen = $personen." ".$_; + $nr++; + } + } + &post_prv("$alias","<font size=2 color=ffffff>$room $door ($nr) [".$rstat[1]."] : <font color=ffa500>$personen</font></font>"); + &reload_html($whisper); + exit; + #############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< + } elsif ($cmd eq "wc" || $cmd eq "wc/") { + $raum = $cmd[1]; + if ($raum eq "" && $cmd eq "wc") { + &list_dir("data/online/users"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/users/$_"); + } + my $nr = ($#dir-1); + my ($nrs,$is) = ("","ist"); + if ($nr != 1) { + $nrs = "en"; + $is = "sind"; + } + &post_prv("$alias","<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; + &list_dir("data/online/rooms"); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + &list_dir("data/online/rooms/$_",2); + &read_file("data/online/rstat/$_"); + my @rstat = <DATEI>; + close DATEI; + 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><td><font size=2 color=ffffff>"; + 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; + &list_dir("data/online/rooms/$raum"); + foreach(@dir) { + $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_"); + } + my ($nr,$is) = (($#dir-1),"t"); + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>"); + } + &reload_html($whisper); + exit; +#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< + } elsif ($cmd eq "wj" || $cmd eq "ju") { + my $alias2search = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum"); + foreach $user (@dir2) { + if (-f "data/online/rooms/$raum/$user") { + if ($user eq $alias2search) { + if ($cmd eq "wj") { + &post_prv("$alias","<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($whisper); + exit; +#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -< + } elsif ($cmd eq "l") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $lock = "0\n"; + &zeit; + if ($room eq "Cyberbar") { + &post("<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("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum ab ...</font></i>"); + } else { + &post("<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]; + } + write_file_new("data/online/rstat/$room"); + print DATEI $lock; + close DATEI; + } + } + &reload_html($whisper); + exit; +#############>- RAUMBESETZER ERNENNEN -< + } elsif ($cmd eq "su") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $alias2su = $cmd[1]; + &list_dir("data/online/rooms/$room"); + foreach(@dir) { + if ($_ eq $alias2su) { + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + &hirachie($alias2su); + &prove_besetzer($alias2su,$room); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + &reload_html($whisper); + &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>"); + exit; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias ernennt \"$alias2su\" zum Raumbesetzer ...</font></i>"); + &write_file("data/online/rstat/$room"); + print DATEI $alias2su."\n"; + close DATEI; + &reload_html($whisper); + exit; + } + } + &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + } + &reload_html($whisper); + exit; +#############>- RAUMBESETZER ENTNENNEN -< + } elsif ($cmd eq "rsu") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $alias2rsu = $cmd[1]; + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + &prove_besetzer($alias2rsu,$room); + if ($r_besetzer eq "true") { + &zeit; + &post("<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"); + } + &write_file_new("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($whisper); + exit; +#############>- RAUM EIN THEMA GEBEN -< + } elsif ($cmd eq "t") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $theme; + for ($i=1; $i <= $#cmd; $i++) { + $theme = $theme." ".$cmd[$i]; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias gibt dem Raum das Thema <font color=red>( $theme )</font> ...</font></i>"); + $theme = $r_stat[0].$theme."\n"; + for ($i=2;$i<=$#r_stat;$i++) { + $theme = $theme.$r_stat[$i]; + } + write_file_new("data/online/rstat/$room"); + print DATEI $theme; + close DATEI; + } + &reload_html($whisper); + exit; +#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- ALIAS VERBANNEN BZW. ENTBANNEN -< + } elsif ($cmd eq "ban" || $cmd eq "rban") { + &hirachie($alias); + if ($hirachie eq "ow") { + my ($alias2handle,$registriert) = $cmd[1]; + &list_dir("data/user/options"); + foreach(@dir) { + $registriert = "true" if ($_ eq $alias2handle); + } + if ($registriert ne "true") { + if ($cmd eq "ban") { + if ($alias2handle ne "") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>"); + } else { + &read_file("data/ban"); + my @banned = <DATEI>; + my ($benutzer); + my $nr = $#banned+1; + close DATEI; + foreach(@banned) { + $benutzer = $benutzer." ".$_; + } + &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>"); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>"); + } + &reload_html($whisper); + exit; + } + &read_file("data/ban"); + my @banlist = <DATEI>; + close DATEI; + foreach(@banlist) { + if ($_ eq "$alias2handle\n") { + if ($cmd eq "ban") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>"); + } else { + my $banned = "false"; + foreach(@banlist) { + $banned = "true" if ($_ eq "$alias2handle\n"); + } + if ($banned eq "true") { + my @newbanlist; + foreach(@banlist) { + push @newbanlist,$_ if ($_ ne "$alias2handle\n"); + } + &write_file_new("data/ban"); + print DATEI @newbanlist; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>"); + } + } + &reload_html($whisper); + exit; + } + } + if ($cmd eq "ban") { + &hirachie($alias2handle); + if ($hirachie ne "ow") { + &write_file("data/ban"); + print DATEI "$alias2handle\n"; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>"); + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>"); + } + } else { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>"); + } + } + &reload_html($whisper); + exit; +#############>- IP # VON ALIAS ANZEIGEN LASSEN -< + } elsif ($cmd eq "ip") { + &hirachie($alias); + if ($hirachie eq "ow") { + my $alias2prove = $cmd[1]; + &list_dir("data/online/ident"); + foreach(@dir) { + if ($_ eq $alias2prove) { + &read_file("data/online/ident/$_"); + local $ipnr = <DATEI>; + close DATEI; + &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>"); + } + } + } + &reload_html($whisper); + exit; +#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< + } elsif ($cmd eq "k") { + &hirachie($alias); + if ($hirachie eq "wa" || $hirachie eq "ow") { + my $alias2kick = $cmd[1]; + &list_dir("data/online/rooms"); + foreach $raum (@dir) { + &list_dir("data/online/rooms/$raum",2); + foreach $chatter (@dir2) { + if ($chatter eq $alias2kick) { + &hirachie($alias2kick); + if ($hirachie 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 ($hirachie 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 $_); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_); + &remove_online($alias2kick,$_,"kick"); + &secure_removeip($alias2kick); + } + &reload_html($whisper); + 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($whisper); + exit; +#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -< + } elsif ($cmd eq "kill") { + &hirachie($alias); + if ($hirachie eq "ow") { + my $alias2kill = $cmd[1]; + &hirachie($alias2kill); + if ($hirachie 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 ($hirachie 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 { + unlink("data/user/options/$alias2kill"); + unlink("data/user/profiles/$alias2kill"); + unlink("data/user/gbooks/$alias2kill"); + unlink("data/user/counts/$alias2kill"); + unlink("data/user/lastlogin/$alias2kill"); + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias killt \"$alias2kill\" ganz und gar aus dem System ...</font></i>"); + } + } + &reload_html($whisper); + exit; + #############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -< + } elsif ($cmd eq "sys") { + &hirachie($alias); + if ($hirachie eq "ow") { + for ($i=1; $i <= $#cmd; $i++) { + $sys_msg = $sys_msg." ".$cmd[$i]; + } + &zeit; + &post_all("<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>"); + } + &reload_html($whisper); + exit; +#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -< + } elsif ($cmd eq "wa" || $cmd eq "rwa") { + &hirachie($alias); + if ($hirachie eq "ow") { + &zeit; + my $alias2handle = $cmd[1]; + if ($cmd eq "wa") { + my $anerkennen = "false"; + &list_dir("data/user/options"); + foreach(@dir) { + if ($_ eq $alias2handle) { + $anerkennen = "true"; + } + } + if ($anerkennen eq "true") { + &hirachie($alias2handle); + if ($hirachie eq "wa") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>"); + } elsif ($hirachie eq "ow") { + &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>"); + } else { + &write_file("data/wa"); + print DATEI $alias2handle."\n"; + close DATEI; + &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>"); + } + } else { + &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>"); + } + } elsif ($cmd eq "rwa") { + &read_file("data/wa"); + my @wafile = <DATEI>; + close DATEI; + my $aberkennen = "false"; + foreach(@wafile) { + if ($_ ne "$alias2handle\n") { + push @newafile,$_; + } else { + $aberkennen = "true"; + } + } + &write_file_new("data/wa"); + print DATEI @newafile; + close DATEI; + if ($aberkennen eq "true") { + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>"); + } else { + &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>"); + } + } + } +#############>- ENDE DER CHATBEFEHLE -< +} +&reload_html($whisper,$action); +} + +sub change_room { # Den Chat-Raum wechseln + my ($method,$newroom,$oldroom,$alias2follow) = @_; + # Überprüfen, ob Alias Raum betreten darf + &read_file("data/online/rstat/$newroom"); + my @rstat = <DATEI>; + close DATEI; + if ($rstat[0] eq "1\n") { + &hirachie($alias); + if ($hirachie eq "wa" || $hirachie eq "ow") { + } else { + &post_prv("$alias","<font size=2 color=ffffff>Der Raum \"<font color=ffa500>$newroom</font>\" ist leider abgesperrt!</font>"); + &reload_html($id,$action); + exit; + } + } + $room = $oldroom; + &secure_checkip($alias); # IP Nummer überprüfen + &zeit; # Zeit 'erneuern' + if ($method eq "j") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } elsif ($method eq "ju") { + unlink("data/online/rooms/$oldroom/$alias"); + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>"); + $room = $newroom; + &post("<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>"); + &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>"); + } + # Sicherheitshalber Alias erneuert entf. + unlink("data/online/rooms/$oldroom/$alias"); + &rm_rstat($oldroom,$alias); + &rm_rooms; +} + +sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat + my ($r_alias,$r_room) = @_; + $r_besetzer = "false"; + &read_file("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"); + } +}
\ No newline at end of file diff --git a/0.2.6a/main2.pl b/0.2.6a/main2.pl new file mode 100644 index 0000000..76f161b --- /dev/null +++ b/0.2.6a/main2.pl @@ -0,0 +1,571 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### + +if ($var eq "list_alias_html") { + &list_alias_html; +} elsif ($var eq "alias_html") { + &alias_html; +} elsif ($var eq "edit_profile_html") { + &edit_html("edit_profile_html"); +} elsif ($var eq "edit_options_html") { + &edit_html("edit_options_html"); +} elsif ($var eq "gb_html") { + &gb_html; +} elsif ($var eq "post_gb") { + &post_gb; +} elsif ($var eq "rm_gb_alias") { + &rm_gb; +} elsif ($var eq "edit_profile") { + &edit("edit_profile"); +} elsif ($var eq "edit_options") { + &edit("edit_options"); +} 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="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 + &secure_checkip($alias); + &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"; + } + if (-e "$tmpath") { + &read_file("$tmpath"); + my @datei = <DATEI>; + close DATEI; + pop(@datei) if ($#datei > 99); + my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + @newdatei = ("@newdatei", "@datei"); + &write_file_new("$tmpath"); + print DATEI @newdatei; + close DATEI; + } else { + &write_file_new("$tmpath"); + print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n"; + close DATEI; + } + 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=$alias\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp\" target=\"_new\">Dein Profil</a> gehängt ... </font>"); + &alias_html; + exit; + } +} + +sub rm_gb { # Gästebucheintrag entfernen + &secure_checkip($alias); + $tmp = $alias; + &read_file("data/user/gbooks/$alias"); + my @gbfile = <DATEI>; + close DATEI; + my @newgbfile = (); + for($i=0; $i <= $#gbfile; $i++) { + push(@newgbfile,$gbfile[$i]) if ($i != $id); + } + &write_file_new("data/user/gbooks/$alias"); + print DATEI @newgbfile; + close DATEI; + &alias_html("rm_ok"); +} + +sub list_alias_html { # Liste aller Benutzer + &start_html("Alle Benutzer"); + &list_dir("data/user/options"); + my @liste = sort(@dir); + my $nr = $#dir-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=$_" }, + "$_"), + " "; + } + } +print <<END; + </div> +</body> +</html> +END +} + +sub alias_html { # Anzeigen eines Benutzerprofils + my $message = $_[0]; + local $counter = undef; + &read_file("data/user/counts/$tmp"); + $counter = <DATEI>; + close DATEI; + $counter++; + &write_file_new("data/user/counts/$tmp"); + print DATEI $counter; + close DATEI; + &start_html($tmp); +print <<END; +<div> + <a href="htdocs.pl?var=werda_html&alias=$alias">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 +} + &read_file("data/user/profiles/$tmp"); + @data = <DATEI>; + close DATEI; +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="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"> +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) = @_; + &secure_checkip($alias); + &start_html("Benutzerprofil ändern"); + if ($method eq "edit_options_html") { + &read_file("data/user/options/$alias"); + } elsif ($method eq "edit_profile_html") { + &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol","input"); + open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol","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 auf <a href="push.pl?alias=$alias&room=$room">Weiterchatten</a> klicken. +</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; +<form action="main2.pl"> + <input type="hidden" name="alias" value="$alias"> + <input type="hidden" name="var" value="edit_options"> + <div> + Dein Passwort + <font color=ffa500> + (Gut merken !!) + </font> + <br> + <input type="password" name="id" value="$data[0]"> + </div> + <br> + <div> + Geb hier das Passwort erneuert ein: + <br> + <input type="password" name="tmp" value="$data[0]"> + </div> + <br> + <div> + "Deine Farbe (Farbe Deines Nicks): + <br> + <select NAME="col" size="1"> + <option selected value="$col">($data[1])</option> + <option value="0000FF">Blau (1)</option> + <option value="008000">Grün</option> + <option value="000000">Schwarz</option> + <option value="808000">Oliv</option> + <option value="000080">Marineblau</option> + <option value="800080">Purpur</option> + <option value="808080">Braun</option> + <option value="FF00FF">Fuchsia</option> + <option value="008080">Stahlblau</option> + <option value="333333">Mittelschwarz</option> + <option value="003399">BärBlau</option> + <option value="0066CC">Blau (2)</option> + <option value="009933">Grün</option> + <option value="006666">Oliv</option> + <option value="FF0000">VollRot</option> + <option value="CC0000">RostRot</option> + <option value="990099">Lila</option> + <option value="FF00FF">Pink</option> + <option value="FF9900">Orange</option> + <option value="CC6600">Ocker</option> + <option value="996600">Braun</option> + <option value="666666">Grau</option> + <option value="0A6307">Dunkelgrün</option> + <option value="9C1B7C">Dunkellila</option> + <option value="3D0DB9">Dunkelblau</option> + <option value="8FA5ED">Hellblau</option> + <option value="FFFF00">Gelb</option> + <option value="3D4863">?????</option> + </select> + </div> + <br> + <div> + Deine zweite Farbe (Farbe Deiner Nachrichten): + <br> + <select NAME="secol" size="1"> + <option selected value="$col">($data[2])</option> + <option value="0000FF">Blau (1)</option> + <option value="008000">Grün</option> + <option value="000000">Schwarz</option> + <option value="808000">Oliv</option> + <option value="000080">Marineblau</option> + <option value="800080">Purpur</option> + <option value="808080">Braun</option> + <option value="FF00FF">Fuchsia</option> + <option value="008080">Stahlblau</option> + <option value="333333">Mittelschwarz</option> + <option value="003399">BärBlau</option> + <option value="0066CC">Blau (2)</option> + <option value="009933">Grün</option> + <option value="006666">Oliv</option> + <option value="FF0000">VollRot</option> + <option value="CC0000">RostRot</option> + <option value="990099">Lila</option> + <option value="FF00FF">Pink</option> + <option value="FF9900">Orange</option> + <option value="CC6600">Ocker</option> + <option value="996600">Braun</option> + <option value="666666">Grau</option> + <option value="0A6307">Dunkelgrün</option> + <option value="9C1B7C">Dunkellila</option> + <option value="3D0DB9">Dunkelblau</option> + <option value="8FA5ED">Hellblau</option> + <option value="FFFF00">Gelb</option> + <option value="3D4863">?????</option> + </select> + </div> + <br> +END + } 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="alias" value="$alias"> + <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="submit" value="Daten ändern ..."> + </font> + </form> +</body> +</html> +END +} + + +sub edit { # Benutzerprofil od. Chat-Optionen abspeichern + &secure_checkip($alias); + my $method = $_[0]; + if ($method eq "edit_profile") { + &write_file_new("data/user/profiles/$alias"); + print DATEI $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 DATEI; + &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; + } + &secure_checkip($alias); + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n".$col."\n".$secol; + close DATEI; + &edit_html("edit_options_html","edit_options_ok"); + } +} diff --git a/0.2.6a/online.pl b/0.2.6a/online.pl new file mode 100644 index 0000000..cdc0d43 --- /dev/null +++ b/0.2.6a/online.pl @@ -0,0 +1,56 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +&secure_checkip($alias); +&start_html("Online","online"); +&online($alias,$room); +&list_dir("data/online/rooms/".$room); +print + $q->div( "$room:" ), + "<font size=1 color=ffffef face=arial>"; + foreach $online (@dir) { + if (-f "data/online/rooms/$room/$online") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$online", + -target=>"$online" }, "$online"), $q->br; + } + } +print + "</font>", + $q->end_html; + +sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern + my ($alias,$room) = @_; + &write_file_new("data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-e "data/online/rooms/$room") { # Falls Raum nicht existiert anlegen + } else { + &write_file_new("data/online/rstat/$room"); # Raumbesetzerstatus setzen + print DATEI "0\n\n$alias\n"; + close DATEI; + mkdir "data/online/rooms/$room", 0777; + } + &write_file_new("data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen + my $provetime = <DATEI>; + close DATEI; + if ($provetime < (time - 30)) { + &write_file_new("data/online/prove"); + print DATEI time; + close DATEI; + &rm_alias("data/online/users"); + &rm_rooms; + } +} diff --git a/0.2.6a/push.pl b/0.2.6a/push.pl new file mode 100644 index 0000000..fc998c0 --- /dev/null +++ b/0.2.6a/push.pl @@ -0,0 +1,105 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+CGI->compile(':all');
+$q = new CGI;
+
+$| = 1; # Cache von Perl ausschalten
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkip($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title - Created & Copyright by Paul C. Bütow $tmp\n");
+
+if ($var eq "push_logs_html") {
+ $msgfile = $tmp;
+ print "<hr><font size=2 color=ffffff face=arial>";
+} elsif ($var eq "clear_screen") {
+ if (-f "data/user/memos/$alias") { # Nach Memonachrichten checken!
+ print "\n<br>";
+ &read_file("data/user/memos/$alias");
+ my $memos = <DATEI>;
+ close DATEI;
+ print $memos;
+ unlink("data/user/memos/$alias");
+ }
+ $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+} else {
+ print $q->br;
+ $msgfile = "data/msgs/$alias";
+}
+
+open (MSGFILE, $msgfile);
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) { # Nach 15 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.2.6a/setup.sh b/0.2.6a/setup.sh new file mode 100644 index 0000000..d076ded --- /dev/null +++ b/0.2.6a/setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +mkdir 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/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 * +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.jpg ../../htdocs/yChat/ +echo +echo yChat Setup beendet ... +echo Created and copyrighted by Paul C. Bütow aka Snooper +echo + diff --git a/0.2.6a/yBanner.gif b/0.2.6a/yBanner.gif Binary files differnew file mode 100644 index 0000000..e4b691e --- /dev/null +++ b/0.2.6a/yBanner.gif diff --git a/0.2.6a/yBanner2.gif b/0.2.6a/yBanner2.gif Binary files differnew file mode 100644 index 0000000..0e9684e --- /dev/null +++ b/0.2.6a/yBanner2.gif diff --git a/0.2.6a/yChat.jpg b/0.2.6a/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.2.6a/yChat.jpg diff --git a/0.4.0a/INSTALL.txt b/0.4.0a/INSTALL.txt new file mode 100644 index 0000000..14b5d0a --- /dev/null +++ b/0.4.0a/INSTALL.txt @@ -0,0 +1,107 @@ +#############################################################################
+## yChat.de Version 0.4.0 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+INSTALL.txt => Dieses Dokument
+help.sno => Datei beinhaltet alle Chatbefehle
+
+Folgende Verzeichnisse müssen erstellt werden (chmod 777 sollte
+funktionieren):
+
+- Hier befinden sich alle für den Chat notwenidgen Daten:
+ ./cgi-bin/yChat/data/*
+
+- Hier befinden sich alle Logdateien, die vom Chat erstellt werden:
+ ./cgi-bin/yChat/data/logs/*
+
+- Hier befinden sich die Message-Dateien der eingelogten Benutzer:
+ ./cgi-bin/yChat/data/msgs/*
+
+- Hier befinden sich alle Daten der registrierten Benutzer:
+ ./cgi-bin/yChat/data/user/*
+
+- Hier wird abgespeichert, wie oft ein Benutzerprofil insgesant schon
+ aufgerufen wurde 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 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/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+ yBanner.gif => 400x40 yChat-Banner
+ yBanner2.gif => 88x31 yChat-Banner
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper
\ No newline at end of file diff --git a/0.4.0a/LIESMICH.txt b/0.4.0a/LIESMICH.txt new file mode 100644 index 0000000..97c7f1b --- /dev/null +++ b/0.4.0a/LIESMICH.txt @@ -0,0 +1,45 @@ +#############################################################################
+## yChat.de Version 0.4.0 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.install.yChat.de => Installationsdokumentation
+ www.liesmich.yChat.de => Allgemeine Bedingungen usw.
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript zum testen
+
+Vielen Dank an:
+
+ - Andreas Buchwald für die Programmierung des "Nach-UntenScroll-JavaScripts"
+ (www.anklepper.de).
+
+ - Michi aka Snoopy für die Erstellung und Anregung der Farbtabelle
+ (www.berlin-singeltreff.de).
+
+ - Peacemaker für die Erstellung des yChat-Logos
+ (www.peaceplace.de).
diff --git a/0.4.0a/TODO.txt b/0.4.0a/TODO.txt new file mode 100644 index 0000000..59d9e3e --- /dev/null +++ b/0.4.0a/TODO.txt @@ -0,0 +1,24 @@ +Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - Löschung aller Chatter, die sich seit 60 Tagen nicht mehr
+ eingelogt haben.
+
+ - IP-Adressen ver-/entbannen.
+
+ - E-Mail zusendung bei verlorenem Passwort.
+
+ - Eine Top 20 (Onlinezeit) der Chatter
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.4.0a/UPDATES.txt b/0.4.0a/UPDATES.txt new file mode 100644 index 0000000..d5e2503 --- /dev/null +++ b/0.4.0a/UPDATES.txt @@ -0,0 +1,102 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.2.6 auf 0.4.0
+ - 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 vom 17.12.2k
+ - Das Eingabeframe reloaded sich nicht mehr nach jedem Posting.
+ Vielen Dank an Truhe aka Dave und Klepper aka Andreas Buchwald!
+ Bei den Chatbefehlen /col /away /j und /ju muß sich das
+ Eingabeframe weiterhin reloaden.
+ - Der Befehl // wurde entfernt. Dieser war nicht mehr erforderlich.
+ weil Nachrichten werden nur noch sehr selten verschluckt. Dieser
+ Chatbefehl postete die letzte Nachricht nocheinmal.
+ - Neuer Befehl: mit "/memo Alias hier der Text" hinterläßt man
+ Alias eine Memo. Logt sich Alias in den Chat ein, dann erhält
+ er diese sofort. Dafür wurde das Verzeichnis ".data/user/memos/"
+ angelegt.
+ - Programmcode wurde ein wenig optimiert.
+ - Das Design wurde ein wenig geändert.
+ - Beseitigung diverser Bugs.
+
+Update von 0.2.4 auf 0.2.5 vom 15.12.2k
+ - Derjenige, der einen Raum zuerst betritt, hat Raumbesetzerrechte.
+ - Raumbesetzer, Wächter und Oberwächte können weitere Raumbesetzer
+ bestimmen. Diese können Raumbeseter auch wieder degradieren.
+ - Raumbesetzer, Wächter und Oberwächter können dem aktuellen Raum
+ auf/absperren und Themen geben. Wächter und Oberwächter können
+ abgesperrte Räume betreten.
+ - Das Verzeichnis ".data/htdocs" wurde entfernt. Die Datei help_html
+ heist nun help.sno und befindet sich im yChat-Hauptverzeichnis.
+ - Das Verzeichnis ".data/user/lastlogin" wurde hinzugefügt. Hier
+ wird beim erfolgreichen Einloggen ein "Timestamp" gesetzt. Später
+ sollen Oberwächter "veraltete" Benutzer entfernen können.
+ - Neuer Oberwächterbefehl: "/kill Alias" entfernt Alias ganz und gar
+ vom System. Oberwächter und Wächter können nicht entfernt werden.
+ - Perl-Cache wurde im gesamten System komplett deaktiviert ( Weniger
+ Ladezeiten der HTML-Dokumente ).
+ - Nur Nachrichten aus dem Raum "Cyberbar" werden gelogt.
+ Selbsterstellte Räume werden nichtmehr gelogt. Viele Logfunktionen
+ wurden entfernt (weniger Serverbalast).
+ - Beseitigung einiger kleinen Bugs.
+ - Unter "Optionen" im Chat wir die Farbe nun mit einem Drop-Down-Menü
+ ausgewählt ( Vielen dank an Michi aka Snoopy ).
+ - Auf der Startseite wird nun angezeigt wieviele Benutzer eingelogt
+ sind. Ist keiner eingelogt, dann wird das System "aufgeräumt". D.h.
+ Dateien die nicht mehr gebraucht werden und noch nicht gelöscht
+ wurden werden entfernt ( z.B. Nachrichtendateien der einzelnen
+ Chatter und die Dateien die die IP-Nummern der eingelogten Benutzer
+ beinhalteten usw.).
+ - Hunzufügung einer TODO-Liste. Hier sind mehrere Funktionen
+ vermerkt, die in späteren yChat-Versionen eingebaut werden sollen.
+ (www.todo.yChat.de oder TODO.txt).
+
+Update von 0.2.3 auf 0.2.4 - 30.11.2k
+ - Optimierung bzw. Verbesserung der Push-Routine push.pl.
+ - Server-Ping wurde von 2-Pings-per-Minute auf 4 erhöht.
+ - yChat-Banner wurde erstellt und ist unter
+ documents.yChat.de/yBanner.jpg vorzufinden.
+ - Unter der URL servers.yChat.de wurde eine Serverliste angelegt,
+ welche anzeigt wo yChat-Systeme laufen.
+ - Des weiteren wurden die URLs updates.yChat.de, install.yChat.de
+ und liesmich.yChat.de eingerichtet.
+ - Die Menüpunkte wurden zusammengefaßt, damit sie unter einer
+ Auflösung von 800x600 nur eine Zeile belegen.
+ - Einige Bugs wurden entfernt.
+
+Update von 0.2.2 auf 0.2.3 - 25.11.2k
+ - Smooth scrolling JavaScript ( Vielen Dank an Andreas Buchwald ).
+ - "IP#-Fehler" wurde so gut wie beseitigt.
+ - Aufrufe der einzelnen Benutzerprofile wird gezählt und angezeigt.
+ Diese werden in data/user/counts/* gespeichert.
+ - Automatische Einrichtung des Chats mit setup.sh und Telnet.
+ - Menüpunkt "Dein Profil" wurde entfernt da eigenes Profil auch
+ stets über die Onlineliste aufgerufen werden kann.
+
+Update von 0.2.1 auf 0.2.2 - 23.11.2k
+ - Einige Bugs wurden entfernt.
+ - Geschwindigkeit des Chats wurde optimiert.
+ - Eine Liste aller eingelogten Benutzer erscheint am Rand. Hierfür
+ wurde die Datei online.pl eingeführt. Sie aktuallisiert sich alle
+ 20 Sekunden.
+ - Die UPDATES.txt wurde eingeführt.
+
+Update von 0.2.0 auf 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden nun anders verwaltet.
+
+Update von Alpha XVIII auf 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ überarbeitet.
+ - Neue Versionsnumern wurden eingeführt.
\ No newline at end of file diff --git a/0.4.0a/bar.gif b/0.4.0a/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.4.0a/bar.gif diff --git a/0.4.0a/config.pm b/0.4.0a/config.pm new file mode 100644 index 0000000..52aa0f2 --- /dev/null +++ b/0.4.0a/config.pm @@ -0,0 +1,307 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmpid = $q->param("tmpid");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "21.12.2k";
+$version = "0.4.0a";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ body.online { background-color: 444444; background-image: none }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("$msg2post") if ($room eq "Cyberbar");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($msg2log) = @_;
+ &zeit;
+ &write_file("data/logs/$day.$month.$year");
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen!");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ unlink("data/msgs/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } elsif ($method ne "kick") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ }
+ &rm_rstat($room,$alias) if ($room ne undef);
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, dessen Timestamps älter als 60 Sekunden sind
+ my ($dir2rm,$rstatroom) = @_;
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ &rm_rstat($rstatroom,$_) if ($rstatroom ne undef);
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_",$_);
+ &list_dir("data/online/rooms/$_",2);
+ if ($#dir2 = 1) {
+ rmdir("data/online/rooms/$_");
+ }
+ }
+ }
+}
+
+sub rm_rstat { # Benutzer als Raumbesetzer austragen
+ my ($rstatroom,$r_alias) = @_;
+ &read_file("data/online/rstat/$rstatroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $newfile = $rstat[0].$rstat[1];
+ for ($i=2;$i<=$#rstat;$i++) {
+ $newfile = $newfile."\n".$rstat[$i] if ($rstat[$i] ne $r_alias."\n");
+ }
+ write_file_new("data/online/rstat/$rstatroom");
+ print DATEI $newfile;
+ close DATEI;
+}
+
+sub secure_removeid { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkid { # TmpID überprüfen
+ my ($alias2check) = @_;
+ &read_file("data/online/ident/$alias2check");
+ my @idfile = <DATEI>;
+ close DATEI;
+ if ($idfile[1] ne $tmpid) {
+ &error("Falsche TempID ! Du bist nicht befugt zu handeln !");
+ }
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = undef;
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten
\ No newline at end of file diff --git a/0.4.0a/help.sno b/0.4.0a/help.sno new file mode 100644 index 0000000..9b3170b --- /dev/null +++ b/0.4.0a/help.sno @@ -0,0 +1,56 @@ +<div>
+ Alle Chat-Befehle:
+</div>
+<hr>
+<table width=100% bgcolor=555555>
+<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>/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 Total-Chat-Zeit von <font color=red>Alias</font> in Minuten</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 jedeglich 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>/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=green>OW</font></div></td><td><div>/ban</div></td><td><div>Zeigt alle verbannten Benutzer an</div></td></tr>
+<tr><td><div><font color=green>OW</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=green>OW</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=green>OW</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=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.0a/htdocs.pl b/0.4.0a/htdocs.pl new file mode 100644 index 0000000..c92b496 --- /dev/null +++ b/0.4.0a/htdocs.pl @@ -0,0 +1,195 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "help_html") {
+ &printfile("help.sno","Alle Chatbefehle");
+} elsif ($var eq "menu_html") {
+ &menu_html;
+} elsif ($var eq "werda_html") {
+ &werda_html;
+} elsif ($var eq "logs_html") {
+ &logs_html;
+} elsif ($var eq "view_logs_html") {
+ &secure_checkid($alias);
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ &printfile($tmp,$tmp,"log");
+ }
+} elsif ($var eq "superuser_html") {
+ &secure_checkid($alias);
+ &superuser_html;
+} else {
+ print
+ $q->start_html(-bgcolor=>"000000"),
+ $q->end_html;
+}
+
+sub menu_html {
+ if ($tmp eq "quit") {
+ print
+ $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" );
+ sleep 1;
+ &remove_online($alias);
+ &secure_removeid($alias);
+ unlink("data/msgs/$alias");
+ }
+ &start_html("Menü","menu");
+print <<END;
+ <center>
+ <div>
+ [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp&tmpid=$tmpid" target="werda">Wer ist da?</a>]
+ [<a href="main2.pl?var=edit_profile_html&alias=$alias&tmpid=$tmpid" target="ProfilAendern">Profil ändern</a>]
+ [<a href="main2.pl?var=edit_options_html&alias=$alias&tmpid=$tmpid" target="main">Optionen</a>]
+ [<a href="main2.pl?var=list_alias_html&alias=$alias&tmpid=$tmpid" target="Benutzerliste">Benutzer</a>]
+ [<a href="htdocs.pl?var=help_html&tmpid=$tmpid" target="Befehle">Befehle</a>]
+ [<a href="main2.pl?var=gb_html&alias=$alias&tmpid=$tmpid" target="Board">Board</a>]
+ [<a href="htdocs.pl?var=superuser_html&alias=$alias&tmpid=$tmpid" target="Hirachie">Superuser</a>]
+ [<a href="htdocs.pl?var=logs_html&alias=$alias&tmpid=$tmpid" target="Logdateien">Logs</a>]
+ [<a href="push.pl?alias=$alias&room=$room&var=clear_screen&tmpid=$tmpid" target="main">Weiterchatten</a>]
+ [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias&tmpid=$tmpid">Verlassen</a>]
+ </div>
+ </center>
+</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
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ my $room = $_;
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ &list_dir("data/online/rooms/$room",2);
+ local $nr = $#dir2-1;
+ print $q->b( $_ ),
+ " $door ($nr) Raumthema: $rstat[1]",
+ $q->br;
+ foreach(@dir2) {
+ if ($_ ne ".." && $_ ne ".") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_&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
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ),
+ $q->br;
+ &list_dir("data/logs");
+ my @sortedir = sort(@dir);
+ foreach(@sortedir) {
+ if (-f "data/logs/$_") {
+ print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_&tmpid=$tmpid",
+ -target=>"_new" },
+ "$_" ),
+ " ";
+ }
+ }
+ } else {
+ print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ",
+ "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde." ),
+ $q->hr;
+ &printfile("data/htdocs/logs_html");
+ }
+ print
+ $q->end_html;
+}
+
+sub superuser_html { # Zeigt an, wer Superuser ist
+ &start_html("Superuser");
+ print "<div>Hallo $alias. Du bist als ";
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ print
+ $q->b( "Oberwächter" ),
+ " (OW) eingetragen.</div>",
+ $q->hr;
+ } elsif ( $hirachie 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&tmpid=$tmpid">Chat-Befehle</a>"
+ dokumentiert.
+</div>
+</body>
+</html>
+END
+}
\ No newline at end of file diff --git a/0.4.0a/index.pl b/0.4.0a/index.pl new file mode 100644 index 0000000..7dc9af2 --- /dev/null +++ b/0.4.0a/index.pl @@ -0,0 +1,373 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = <DATEI>; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&list_dir("data/online/users"); +my $logtin = $#dir-1; +&start_html("Created by Paul C. Bütow 2k"); +print <<END; + <center> + <table width=400> + <tr> + <td> + <b> + <div> + $title - ( <a href="http://servers.yChat.de">yChat-Servers</a> ) + <img src="$gfxpath/yChat.jpg"> + </div> + </b> +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 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="id" value="$id"> + </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> + <div> + yChat befindet sich momentan noch in der Entwicklungsphase ! + <br> + Fragen gehen an Paul Bütow ( + <a href="mailto:paul\@buetow.oxg.de"> + paul\@buetow.oxg.de + </a> + ) :-) + <br> + <br> + Diese Seite wurde schon $counter mal aufgerufen. Es sind z.Z. $logtin Benutzer online. + </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. +my $reload = $_[0]; +&start_html("Registration"); +print <<END; + <center> + <table width=400> + <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="id" value="$id"> + </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"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = <DATEI>; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = <DATEI>; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + $tmpid = time; + &write_file_new("data/online/ident/$alias"); + print DATEI $ENV{'REMOTE_ADDR'}."\n".$tmpid; + close DATEI; + &read_file("data/user/lastlogin/$alias"); + my @lastlogin = <DATEI>; + close DATEI; + &write_file_new("data/user/lastlogin/$alias"); + print DATEI time; + close DATEI; + &frameset_html; + exit; + } else { + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("<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 rows="50,*,55,0"> + <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid" scrolling="no"> + <frameset border=0 frameborder=0 framespacing=0 cols="150,*"> + <frame name="online" src="online.pl?room=$room&alias=$alias&tmpid=$tmpid"> + <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen&tmpid=$tmpid"> + </frameset> + <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid" scrolling="no"> + <frame name="reload" src="htdocs.pl" scrolling="no"> +</frameset> +</html> +END +} diff --git a/0.4.0a/main.pl b/0.4.0a/main.pl new file mode 100644 index 0000000..de20d7c --- /dev/null +++ b/0.4.0a/main.pl @@ -0,0 +1,739 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "input_html") {
+ &secure_checkid($alias);
+ &input_html;
+#} elsif ($var eq "reload_html") {
+# &reload_html;
+} elsif ($var eq "post_msg") {
+ &post_msg;
+#} elsif ($var eq "change_room") {
+# &change_room;
+} else {
+ &error("Parameter fehlt");
+}
+
+sub input_html { # Eingabemaske für den Chat.
+ if ($tmp eq "login") {
+ &remove_rooms;
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>");
+ }
+ my $whisper = @_;
+ $whisper = $q->param('whisper') if ($whisper == 0);
+print <<END;
+<html>
+ <head>
+ <script language="JavaScript">
+ function delout()
+ {
+ document.inf.submit();
+ document.inf.msg.focus();
+ document.inf.msg.select();
+ return false;
+ }
+ </script>
+ </head>
+<body bgcolor=000000>
+ <form name="inf" target="reload" action="main.pl" method="GET" onsubmit="return delout()">
+END
+ print <<END;
+ <input type="hidden" name="var" value="post_msg">
+ <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="id" value="$whisper">
+ <input type="hidden" name="tmp" value="$tmp">
+ <input size="80" name="msg">
+ <input type="submit" value="Texten">
+ </form>
+</body>
+</html>
+END
+}
+
+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 "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ } elsif ($action eq "change_colors") {
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "away") {
+ print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&tmp=noaway&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "whisper") {
+ print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "quit") {
+ print "open(\"index.pl?tmp=quit\",\"_top\");";
+ }
+ print "</script></head><body bgcolor=000000>";
+ print
+ $q->end_html;
+}
+
+sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde.
+ &secure_checkid($alias);
+ if ($tmp eq "noaway") {
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>");
+ &post_prv($alias,"<script language=\"JavaScript\">open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");</script>");
+ }
+ $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren
+ if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht
+ $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>";
+ &reload_html($id,$tmp); # -> Action=none, Whisper=$id, $tmp =? noaway
+ &post($msg);
+ } else {
+ &cmd($msg);
+ }
+}
+
+sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können.
+ $_[0] = $_[0]." ";
+ $_[0] = substr($_[0], 1, length($_[0])-1);
+ my @cmd = split(/ /, $_[0]);
+ my $cmd = substr($_[0],0 , index($_[0], " "));
+ my ($whisper,$action) = ($id);
+#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -<
+#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -<
+ if ($cmd eq "about") {
+ &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>");
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde
+ my $away_msg = "";
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$away_msg</font> ) ...</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($whisper);
+ exit;
+#############>- FARBEN WECHSELN -<
+ } elsif ($cmd eq "col") {
+ $col = $cmd[1];
+ my $tmpsecol = $cmd[2];
+ if ($tmpsecol eq "") {
+ $secol = $col
+ } else {
+ $secol = $tmpsecol;
+ }
+ &read_file("data/user/options/$alias");
+ my @pro = <DATEI>;
+ close DATEI;
+ &write_file_new("data/user/options/$alias");
+ print DATEI $pro[0]."".$col."\n".$secol;
+ close DATEI;
+ &zeit;
+ &post("<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($whisper);
+ exit;
+#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
+ } elsif ($cmd eq "j") {
+ &change_room("j",$cmd[1],$room);
+ &reload_html($whisper,"change_room");
+ exit;
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ if ($cmd eq "m") {
+ &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>");
+ } else {
+ &post("<i><font color=$col>$alias $me_msg</font></i>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- MEMO SCHREIBEN -<
+ } elsif ($cmd eq "memo") {
+ my $alias2memo = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if(-f "data/user/options/$alias2memo") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $memo_msg = $memo_msg." ".$cmd[$i];
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ &write_file("data/user/memos/$alias2memo");
+ print DATEI "<font size=2 color=ffffff>(<font color=red>$day.$month. - $hours:$min:$sec</font>) $alias hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>";
+ close DATEI;
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>");
+ &reload_html($whisper);
+ exit;
+#############>- FLÜSTERN ( Auch mit '/' ) -<
+ } elsif ($cmd eq "msg" || $cmd eq "") {
+ my ($alias2post,$msg2post) = ($cmd[1],"");
+ if ($cmd eq "msg") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $action = "whisper";
+ } else {
+ $alias2post = $id;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ }
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ if ($_ eq $alias2post) {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &write_file("data/msgs/$alias");
+ print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &reload_html($alias2post,$action);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>");
+#############>- TOTALONLINEZEIT VON ALIAS ANZEIGEN -<
+ } elsif ($cmd eq "online") {
+ my $alias2prove= $cmd[1];
+ if (-f "data/user/counts/$alias2prove.online") {
+ &read_file("data/user/counts/$alias2prove.online");
+ my $online = <DATEI>;
+ close DATEI;
+ 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>hat z.Z. keine Statistiken !</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &reload_html($whisper,"quit");
+ sleep 2;
+ &remove_online($alias,$room);
+ &secure_removeid($alias);
+ exit;
+#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -<
+ } elsif ($cmd eq "rmgb") {
+ unlink("data/user/gbooks/$alias");
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias löscht sein gesamtes Gästebuch ...</font></i>",$_);
+ &reload_html($whisper);
+ exit;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my ($msg2scream,$msg2post);
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ $msg2post = "\U$msg2scream";
+ &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>");
+ &reload_html($whisper);
+ exit;
+#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGELOGT HAT -<
+ } elsif ($cmd eq "seen") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if (-f "data/user/lastlogin/$alias2prove") {
+ &read_file("data/user/lastlogin/$alias2prove");
+ my $lastlogin = <DATEI>;
+ close DATEI;
+ my $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>");
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2prove <font color=ffffff> existiert nicht in der Benutzerdatenbank !</font></font>");
+ &reload_html($whisper);
+ exit;
+#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -<
+} elsif ($cmd eq "w") {
+ &list_dir("data/online/rooms/$room");
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ my ($is,$nr) = ("t",0);
+ foreach(@dir) {
+ if (-f "data/online/rooms/$room/$_") {
+ $personen = $personen." ".$_;
+ $nr++;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>$room $door ($nr) [".$rstat[1]."] : <font color=ffa500>$personen</font></font>");
+ &reload_html($whisper);
+ exit;
+ #############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -<
+ } elsif ($cmd eq "wc" || $cmd eq "wc/") {
+ $raum = $cmd[1];
+ if ($raum eq "" && $cmd eq "wc") {
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/users/$_");
+ }
+ my $nr = ($#dir-1);
+ my ($nrs,$is) = ("","ist");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "sind";
+ }
+ &post_prv("$alias","<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;
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ &list_dir("data/online/rooms/$_",2);
+ &read_file("data/online/rstat/$_");
+ my @rstat = <DATEI>;
+ close DATEI;
+ 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><td><font size=2 color=ffffff>";
+ 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;
+ &list_dir("data/online/rooms/$raum");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_");
+ }
+ my ($nr,$is) = (($#dir-1),"t");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "n";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -<
+ } elsif ($cmd eq "wj" || $cmd eq "ju") {
+ my $alias2search = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum");
+ foreach $user (@dir2) {
+ if (-f "data/online/rooms/$raum/$user") {
+ if ($user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<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($whisper);
+ exit;
+#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -<
+ } elsif ($cmd eq "l") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $lock = "0\n";
+ &zeit;
+ if ($room eq "Cyberbar") {
+ &post("<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("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum ab ...</font></i>");
+ } else {
+ &post("<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];
+ }
+ write_file_new("data/online/rstat/$room");
+ print DATEI $lock;
+ close DATEI;
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- RAUMBESETZER ERNENNEN -<
+ } elsif ($cmd eq "su") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2su = $cmd[1];
+ &list_dir("data/online/rooms/$room");
+ foreach(@dir) {
+ if ($_ eq $alias2su) {
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ &hirachie($alias2su);
+ &prove_besetzer($alias2su,$room);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ &reload_html($whisper);
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>");
+ exit;
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias ernennt \"$alias2su\" zum Raumbesetzer ...</font></i>");
+ &write_file("data/online/rstat/$room");
+ print DATEI $alias2su."\n";
+ close DATEI;
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- RAUMBESETZER ENTNENNEN -<
+ } elsif ($cmd eq "rsu") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2rsu = $cmd[1];
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ &prove_besetzer($alias2rsu,$room);
+ if ($r_besetzer eq "true") {
+ &zeit;
+ &post("<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");
+ }
+ &write_file_new("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($whisper);
+ exit;
+#############>- RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "t") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $theme;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $theme = $theme." ".$cmd[$i];
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias gibt dem Raum das Thema <font color=red>( $theme )</font> ...</font></i>");
+ $theme = $r_stat[0].$theme."\n";
+ for ($i=2;$i<=$#r_stat;$i++) {
+ $theme = $theme.$r_stat[$i];
+ }
+ write_file_new("data/online/rstat/$room");
+ print DATEI $theme;
+ close DATEI;
+ }
+ &reload_html($whisper);
+ exit;
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN BZW. ENTBANNEN -<
+ } elsif ($cmd eq "ban" || $cmd eq "rban") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my ($alias2handle,$registriert) = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ $registriert = "true" if ($_ eq $alias2handle);
+ }
+ if ($registriert ne "true") {
+ if ($cmd eq "ban") {
+ if ($alias2handle ne "") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>");
+ } else {
+ &read_file("data/ban");
+ my @banned = <DATEI>;
+ my ($benutzer);
+ my $nr = $#banned+1;
+ close DATEI;
+ foreach(@banned) {
+ $benutzer = $benutzer." ".$_;
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+ }
+ &read_file("data/ban");
+ my @banlist = <DATEI>;
+ close DATEI;
+ foreach(@banlist) {
+ if ($_ eq "$alias2handle\n") {
+ if ($cmd eq "ban") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>");
+ } else {
+ my $banned = "false";
+ foreach(@banlist) {
+ $banned = "true" if ($_ eq "$alias2handle\n");
+ }
+ if ($banned eq "true") {
+ my @newbanlist;
+ foreach(@banlist) {
+ push @newbanlist,$_ if ($_ ne "$alias2handle\n");
+ }
+ &write_file_new("data/ban");
+ print DATEI @newbanlist;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>");
+ }
+ }
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ if ($cmd eq "ban") {
+ &hirachie($alias2handle);
+ if ($hirachie ne "ow") {
+ &write_file("data/ban");
+ print DATEI "$alias2handle\n";
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>");
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>");
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "ip") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/online/ident");
+ foreach(@dir) {
+ if ($_ eq $alias2prove) {
+ &read_file("data/online/ident/$_");
+ local $ipnr = <DATEI>;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2);
+ foreach $chatter (@dir2) {
+ if ($chatter eq $alias2kick) {
+ &hirachie($alias2kick);
+ if ($hirachie 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 ($hirachie 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 $_);
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_);
+ &remove_online($alias2kick,$_,"kick");
+ &secure_removeid($alias2kick);
+ }
+ &reload_html($whisper);
+ 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($whisper);
+ exit;
+#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
+ } elsif ($cmd eq "kill") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2kill = $cmd[1];
+ &hirachie($alias2kill);
+ if ($hirachie 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 ($hirachie 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 {
+ unlink("data/user/options/$alias2kill");
+ unlink("data/user/profiles/$alias2kill");
+ unlink("data/user/gbooks/$alias2kill");
+ unlink("data/user/counts/$alias2kill");
+ unlink("data/user/lastlogin/$alias2kill");
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias killt \"$alias2kill\" ganz und gar aus dem System ...</font></i>");
+ }
+ }
+ &reload_html($whisper);
+ exit;
+ #############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -<
+ } elsif ($cmd eq "sys") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $sys_msg = $sys_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post_all("<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>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -<
+ } elsif ($cmd eq "wa" || $cmd eq "rwa") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ &zeit;
+ my $alias2handle = $cmd[1];
+ if ($cmd eq "wa") {
+ my $anerkennen = "false";
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if ($_ eq $alias2handle) {
+ $anerkennen = "true";
+ }
+ }
+ if ($anerkennen eq "true") {
+ &hirachie($alias2handle);
+ if ($hirachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>");
+ } elsif ($hirachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>");
+ } else {
+ &write_file("data/wa");
+ print DATEI $alias2handle."\n";
+ close DATEI;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>");
+ }
+ } else {
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ }
+ } elsif ($cmd eq "rwa") {
+ &read_file("data/wa");
+ my @wafile = <DATEI>;
+ close DATEI;
+ my $aberkennen = "false";
+ foreach(@wafile) {
+ if ($_ ne "$alias2handle\n") {
+ push @newafile,$_;
+ } else {
+ $aberkennen = "true";
+ }
+ }
+ &write_file_new("data/wa");
+ print DATEI @newafile;
+ close DATEI;
+ if ($aberkennen eq "true") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>");
+ } else {
+ &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>");
+ }
+ }
+ }
+#############>- ENDE DER CHATBEFEHLE -<
+}
+&reload_html($whisper,$action);
+}
+
+sub change_room { # Den Chat-Raum wechseln
+ my ($method,$newroom,$oldroom,$alias2follow) = @_;
+ # Überprüfen, ob Alias Raum betreten darf
+ &read_file("data/online/rstat/$newroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ if ($rstat[0] eq "1\n") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie eq "ow") {
+ } else {
+ &post_prv("$alias","<font size=2 color=ffffff>Der Raum \"<font color=ffa500>$newroom</font>\" ist leider abgesperrt!</font>");
+ &reload_html($id,$action);
+ exit;
+ }
+ }
+ $room = $oldroom;
+ &zeit; # Zeit 'erneuern'
+ if ($method eq "j") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ } elsif ($method eq "ju") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<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>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ }
+ # Sicherheitshalber Alias erneuert entf.
+ unlink("data/online/rooms/$oldroom/$alias");
+ &rm_rstat($oldroom,$alias);
+ &rm_rooms;
+}
+
+sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat
+ my ($r_alias,$r_room) = @_;
+ $r_besetzer = "false";
+ &read_file("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");
+ }
+}
\ No newline at end of file diff --git a/0.4.0a/main2.pl b/0.4.0a/main2.pl new file mode 100644 index 0000000..881c776 --- /dev/null +++ b/0.4.0a/main2.pl @@ -0,0 +1,576 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+
+if ($var eq "list_alias_html") {
+ &list_alias_html;
+} elsif ($var eq "alias_html") {
+ &alias_html;
+} elsif ($var eq "edit_profile_html") {
+ &edit_html("edit_profile_html");
+} elsif ($var eq "edit_options_html") {
+ &edit_html("edit_options_html");
+} elsif ($var eq "gb_html") {
+ &secure_checkid($alias);
+ &gb_html;
+} elsif ($var eq "post_gb") {
+ &secure_checkid($alias);
+ &post_gb;
+} elsif ($var eq "edit_profile") {
+ &secure_checkid($alias);
+ &edit("edit_profile");
+} elsif ($var eq "edit_options") {
+ &secure_checkid($alias);
+ &edit("edit_options");
+} elsif ($var eq "rm_gb_alias") {
+ &secure_checkid($alias);
+ &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";
+ }
+ if (-e "$tmpath") {
+ &read_file("$tmpath");
+ my @datei = <DATEI>;
+ close DATEI;
+ pop(@datei) if ($#datei > 99);
+ my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ @newdatei = ("@newdatei", "@datei");
+ &write_file_new("$tmpath");
+ print DATEI @newdatei;
+ close DATEI;
+ } else {
+ &write_file_new("$tmpath");
+ print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ close DATEI;
+ }
+ 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
+ $tmp = $alias;
+ &read_file("data/user/gbooks/$alias");
+ my @gbfile = <DATEI>;
+ close DATEI;
+ my @newgbfile = ();
+ for($i=0; $i <= $#gbfile; $i++) {
+ push(@newgbfile,$gbfile[$i]) if ($i != $id);
+ }
+ &write_file_new("data/user/gbooks/$alias");
+ print DATEI @newgbfile;
+ close DATEI;
+ &alias_html("rm_ok");
+}
+
+sub list_alias_html { # Liste aller Benutzer
+ &start_html("Alle Benutzer");
+ &list_dir("data/user/options");
+ my @liste = sort(@dir);
+ my $nr = $#dir-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];
+ local $counter = undef;
+ &read_file("data/user/counts/$tmp");
+ $counter = <DATEI>;
+ close DATEI;
+ $counter++;
+ &write_file_new("data/user/counts/$tmp");
+ print DATEI $counter."\n".$counter[1];
+ close DATEI;
+ &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
+}
+ &read_file("data/user/profiles/$tmp");
+ @data = <DATEI>;
+ close DATEI;
+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">
+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") {
+ &read_file("data/user/options/$alias");
+ } elsif ($method eq "edit_profile_html") {
+ &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","input");
+ 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 auf <a href="push.pl?alias=$alias&room=$room&tmpid=$tmpid">Weiterchatten</a> klicken.
+</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;
+<form action="main2.pl">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <input type="hidden" name="var" value="edit_options">
+ <div>
+ Dein Passwort
+ <font color=ffa500>
+ (Gut merken !!)
+ </font>
+ <br>
+ <input type="password" name="id" value="$data[0]">
+ </div>
+ <br>
+ <div>
+ Geb hier das Passwort erneuert ein:
+ <br>
+ <input type="password" name="tmp" value="$data[0]">
+ </div>
+ <br>
+ <div>
+ "Deine Farbe (Farbe Deines Nicks):
+ <br>
+ <select NAME="col" size="1">
+ <option selected value="$col">($data[1])</option>
+ <option value="0000FF">Blau (1)</option>
+ <option value="008000">Grün</option>
+ <option value="000000">Schwarz</option>
+ <option value="808000">Oliv</option>
+ <option value="000080">Marineblau</option>
+ <option value="800080">Purpur</option>
+ <option value="808080">Braun</option>
+ <option value="FF00FF">Fuchsia</option>
+ <option value="008080">Stahlblau</option>
+ <option value="333333">Mittelschwarz</option>
+ <option value="003399">BärBlau</option>
+ <option value="0066CC">Blau (2)</option>
+ <option value="009933">Grün</option>
+ <option value="006666">Oliv</option>
+ <option value="FF0000">VollRot</option>
+ <option value="CC0000">RostRot</option>
+ <option value="990099">Lila</option>
+ <option value="FF00FF">Pink</option>
+ <option value="FF9900">Orange</option>
+ <option value="CC6600">Ocker</option>
+ <option value="996600">Braun</option>
+ <option value="666666">Grau</option>
+ <option value="0A6307">Dunkelgrün</option>
+ <option value="9C1B7C">Dunkellila</option>
+ <option value="3D0DB9">Dunkelblau</option>
+ <option value="8FA5ED">Hellblau</option>
+ <option value="FFFF00">Gelb</option>
+ <option value="3D4863">?????</option>
+ </select>
+ </div>
+ <br>
+ <div>
+ Deine zweite Farbe (Farbe Deiner Nachrichten):
+ <br>
+ <select NAME="secol" size="1">
+ <option selected value="$col">($data[2])</option>
+ <option value="0000FF">Blau (1)</option>
+ <option value="008000">Grün</option>
+ <option value="000000">Schwarz</option>
+ <option value="808000">Oliv</option>
+ <option value="000080">Marineblau</option>
+ <option value="800080">Purpur</option>
+ <option value="808080">Braun</option>
+ <option value="FF00FF">Fuchsia</option>
+ <option value="008080">Stahlblau</option>
+ <option value="333333">Mittelschwarz</option>
+ <option value="003399">BärBlau</option>
+ <option value="0066CC">Blau (2)</option>
+ <option value="009933">Grün</option>
+ <option value="006666">Oliv</option>
+ <option value="FF0000">VollRot</option>
+ <option value="CC0000">RostRot</option>
+ <option value="990099">Lila</option>
+ <option value="FF00FF">Pink</option>
+ <option value="FF9900">Orange</option>
+ <option value="CC6600">Ocker</option>
+ <option value="996600">Braun</option>
+ <option value="666666">Grau</option>
+ <option value="0A6307">Dunkelgrün</option>
+ <option value="9C1B7C">Dunkellila</option>
+ <option value="3D0DB9">Dunkelblau</option>
+ <option value="8FA5ED">Hellblau</option>
+ <option value="FFFF00">Gelb</option>
+ <option value="3D4863">?????</option>
+ </select>
+ </div>
+ <br>
+END
+ } 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="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <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="submit" value="Daten ändern ...">
+ </font>
+ </form>
+</body>
+</html>
+END
+}
+
+
+sub edit { # Benutzerprofil od. Chat-Optionen abspeichern
+ my $method = $_[0];
+ if ($method eq "edit_profile") {
+ &write_file_new("data/user/profiles/$alias");
+ print DATEI $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 DATEI;
+ &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;
+ }
+ &write_file_new("data/user/options/$alias");
+ print DATEI $id."\n".$col."\n".$secol;
+ close DATEI;
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
diff --git a/0.4.0a/online.pl b/0.4.0a/online.pl new file mode 100644 index 0000000..e8e9f40 --- /dev/null +++ b/0.4.0a/online.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +&secure_checkid($alias); + +# Onlinezeit zählen ! +&read_file("data/online/users/$alias"); + my $oldstamp = <DATEI>; +close DATEI; + if ($oldstamp > (time - 60)) { + &read_file("data/user/counts/$alias.online"); + my $online = <DATEI>; + close DATEI; + my $total = (time-$oldstamp+$online); + &write_file_new("data/user/counts/$alias.online"); + print DATEI $total; + close DATEI; + } +##### ENDE + +&start_html("Online","online"); +&online($alias,$room); +&list_dir("data/online/rooms/".$room); +print + $q->div( "$room:" ), + "<font size=1 color=ffffef face=arial>"; + foreach $online (@dir) { + 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) = @_; + &write_file_new("data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-e "data/online/rooms/$room") { # Falls Raum nicht existiert anlegen + } else { + &write_file_new("data/online/rstat/$room"); # Raumbesetzerstatus setzen + print DATEI "0\n\n$alias\n"; + close DATEI; + mkdir "data/online/rooms/$room", 0777; + } + &write_file_new("data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen + my $provetime = <DATEI>; + close DATEI; + if ($provetime < (time - 30)) { + &write_file_new("data/online/prove"); + print DATEI time; + close DATEI; + &rm_alias("data/online/users"); + &rm_rooms; + } +}
\ No newline at end of file diff --git a/0.4.0a/push.pl b/0.4.0a/push.pl new file mode 100644 index 0000000..5ae82c5 --- /dev/null +++ b/0.4.0a/push.pl @@ -0,0 +1,97 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+CGI->compile(':all');
+$q = new CGI;
+
+$| = 1; # Cache von Perl ausschalten
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkid($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title - Created & Copyright by Paul C. Bütow $tmp\n");
+
+ if (-f "data/user/memos/$alias") { # Nach Memonachrichten checken!
+ print "\n<br>";
+ &read_file("data/user/memos/$alias");
+ my $memos = <DATEI>;
+ close DATEI;
+ print $memos;
+ unlink("data/user/memos/$alias");
+ }
+ my $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+ print $q->br;
+ open (MSGFILE, $msgfile);
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) { # Nach 15 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen&tmpid=$tmpid\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.4.0a/setup.sh b/0.4.0a/setup.sh new file mode 100644 index 0000000..d076ded --- /dev/null +++ b/0.4.0a/setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +mkdir 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/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 * +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.jpg ../../htdocs/yChat/ +echo +echo yChat Setup beendet ... +echo Created and copyrighted by Paul C. Bütow aka Snooper +echo + diff --git a/0.4.0a/yBanner.gif b/0.4.0a/yBanner.gif Binary files differnew file mode 100644 index 0000000..e4b691e --- /dev/null +++ b/0.4.0a/yBanner.gif diff --git a/0.4.0a/yBanner2.gif b/0.4.0a/yBanner2.gif Binary files differnew file mode 100644 index 0000000..0e9684e --- /dev/null +++ b/0.4.0a/yBanner2.gif diff --git a/0.4.0a/yChat.jpg b/0.4.0a/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.4.0a/yChat.jpg diff --git a/0.4.1/INSTALL.txt b/0.4.1/INSTALL.txt new file mode 100644 index 0000000..31a302a --- /dev/null +++ b/0.4.1/INSTALL.txt @@ -0,0 +1,107 @@ +#############################################################################
+## yChat.de Version 0.4.0 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+INSTALL.txt => Dieses Dokument
+colors.txt => 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 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/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ yChat.gif => Das yChat-Logo auf der Startseite
+ yBanner.gif => 400x40 yChat-Banner
+ yBanner2.gif => 88x31 yChat-Banner
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper
\ No newline at end of file diff --git a/0.4.1/LIESMICH.txt b/0.4.1/LIESMICH.txt new file mode 100644 index 0000000..97c7f1b --- /dev/null +++ b/0.4.1/LIESMICH.txt @@ -0,0 +1,45 @@ +#############################################################################
+## yChat.de Version 0.4.0 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.install.yChat.de => Installationsdokumentation
+ www.liesmich.yChat.de => Allgemeine Bedingungen usw.
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript zum testen
+
+Vielen Dank an:
+
+ - Andreas Buchwald für die Programmierung des "Nach-UntenScroll-JavaScripts"
+ (www.anklepper.de).
+
+ - Michi aka Snoopy für die Erstellung und Anregung der Farbtabelle
+ (www.berlin-singeltreff.de).
+
+ - Peacemaker für die Erstellung des yChat-Logos
+ (www.peaceplace.de).
diff --git a/0.4.1/TODO.txt b/0.4.1/TODO.txt new file mode 100644 index 0000000..59d9e3e --- /dev/null +++ b/0.4.1/TODO.txt @@ -0,0 +1,24 @@ +Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - Löschung aller Chatter, die sich seit 60 Tagen nicht mehr
+ eingelogt haben.
+
+ - IP-Adressen ver-/entbannen.
+
+ - E-Mail zusendung bei verlorenem Passwort.
+
+ - Eine Top 20 (Onlinezeit) der Chatter
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.4.1/UPDATES.txt b/0.4.1/UPDATES.txt new file mode 100644 index 0000000..84336fc --- /dev/null +++ b/0.4.1/UPDATES.txt @@ -0,0 +1,111 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.4.0 auf 0.4.1 (22.12.2k)
+ - Design wurde geändert.
+ - Unter "Optionen" ist nun eine komplette Farbtabelle eingebaut.
+ Es wurde dafür die Seperate Datei "colors.txt" angelegt. Diese
+ enthält alle in den Chatoptionen zur verfügungstehenden Farben.
+ Vielen Dank an Dave aka Truhe :-)
+ - 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.1/bar.gif b/0.4.1/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.4.1/bar.gif diff --git a/0.4.1/colors.sno b/0.4.1/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.1/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.1/config.pm b/0.4.1/config.pm new file mode 100644 index 0000000..a2d3df6 --- /dev/null +++ b/0.4.1/config.pm @@ -0,0 +1,306 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmpid = $q->param("tmpid");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "22.12.2k";
+$version = "0.4.1";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.online { background-image: none }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+ input {background-color:000000;color:ffa500;font-weight:bold; font-family:arial}
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("$msg2post") if ($room eq "Cyberbar");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($msg2log) = @_;
+ &zeit;
+ &write_file("data/logs/$day.$month.$year");
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen!");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ unlink("data/msgs/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } elsif ($method ne "kick") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ }
+ &rm_rstat($room,$alias) if ($room ne undef);
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, dessen Timestamps älter als 60 Sekunden sind
+ my ($dir2rm,$rstatroom) = @_;
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ &rm_rstat($rstatroom,$_) if ($rstatroom ne undef);
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_",$_);
+ &list_dir("data/online/rooms/$_",2);
+ if ($#dir2 = 1) {
+ rmdir("data/online/rooms/$_");
+ }
+ }
+ }
+}
+
+sub rm_rstat { # Benutzer als Raumbesetzer austragen
+ my ($rstatroom,$r_alias) = @_;
+ &read_file("data/online/rstat/$rstatroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $newfile = $rstat[0].$rstat[1];
+ for ($i=2;$i<=$#rstat;$i++) {
+ $newfile = $newfile."\n".$rstat[$i] if ($rstat[$i] ne $r_alias."\n");
+ }
+ write_file_new("data/online/rstat/$rstatroom");
+ print DATEI $newfile;
+ close DATEI;
+}
+
+sub secure_removeid { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkid { # TmpID überprüfen
+ my ($alias2check) = @_;
+ &read_file("data/online/ident/$alias2check");
+ my @idfile = <DATEI>;
+ close DATEI;
+ if ($idfile[1] ne $tmpid) {
+ &error("Falsche TempID ! Du bist nicht befugt zu handeln !");
+ }
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = undef;
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten
\ No newline at end of file diff --git a/0.4.1/help.sno b/0.4.1/help.sno new file mode 100644 index 0000000..5779354 --- /dev/null +++ b/0.4.1/help.sno @@ -0,0 +1,55 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table width=100% bgcolor=555555> +<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>/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>/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 jedeglich 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=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.1/htdocs.pl b/0.4.1/htdocs.pl new file mode 100644 index 0000000..8ceafa6 --- /dev/null +++ b/0.4.1/htdocs.pl @@ -0,0 +1,195 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "help_html") {
+ &printfile("help.sno","Alle Chatbefehle");
+} elsif ($var eq "menu_html") {
+ &menu_html;
+} elsif ($var eq "werda_html") {
+ &werda_html;
+} elsif ($var eq "logs_html") {
+ &secure_checkid($alias);
+ &logs_html;
+} elsif ($var eq "view_logs_html") {
+ &secure_checkid($alias);
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ &printfile($tmp,$tmp,"log");
+ }
+} elsif ($var eq "superuser_html") {
+ &secure_checkid($alias);
+ &superuser_html;
+} else {
+ print
+ $q->start_html(-bgcolor=>"000000"),
+ $q->end_html;
+}
+
+sub menu_html {
+ if ($tmp eq "quit") {
+ print
+ $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" );
+ sleep 1;
+ &remove_online($alias);
+ &secure_removeid($alias);
+ unlink("data/msgs/$alias");
+ }
+ &start_html("Menü","menu");
+print <<END;
+ <div>
+ [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp&tmpid=$tmpid" target="werda">Wer ist da?</a>]<br>
+ [<a href="main2.pl?var=edit_profile_html&alias=$alias&tmpid=$tmpid" target="ProfilAendern">Profil ändern</a>]<br>
+ [<a href="main2.pl?var=edit_options_html&alias=$alias&tmpid=$tmpid" target="Optionen">Chatoptionen</a>]<br>
+ [<a href="main2.pl?var=list_alias_html&alias=$alias&tmpid=$tmpid" target="Benutzerliste">Benutzerliste</a>]<br>
+ [<a href="htdocs.pl?var=help_html&tmpid=$tmpid" target="Befehle">Chatbefehle</a>]<br>
+ [<a href="main2.pl?var=gb_html&alias=$alias&tmpid=$tmpid" target="Board">Benutzerboard</a>]<br>
+ [<a href="htdocs.pl?var=superuser_html&alias=$alias&tmpid=$tmpid" target="Hirachie">Superuser</a>]<br>
+ [<a href="htdocs.pl?var=logs_html&alias=$alias&tmpid=$tmpid" target="Logdateien">Logdateien</a>]<br>
+ [<a href="http://www.updates.yChat.de" target="Updates">yChat-Updates</a>]<br><br>
+ [<a href="push.pl?alias=$alias&room=$room&var=clear_screen&tmpid=$tmpid" target="main">Weiterchatten</a>]<br>
+ [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias&tmpid=$tmpid">Verlassen</a>]<br>
+ </div>
+</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
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ my $room = $_;
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ &list_dir("data/online/rooms/$room",2);
+ local $nr = $#dir2-1;
+ print $q->b( $_ ),
+ " $door ($nr) Raumthema: $rstat[1]",
+ $q->br;
+ foreach(@dir2) {
+ if ($_ ne ".." && $_ ne ".") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_&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
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ),
+ $q->br;
+ &list_dir("data/logs");
+ my @sortedir = sort(@dir);
+ foreach(@sortedir) {
+ if (-f "data/logs/$_") {
+ print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_&tmpid=$tmpid",
+ -target=>"_new" },
+ "$_" ),
+ " ";
+ }
+ }
+ } else {
+ print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ",
+ "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde." ),
+ $q->hr;
+ &printfile("data/htdocs/logs_html");
+ }
+ print
+ $q->end_html;
+}
+
+sub superuser_html { # Zeigt an, wer Superuser ist
+ &start_html("Superuser");
+ print "<div>Hallo $alias. Du bist als ";
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ print
+ $q->b( "Oberwächter" ),
+ " (OW) eingetragen.</div>",
+ $q->hr;
+ } elsif ( $hirachie 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&tmpid=$tmpid">Chat-Befehle</a>"
+ dokumentiert.
+</div>
+</body>
+</html>
+END
+}
\ No newline at end of file diff --git a/0.4.1/index.pl b/0.4.1/index.pl new file mode 100644 index 0000000..5d674fd --- /dev/null +++ b/0.4.1/index.pl @@ -0,0 +1,376 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = <DATEI>; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&list_dir("data/online/users"); +my $logtin = $#dir-1; +&start_html("Created by Paul C. Bütow 2k"); +print <<END; + <center> + <table width=400> + <tr> + <td> + <b> + <div> + $title - ( <a href="http://servers.yChat.de">yChat-Servers</a> ) + <img src="$gfxpath/yChat.jpg"> + </div> + </b> +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 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="id" value="$id"> + </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> + <div> + yChat befindet sich momentan noch in der Entwicklungsphase ! + <br> + Fragen gehen an Paul Bütow ( + <a href="mailto:paul\@buetow.oxg.de"> + paul\@buetow.oxg.de + </a> + ) :-) + <br> + <br> + Diese Seite wurde schon $counter mal aufgerufen. Es sind z.Z. $logtin Benutzer online. + </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. +my $reload = $_[0]; +&start_html("Registration"); +print <<END; + <center> + <table width=400> + <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="id" value="$id"> + </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"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = <DATEI>; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = <DATEI>; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + $tmpid = time; + &write_file_new("data/online/ident/$alias"); + print DATEI $ENV{'REMOTE_ADDR'}."\n".$tmpid; + close DATEI; + &read_file("data/user/lastlogin/$alias"); + my @lastlogin = <DATEI>; + close DATEI; + &write_file_new("data/user/lastlogin/$alias"); + print DATEI time; + close DATEI; + &frameset_html; + exit; + } else { + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("<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="140,*"> +<frameset border=0 frameborder=0 framespacing=0 rows="210,*,55"> + <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid" scrolling="no"> + <frame name="online" src="online.pl?room=$room&alias=$alias&tmpid=$tmpid"> + <frame name="reload" src="htdocs.pl" scrolling="no"> +</frameset> +<frameset border=0 frameborder=0 framespacing=0 rows="*,55"> + <frame name="main" src="push.pl?room=$room&alias=$alias&tmpid=$tmpid"> + <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid" scrolling="no"> +</frameset> +</frameset> +</html> +END +} diff --git a/0.4.1/main.pl b/0.4.1/main.pl new file mode 100644 index 0000000..691177e --- /dev/null +++ b/0.4.1/main.pl @@ -0,0 +1,737 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "input_html") {
+ &secure_checkid($alias);
+ &input_html;
+} elsif ($var eq "post_msg") {
+ &post_msg;
+} else {
+ &error("Parameter fehlt");
+}
+
+sub input_html { # Eingabemaske für den Chat.
+ if ($tmp eq "login") {
+ &remove_rooms;
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>");
+ }
+ my $whisper = @_;
+ $whisper = $q->param('whisper') if ($whisper == 0);
+print <<END;
+<html>
+ <head>
+ <script language="JavaScript">
+ function delout()
+ {
+ document.inf.submit();
+ document.inf.msg.focus();
+ document.inf.msg.select();
+ return false;
+ }
+ </script>
+$style
+ </head>
+<body bgcolor=000000 class="online">
+ <form name="inf" target="reload" action="main.pl" method="GET" onsubmit="return delout()">
+END
+ print <<END;
+ <input type="hidden" name="var" value="post_msg">
+ <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="id" value="$whisper">
+ <input type="hidden" name="tmp" value="$tmp">
+ <input size="80" name="msg">
+ </form>
+</body>
+</html>
+END
+}
+
+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 "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ } elsif ($action eq "change_colors") {
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "away") {
+ print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&tmp=noaway&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "whisper") {
+ print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "quit") {
+ print "open(\"index.pl?tmp=quit\",\"_top\");";
+ }
+ print "</script></head><body bgcolor=000000>";
+ print
+ $q->end_html;
+}
+
+sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde.
+ &secure_checkid($alias);
+ if ($tmp eq "noaway") {
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>");
+ &post_prv($alias,"<script language=\"JavaScript\">open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");</script>");
+ }
+ $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren
+ if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht
+ $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>";
+ &reload_html($id,$tmp); # -> Action=none, Whisper=$id, $tmp =? noaway
+ &post($msg);
+ } else {
+ &cmd($msg);
+ }
+}
+
+sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können.
+ $_[0] = $_[0]." ";
+ $_[0] = substr($_[0], 1, length($_[0])-1);
+ my @cmd = split(/ /, $_[0]);
+ my $cmd = substr($_[0],0 , index($_[0], " "));
+ my ($whisper,$action) = ($id);
+#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -<
+#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -<
+ if ($cmd eq "about") {
+ &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>");
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde
+ my $away_msg = "";
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$away_msg</font> ) ...</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($whisper);
+ exit;
+#############>- FARBEN WECHSELN -<
+ } elsif ($cmd eq "col") {
+ $col = $cmd[1];
+ my $tmpsecol = $cmd[2];
+ if ($tmpsecol eq "") {
+ $secol = $col
+ } else {
+ $secol = $tmpsecol;
+ }
+ &read_file("data/user/options/$alias");
+ my @pro = <DATEI>;
+ close DATEI;
+ &write_file_new("data/user/options/$alias");
+ print DATEI $pro[0]."".$col."\n".$secol;
+ close DATEI;
+ &zeit;
+ &post("<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($whisper);
+ exit;
+#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
+ } elsif ($cmd eq "j") {
+ &change_room("j",$cmd[1],$room);
+ &reload_html($whisper,"change_room");
+ exit;
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ if ($cmd eq "m") {
+ &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>");
+ } else {
+ &post("<i><font color=$col>$alias $me_msg</font></i>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- MEMO SCHREIBEN -<
+ } elsif ($cmd eq "memo") {
+ my $alias2memo = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if(-f "data/user/options/$alias2memo") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $memo_msg = $memo_msg." ".$cmd[$i];
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ &write_file("data/user/memos/$alias2memo");
+ print DATEI "<font size=2 color=ffffff>(<font color=red>$day.$month. - $hours:$min:$sec</font>) $alias hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>";
+ close DATEI;
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>");
+ &reload_html($whisper);
+ exit;
+#############>- FLÜSTERN ( Auch mit '/' ) -<
+ } elsif ($cmd eq "msg" || $cmd eq "") {
+ my ($alias2post,$msg2post) = ($cmd[1],"");
+ if ($cmd eq "msg") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $action = "whisper";
+ } else {
+ $alias2post = $id;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ }
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ if ($_ eq $alias2post) {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &write_file("data/msgs/$alias");
+ print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &reload_html($alias2post,$action);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>");
+#############>- TOTALONLINEZEIT VON ALIAS ANZEIGEN -<
+ } elsif ($cmd eq "online") {
+ my $alias2prove= $cmd[1];
+ if (-f "data/user/counts/$alias2prove.online") {
+ &read_file("data/user/counts/$alias2prove.online");
+ my $online = <DATEI>;
+ close DATEI;
+ 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>hat z.Z. keine Statistiken !</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &reload_html($whisper,"quit");
+ sleep 2;
+ &remove_online($alias,$room);
+ &secure_removeid($alias);
+ exit;
+#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -<
+ } elsif ($cmd eq "rmgb") {
+ unlink("data/user/gbooks/$alias");
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias löscht sein gesamtes Gästebuch ...</font></i>",$_);
+ &reload_html($whisper);
+ exit;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my ($msg2scream,$msg2post);
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ $msg2post = "\U$msg2scream";
+ &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>");
+ &reload_html($whisper);
+ exit;
+#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGELOGT HAT -<
+ } elsif ($cmd eq "seen") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if (-f "data/user/lastlogin/$alias2prove") {
+ &read_file("data/user/lastlogin/$alias2prove");
+ my $lastlogin = <DATEI>;
+ close DATEI;
+ my $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>");
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2prove <font color=ffffff> hat z.Z. keine Statistiken !</font></font>");
+ &reload_html($whisper);
+ exit;
+#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -<
+} elsif ($cmd eq "w") {
+ &list_dir("data/online/rooms/$room");
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ my ($is,$nr) = ("t",0);
+ foreach(@dir) {
+ if (-f "data/online/rooms/$room/$_") {
+ $personen = $personen." ".$_;
+ $nr++;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>$room $door ($nr) [".$rstat[1]."] : <font color=ffa500>$personen</font></font>");
+ &reload_html($whisper);
+ exit;
+ #############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -<
+ } elsif ($cmd eq "wc" || $cmd eq "wc/") {
+ $raum = $cmd[1];
+ if ($raum eq "" && $cmd eq "wc") {
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/users/$_");
+ }
+ my $nr = ($#dir-1);
+ my ($nrs,$is) = ("","ist");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "sind";
+ }
+ &post_prv("$alias","<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;
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ &list_dir("data/online/rooms/$_",2);
+ &read_file("data/online/rstat/$_");
+ my @rstat = <DATEI>;
+ close DATEI;
+ 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><td><font size=2 color=ffffff>";
+ 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;
+ &list_dir("data/online/rooms/$raum");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_");
+ }
+ my ($nr,$is) = (($#dir-1),"t");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "n";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -<
+ } elsif ($cmd eq "wj" || $cmd eq "ju") {
+ my $alias2search = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum");
+ foreach $user (@dir2) {
+ if (-f "data/online/rooms/$raum/$user") {
+ if ($user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<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($whisper);
+ exit;
+#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -<
+ } elsif ($cmd eq "l") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $lock = "0\n";
+ &zeit;
+ if ($room eq "Cyberbar") {
+ &post("<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("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum ab ...</font></i>");
+ } else {
+ &post("<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];
+ }
+ write_file_new("data/online/rstat/$room");
+ print DATEI $lock;
+ close DATEI;
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- RAUMBESETZER ERNENNEN -<
+ } elsif ($cmd eq "su") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2su = $cmd[1];
+ &list_dir("data/online/rooms/$room");
+ foreach(@dir) {
+ if ($_ eq $alias2su) {
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ &hirachie($alias2su);
+ &prove_besetzer($alias2su,$room);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ &reload_html($whisper);
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>");
+ exit;
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias ernennt \"$alias2su\" zum Raumbesetzer ...</font></i>");
+ &write_file("data/online/rstat/$room");
+ print DATEI $alias2su."\n";
+ close DATEI;
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- RAUMBESETZER ENTNENNEN -<
+ } elsif ($cmd eq "rsu") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2rsu = $cmd[1];
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ &prove_besetzer($alias2rsu,$room);
+ if ($r_besetzer eq "true") {
+ &zeit;
+ &post("<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");
+ }
+ &write_file_new("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($whisper);
+ exit;
+#############>- RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "t") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $theme;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $theme = $theme." ".$cmd[$i];
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias gibt dem Raum das Thema <font color=red>( $theme )</font> ...</font></i>");
+ $theme = $r_stat[0].$theme."\n";
+ for ($i=2;$i<=$#r_stat;$i++) {
+ $theme = $theme.$r_stat[$i];
+ }
+ write_file_new("data/online/rstat/$room");
+ print DATEI $theme;
+ close DATEI;
+ }
+ &reload_html($whisper);
+ exit;
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN BZW. ENTBANNEN -<
+ } elsif ($cmd eq "ban" || $cmd eq "rban") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ my ($alias2handle,$registriert) = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ $registriert = "true" if ($_ eq $alias2handle);
+ }
+ if ($registriert ne "true") {
+ if ($cmd eq "ban") {
+ if ($alias2handle ne "") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>");
+ } else {
+ &read_file("data/ban");
+ my @banned = <DATEI>;
+ my ($benutzer);
+ my $nr = $#banned+1;
+ close DATEI;
+ foreach(@banned) {
+ $benutzer = $benutzer." ".$_;
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+ }
+ &read_file("data/ban");
+ my @banlist = <DATEI>;
+ close DATEI;
+ foreach(@banlist) {
+ if ($_ eq "$alias2handle\n") {
+ if ($cmd eq "ban") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>");
+ } else {
+ my $banned = "false";
+ foreach(@banlist) {
+ $banned = "true" if ($_ eq "$alias2handle\n");
+ }
+ if ($banned eq "true") {
+ my @newbanlist;
+ foreach(@banlist) {
+ push @newbanlist,$_ if ($_ ne "$alias2handle\n");
+ }
+ &write_file_new("data/ban");
+ print DATEI @newbanlist;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>");
+ }
+ }
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ if ($cmd eq "ban") {
+ &hirachie($alias2handle);
+ if ($hirachie ne "ow" || $hirachie eq "wa") {
+ &write_file("data/ban");
+ print DATEI "$alias2handle\n";
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>");
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>");
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "ip") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/online/ident");
+ foreach(@dir) {
+ if ($_ eq $alias2prove) {
+ &read_file("data/online/ident/$_");
+ local $ipnr = <DATEI>;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2);
+ foreach $chatter (@dir2) {
+ if ($chatter eq $alias2kick) {
+ &hirachie($alias2kick);
+ if ($hirachie 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 ($hirachie 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 $_);
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_);
+ &remove_online($alias2kick,$_,"kick");
+ &secure_removeid($alias2kick);
+ }
+ &reload_html($whisper);
+ 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($whisper);
+ exit;
+#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
+ } elsif ($cmd eq "kill") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2kill = $cmd[1];
+ &hirachie($alias2kill);
+ if ($hirachie 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 ($hirachie 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("<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($whisper);
+ exit;
+ #############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -<
+ } elsif ($cmd eq "sys") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $sys_msg = $sys_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post_all("<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>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -<
+ } elsif ($cmd eq "wa" || $cmd eq "rwa") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ &zeit;
+ my $alias2handle = $cmd[1];
+ if ($cmd eq "wa") {
+ my $anerkennen = "false";
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if ($_ eq $alias2handle) {
+ $anerkennen = "true";
+ }
+ }
+ if ($anerkennen eq "true") {
+ &hirachie($alias2handle);
+ if ($hirachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>");
+ } elsif ($hirachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>");
+ } else {
+ &write_file("data/wa");
+ print DATEI $alias2handle."\n";
+ close DATEI;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>");
+ }
+ } else {
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ }
+ } elsif ($cmd eq "rwa") {
+ &read_file("data/wa");
+ my @wafile = <DATEI>;
+ close DATEI;
+ my $aberkennen = "false";
+ foreach(@wafile) {
+ if ($_ ne "$alias2handle\n") {
+ push @newafile,$_;
+ } else {
+ $aberkennen = "true";
+ }
+ }
+ &write_file_new("data/wa");
+ print DATEI @newafile;
+ close DATEI;
+ if ($aberkennen eq "true") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>");
+ } else {
+ &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>");
+ }
+ }
+ }
+#############>- ENDE DER CHATBEFEHLE -<
+}
+&reload_html($whisper,$action);
+}
+
+sub change_room { # Den Chat-Raum wechseln
+ my ($method,$newroom,$oldroom,$alias2follow) = @_;
+ # Überprüfen, ob Alias Raum betreten darf
+ &read_file("data/online/rstat/$newroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ if ($rstat[0] eq "1\n") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie eq "ow") {
+ } else {
+ &post_prv("$alias","<font size=2 color=ffffff>Der Raum \"<font color=ffa500>$newroom</font>\" ist leider abgesperrt!</font>");
+ &reload_html($id,$action);
+ exit;
+ }
+ }
+ $room = $oldroom;
+ &zeit; # Zeit 'erneuern'
+ if ($method eq "j") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ } elsif ($method eq "ju") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<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>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ }
+ # Sicherheitshalber Alias erneuert entf.
+ unlink("data/online/rooms/$oldroom/$alias");
+ &rm_rstat($oldroom,$alias);
+ &rm_rooms;
+}
+
+sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat
+ my ($r_alias,$r_room) = @_;
+ $r_besetzer = "false";
+ &read_file("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");
+ }
+}
\ No newline at end of file diff --git a/0.4.1/main2.pl b/0.4.1/main2.pl new file mode 100644 index 0000000..dbc736a --- /dev/null +++ b/0.4.1/main2.pl @@ -0,0 +1,568 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+
+if ($var eq "list_alias_html") {
+ &list_alias_html;
+} elsif ($var eq "alias_html") {
+ &alias_html;
+} elsif ($var eq "edit_profile_html") {
+ &edit_html("edit_profile_html");
+} elsif ($var eq "edit_options_html") {
+ &edit_html("edit_options_html");
+} elsif ($var eq "gb_html") {
+ &secure_checkid($alias);
+ &gb_html;
+} elsif ($var eq "post_gb") {
+ &secure_checkid($alias);
+ &post_gb;
+} elsif ($var eq "edit_profile") {
+ &secure_checkid($alias);
+ &edit("edit_profile");
+} elsif ($var eq "edit_options") {
+ &secure_checkid($alias);
+ &edit("edit_options");
+} elsif ($var eq "rm_gb_alias") {
+ &secure_checkid($alias);
+ &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";
+ }
+ if (-e "$tmpath") {
+ &read_file("$tmpath");
+ my @datei = <DATEI>;
+ close DATEI;
+ pop(@datei) if ($#datei > 99);
+ my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ @newdatei = ("@newdatei", "@datei");
+ &write_file_new("$tmpath");
+ print DATEI @newdatei;
+ close DATEI;
+ } else {
+ &write_file_new("$tmpath");
+ print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ close DATEI;
+ }
+ 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
+ $tmp = $alias;
+ &read_file("data/user/gbooks/$alias");
+ my @gbfile = <DATEI>;
+ close DATEI;
+ my @newgbfile = ();
+ for($i=0; $i <= $#gbfile; $i++) {
+ push(@newgbfile,$gbfile[$i]) if ($i != $id);
+ }
+ &write_file_new("data/user/gbooks/$alias");
+ print DATEI @newgbfile;
+ close DATEI;
+ &alias_html("rm_ok");
+}
+
+sub list_alias_html { # Liste aller Benutzer
+ &start_html("Alle Benutzer");
+ &list_dir("data/user/options");
+ my @liste = sort(@dir);
+ my $nr = $#dir-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];
+ local $counter = undef;
+ &read_file("data/user/counts/$tmp");
+ $counter = <DATEI>;
+ close DATEI;
+ $counter++;
+ &write_file_new("data/user/counts/$tmp");
+ print DATEI $counter."\n".$counter[1];
+ close DATEI;
+ &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
+}
+ &read_file("data/user/profiles/$tmp");
+ @data = <DATEI>;
+ close DATEI;
+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">
+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") {
+ &read_file("data/user/options/$alias");
+ } elsif ($method eq "edit_profile_html") {
+ &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","input");
+ 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="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <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
+ &read_file("colors.sno");
+ @colors = <DATEI>;
+ close DATEI;
+ 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="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <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="submit" value="Daten ändern ...">
+ </font>
+ </form>
+</body>
+</html>
+END
+}
+
+
+sub edit { # Benutzerprofil od. Chat-Optionen abspeichern
+ my $method = $_[0];
+ if ($method eq "edit_profile") {
+ &write_file_new("data/user/profiles/$alias");
+ print DATEI $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 DATEI;
+ &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;
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat seine Chateinstellungen geändert ...</font></i>");
+
+ &write_file_new("data/user/options/$alias");
+ print DATEI $id."\n".$col."\n".$secol;
+ close DATEI;
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
diff --git a/0.4.1/online.pl b/0.4.1/online.pl new file mode 100644 index 0000000..e8e9f40 --- /dev/null +++ b/0.4.1/online.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +&secure_checkid($alias); + +# Onlinezeit zählen ! +&read_file("data/online/users/$alias"); + my $oldstamp = <DATEI>; +close DATEI; + if ($oldstamp > (time - 60)) { + &read_file("data/user/counts/$alias.online"); + my $online = <DATEI>; + close DATEI; + my $total = (time-$oldstamp+$online); + &write_file_new("data/user/counts/$alias.online"); + print DATEI $total; + close DATEI; + } +##### ENDE + +&start_html("Online","online"); +&online($alias,$room); +&list_dir("data/online/rooms/".$room); +print + $q->div( "$room:" ), + "<font size=1 color=ffffef face=arial>"; + foreach $online (@dir) { + 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) = @_; + &write_file_new("data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-e "data/online/rooms/$room") { # Falls Raum nicht existiert anlegen + } else { + &write_file_new("data/online/rstat/$room"); # Raumbesetzerstatus setzen + print DATEI "0\n\n$alias\n"; + close DATEI; + mkdir "data/online/rooms/$room", 0777; + } + &write_file_new("data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen + my $provetime = <DATEI>; + close DATEI; + if ($provetime < (time - 30)) { + &write_file_new("data/online/prove"); + print DATEI time; + close DATEI; + &rm_alias("data/online/users"); + &rm_rooms; + } +}
\ No newline at end of file diff --git a/0.4.1/push.pl b/0.4.1/push.pl new file mode 100644 index 0000000..5ae82c5 --- /dev/null +++ b/0.4.1/push.pl @@ -0,0 +1,97 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+CGI->compile(':all');
+$q = new CGI;
+
+$| = 1; # Cache von Perl ausschalten
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkid($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title - Created & Copyright by Paul C. Bütow $tmp\n");
+
+ if (-f "data/user/memos/$alias") { # Nach Memonachrichten checken!
+ print "\n<br>";
+ &read_file("data/user/memos/$alias");
+ my $memos = <DATEI>;
+ close DATEI;
+ print $memos;
+ unlink("data/user/memos/$alias");
+ }
+ my $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+ print $q->br;
+ open (MSGFILE, $msgfile);
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) { # Nach 15 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen&tmpid=$tmpid\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.4.1/setup.sh b/0.4.1/setup.sh new file mode 100644 index 0000000..d076ded --- /dev/null +++ b/0.4.1/setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +mkdir 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/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 * +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.jpg ../../htdocs/yChat/ +echo +echo yChat Setup beendet ... +echo Created and copyrighted by Paul C. Bütow aka Snooper +echo + diff --git a/0.4.1/yBanner.gif b/0.4.1/yBanner.gif Binary files differnew file mode 100644 index 0000000..e4b691e --- /dev/null +++ b/0.4.1/yBanner.gif diff --git a/0.4.1/yBanner2.gif b/0.4.1/yBanner2.gif Binary files differnew file mode 100644 index 0000000..0e9684e --- /dev/null +++ b/0.4.1/yBanner2.gif diff --git a/0.4.1/yChat.jpg b/0.4.1/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.4.1/yChat.jpg diff --git a/0.4.2/CREDITS.txt b/0.4.2/CREDITS.txt new file mode 100644 index 0000000..b1a6610 --- /dev/null +++ b/0.4.2/CREDITS.txt @@ -0,0 +1,26 @@ +############################## yChat.de SETUP ###############################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.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 "Ferlaufform-JavaScripts" im
+ Texteingabeframe und für die technische Umsetzung, daß sich das
+ Inputframe bei jedem Textposting nicht wieder reloadet.
+ ( www.anklepper.de ).
+
+ - Dave aka Truhe, für die Erstellung der Farbtabelle unter Chatoptionen inkl.
+ Auswähl-JavaScript!
+ ( maligree.yi.org )
+
+ - Michi aka Snoopy, für das Testen des Skripts auf seinem Server.
+ ( www.berlin-singeltreff.de ).
+
+ - Florian B. aka RocketKid für designtechnische Anregungen.
+ ( www.Rocket-Kid.de und www.proa.de )
+
+ - Larry Wall, für die Erfindung von Perl !
+
+ - Stefan Münz, für die Erstellung von SelfHTML !
diff --git a/0.4.2/README.txt b/0.4.2/README.txt new file mode 100644 index 0000000..ce90571 --- /dev/null +++ b/0.4.2/README.txt @@ -0,0 +1,33 @@ +############################## yChat.de README ##############################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.setup.yChat.de => Installationsdokumentation
+ www.readme.yChat.de => Allgemeine Bedingungen usw.
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript im Einsatz
diff --git a/0.4.2/SETUP.txt b/0.4.2/SETUP.txt new file mode 100644 index 0000000..e6767e5 --- /dev/null +++ b/0.4.2/SETUP.txt @@ -0,0 +1,102 @@ +############################## yChat.de SETUP ###############################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+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.txt => 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 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.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
\ No newline at end of file diff --git a/0.4.2/TODO.txt b/0.4.2/TODO.txt new file mode 100644 index 0000000..59d9e3e --- /dev/null +++ b/0.4.2/TODO.txt @@ -0,0 +1,24 @@ +Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - Löschung aller Chatter, die sich seit 60 Tagen nicht mehr
+ eingelogt haben.
+
+ - IP-Adressen ver-/entbannen.
+
+ - E-Mail zusendung bei verlorenem Passwort.
+
+ - Eine Top 20 (Onlinezeit) der Chatter
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.4.2/UPDATES.txt b/0.4.2/UPDATES.txt new file mode 100644 index 0000000..9de123d --- /dev/null +++ b/0.4.2/UPDATES.txt @@ -0,0 +1,119 @@ +########################### yChat.de U PDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+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.
+
+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.2/colors.sno b/0.4.2/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.2/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.2/config.pm b/0.4.2/config.pm new file mode 100644 index 0000000..364ff59 --- /dev/null +++ b/0.4.2/config.pm @@ -0,0 +1,307 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmpid = $q->param("tmpid");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "25.12.2k";
+$version = "0.4.2";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-color: 005146 }
+ body.blank { background-color: 000000 }
+ body.online { background-color: 000000 }
+ body.log { 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; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("$msg2post") if ($room eq "Cyberbar");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($msg2log) = @_;
+ &zeit;
+ &write_file("data/logs/$day.$month.$year");
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen!");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ unlink("data/msgs/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } elsif ($method ne "kick") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ }
+ &rm_rstat($room,$alias) if ($room ne undef);
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, dessen Timestamps älter als 60 Sekunden sind
+ my ($dir2rm,$rstatroom) = @_;
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ &rm_rstat($rstatroom,$_) if ($rstatroom ne undef);
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_",$_);
+ &list_dir("data/online/rooms/$_",2);
+ if ($#dir2 = 1) {
+ rmdir("data/online/rooms/$_");
+ }
+ }
+ }
+}
+
+sub rm_rstat { # Benutzer als Raumbesetzer austragen
+ my ($rstatroom,$r_alias) = @_;
+ &read_file("data/online/rstat/$rstatroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $newfile = $rstat[0].$rstat[1];
+ for ($i=2;$i<=$#rstat;$i++) {
+ $newfile = $newfile."\n".$rstat[$i] if ($rstat[$i] ne $r_alias."\n");
+ }
+ write_file_new("data/online/rstat/$rstatroom");
+ print DATEI $newfile;
+ close DATEI;
+}
+
+sub secure_removeid { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkid { # TmpID überprüfen
+ my ($alias2check) = @_;
+ &read_file("data/online/ident/$alias2check");
+ my @idfile = <DATEI>;
+ close DATEI;
+ if ($idfile[1] ne $tmpid) {
+ &error("Falsche TempID ! Du bist nicht befugt zu handeln !");
+ }
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = undef;
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten
\ No newline at end of file diff --git a/0.4.2/help.sno b/0.4.2/help.sno new file mode 100644 index 0000000..5779354 --- /dev/null +++ b/0.4.2/help.sno @@ -0,0 +1,55 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table width=100% bgcolor=555555> +<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>/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>/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 jedeglich 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=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.2/htdocs.pl b/0.4.2/htdocs.pl new file mode 100644 index 0000000..bb70682 --- /dev/null +++ b/0.4.2/htdocs.pl @@ -0,0 +1,244 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "help_html") {
+ &printfile("help.sno","Alle Chatbefehle");
+} elsif ($var eq "logo_html") {
+ &start_html("Logo");
+ print "<layer top=-3 left=0><div style=\"position:absolute; top:5; left:10\">",
+ "<img src=\"$gfxpath/y_.gif\"></div></layer>";
+ $q->end_html;
+} elsif ($var eq "menu_html") {
+ &menu_html;
+} elsif ($var eq "menu2_html") {
+ &menu2_html;
+} elsif ($var eq "werda_html") {
+ &werda_html;
+} elsif ($var eq "logs_html") {
+ &secure_checkid($alias);
+ &logs_html;
+} elsif ($var eq "view_logs_html") {
+ &secure_checkid($alias);
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ &printfile($tmp,"blank" ,"log");
+ }
+} elsif ($var eq "superuser_html") {
+ &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;
+ sleep 2;
+ &remove_online($alias,$room);
+ &secure_removeid($alias);
+ 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>
+ <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","ProfilAendern")'>Profil ändern</a>
+ <a href='javascript:fenster("main2.pl?var=edit_options_html&alias=$alias&tmpid=$tmpid","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")'>Logdateien</a>
+ <a href="http://www.updates.yChat.de" target="Updates">Updates</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>
+</font>
+</body>
+</html>
+END
+}
+
+sub menu2_html {
+$JavaScript = <<ENDJS;
+<script language="JavaScript">
+ Normal1 = new Image();
+ Normal1.src = "$gfxpath/_updates.gif";
+ Highlight1 = new Image();
+ Highlight1.src = "$gfxpath/_updates_.gif";
+ Normal2 = new Image();
+ Normal2.src = "$gfxpath/_credits.gif";
+ Highlight2 = new Image();
+ Highlight2.src = "$gfxpath/_credits_.gif";
+ Normal3 = new Image();
+ Normal3.src = "$gfxpath/_readme.gif";
+ Highlight3 = new Image();
+ Highlight3.src = "$gfxpath/_readme_.gif";
+ Normal4 = new Image();
+ Normal4.src = "$gfxpath/_todo.gif";
+ Highlight4 = new Image();
+ Highlight4.src = "$gfxpath/_todo_.gif";
+
+function Bildwechsel(Bildnr,Bildobjekt) {
+ window.document.images[Bildnr].src = Bildobjekt.src;
+}
+</script>
+ENDJS
+ &start_html("Menü2","blank");
+print <<END;
+ <a onMouseOver="Bildwechsel(0,Highlight1)" onMouseOut="Bildwechsel(0,Normal1)" href="http://www.updates.yChat.de" target="Updates"><img src="$gfxpath/_updates.gif" border=0></a>
+ <a onMouseOver="Bildwechsel(1,Highlight2)" onMouseOut="Bildwechsel(1,Normal2)" href="http://www.credits.yChat.de" target="Updates"><img src="$gfxpath/_credits.gif" border=0></a>
+ <a onMouseOver="Bildwechsel(2,Highlight3)" onMouseOut="Bildwechsel(2,Normal3)" href="http://www.credits.yChat.de" target="Updates"><img src="$gfxpath/_readme.gif" border=0></a>
+ <a onMouseOver="Bildwechsel(3,Highlight4)" onMouseOut="Bildwechsel(3,Normal4)" href="http://www.credits.yChat.de" target="Updates"><img src="$gfxpath/_todo.gif" border=0></a>
+</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
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ my $room = $_;
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ &list_dir("data/online/rooms/$room",2);
+ local $nr = $#dir2-1;
+ print $q->b( $_ ),
+ " $door ($nr) Raumthema: $rstat[1]",
+ $q->br;
+ foreach(@dir2) {
+ if ($_ ne ".." && $_ ne ".") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_&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
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ),
+ $q->br;
+ &list_dir("data/logs");
+ my @sortedir = sort(@dir);
+ foreach(@sortedir) {
+ if (-f "data/logs/$_") {
+ print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_&tmpid=$tmpid",
+ -target=>"_new" },
+ "$_" ),
+ " ";
+ }
+ }
+ } else {
+ print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ",
+ "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde." ),
+ $q->hr;
+ &printfile("data/htdocs/logs_html");
+ }
+ print
+ $q->end_html;
+}
+
+sub superuser_html { # Zeigt an, wer Superuser ist
+ &start_html("Superuser");
+ print "<div>Hallo $alias. Du bist als ";
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ print
+ $q->b( "Oberwächter" ),
+ " (OW) eingetragen.</div>",
+ $q->hr;
+ } elsif ( $hirachie 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&tmpid=$tmpid">Chat-Befehle</a>"
+ dokumentiert.
+</div>
+</body>
+</html>
+END
+}
\ No newline at end of file diff --git a/0.4.2/index.pl b/0.4.2/index.pl new file mode 100644 index 0000000..423749c --- /dev/null +++ b/0.4.2/index.pl @@ -0,0 +1,392 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header; # HTTP-Header erzeugen + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +local $counter = undef; +&read_file("data/count"); + $counter = <DATEI>; +close DATEI; +$counter++; +&write_file_new("data/count"); + print DATEI $counter; +close DATEI; +&list_dir("data/online/users"); +my $logtin = $#dir-1; +&list_dir("data/user/options",2); +my $users = $#dir2-1; +&start_html("Created & Copyright by Paul C. Bütow"); +print <<END; + <center> + <table width=500> + <tr> + <td> + <center> + <table> + <tr> + <td> + <img src="$gfxpath/y.gif"> + </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:paul\@buetow.oxg.de">Paul C. Bütow</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 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="id" value="$id"> + </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. +my $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="id" value="$id"> + </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"; + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &read_file("data/user/options/$alias"); + @datei = <DATEI>; + close DATEI; + chomp($datei[0]); + if ($datei[0] eq $id) { + &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist + @banned = <DATEI>; + close DATEI; + foreach(@banned) { + if ($_ eq "$alias\n") { + $tmp = "banned"; + &login_html(); + exit; + } + } + $col = $datei[1]; + $secol = $datei[2]; + $tmpid = time; + &write_file_new("data/online/ident/$alias"); + print DATEI $ENV{'REMOTE_ADDR'}."\n".$tmpid; + close DATEI; + &read_file("data/user/lastlogin/$alias"); + my @lastlogin = <DATEI>; + close DATEI; + &write_file_new("data/user/lastlogin/$alias"); + print DATEI time; + close DATEI; + &frameset_html; + exit; + } else { + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &create_alias_html("alias_exists"); + exit; + } + } + &write_file_new("data/user/options/$alias"); + print DATEI $id."\n"; + close DATEI; + &zeit; + &list_dir("data/user/options"); + my $number = $#dir-1; + &post("<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=$room&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=$room&col=$col&secol=$secol&tmpid=$tmpid" scrolling="no"> + <frame name="main" src="push.pl?room=$room&alias=$alias&tmpid=$tmpid"> + <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid" scrolling="no"> + </frameset> +</frameset> +</html> +END +} diff --git a/0.4.2/main.pl b/0.4.2/main.pl new file mode 100644 index 0000000..f6efdd1 --- /dev/null +++ b/0.4.2/main.pl @@ -0,0 +1,798 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "input_html") {
+ &secure_checkid($alias);
+ &input_html;
+} elsif ($var eq "post_msg") {
+ &post_msg;
+} else {
+ &error("Parameter fehlt");
+}
+
+sub input_html { # Eingabemaske für den Chat.
+ if ($tmp eq "login") {
+ &remove_rooms;
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>");
+ }
+ my $whisper = @_;
+ $whisper = $q->param('whisper') if ($whisper == 0);
+print <<END;
+<html>
+ <head>
+ <script language="JavaScript">
+
+maxVerlauf = 10; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+fullVerlauf = new Array( maxVerlauf );
+
+function delout()
+{
+ addVerlauf( document.inf.msg.value );
+ document.verlaufform.verlauf.selectedIndex = maxVerlauf;
+ document.inf.submit(); // Formular absenden
+ document.inf.msg.focus();
+ document.inf.msg.select();
+ return false;
+}
+function CheckAuswahl()
+{
+ id = document.verlaufform.verlauf.selectedIndex;
+
+ if( fullVerlauf[ id-1 ] == null ) // Falls das Feld leer ist
+ return false; // Aufruf ignorieren
+
+ document.inf.msg.value = fullVerlauf[ id-1 ];
+
+ return true;
+}
+function addVerlauf( msg )
+{
+ if( msg == "" ) // Falls msg leer
+ return false; // Aufruf ignorieren
+
+ 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];
+ }
+ if( msg.length > maxPreview )
+ pre = msg.slice( 0, maxPreview-3 ) + "...";
+ else
+ pre = msg;
+
+ document.verlaufform.verlauf.options[ maxVerlauf ].text = pre; // Neue Vorschau anfügen
+ fullVerlauf[ maxVerlauf-1 ] = msg; // Neuen Eintrag anfügen
+}
+
+ </script>
+$style
+ </head>
+<body class="blank">
+ <div align="left">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <form name="inf" target="reload" action="main.pl" method="GET" onsubmit="return delout()">
+ <input type="hidden" name="var" value="post_msg">
+ <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="id" value="$whisper">
+ <input type="hidden" name="tmp" value="$tmp">
+ <input size="40" name="msg">
+ <input type="submit" value="Texten">
+ </form>
+ </td>
+ <td>
+ <form name="verlaufform">
+ <select size="1" name="verlauf" size="40" onChange="CheckAuswahl()">
+ <option value>- Nachrichten-Verlauf -</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ </select>
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>
+END
+}
+
+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 "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ } elsif ($action eq "change_colors") {
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "away") {
+ print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&tmp=noaway&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "whisper") {
+ print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "quit") {
+ print "open(\"index.pl?tmp=quit\",\"_top\");";
+ }
+ print "</script></head><body bgcolor=$col>";
+ print
+ $q->end_html;
+}
+
+sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde.
+ &secure_checkid($alias);
+ if ($tmp eq "noaway") {
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>");
+ &post_prv($alias,"<script language=\"JavaScript\">open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");</script>");
+ }
+ $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren
+ if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht
+ $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>";
+ &reload_html($id,$tmp); # -> Action=none, Whisper=$id, $tmp =? noaway
+ &post($msg);
+ } else {
+ &cmd($msg);
+ }
+}
+
+sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können.
+ $_[0] = $_[0]." ";
+ $_[0] = substr($_[0], 1, length($_[0])-1);
+ my @cmd = split(/ /, $_[0]);
+ my $cmd = substr($_[0],0 , index($_[0], " "));
+ my ($whisper,$action) = ($id);
+#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -<
+#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -<
+ if ($cmd eq "about") {
+ &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>");
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde
+ my $away_msg = "";
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$away_msg</font> ) ...</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($whisper);
+ exit;
+#############>- FARBEN WECHSELN -<
+ } elsif ($cmd eq "col") {
+ $col = $cmd[1];
+ my $tmpsecol = $cmd[2];
+ if ($tmpsecol eq "") {
+ $secol = $col
+ } else {
+ $secol = $tmpsecol;
+ }
+ &read_file("data/user/options/$alias");
+ my @pro = <DATEI>;
+ close DATEI;
+ &write_file_new("data/user/options/$alias");
+ print DATEI $pro[0]."".$col."\n".$secol;
+ close DATEI;
+ &zeit;
+ &post("<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($whisper);
+ exit;
+#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
+ } elsif ($cmd eq "j") {
+ &change_room("j",$cmd[1],$room);
+ &reload_html($whisper,"change_room");
+ exit;
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ if ($cmd eq "m") {
+ &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>");
+ } else {
+ &post("<i><font color=$col>$alias $me_msg</font></i>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- MEMO SCHREIBEN -<
+ } elsif ($cmd eq "memo") {
+ my $alias2memo = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if(-f "data/user/options/$alias2memo") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $memo_msg = $memo_msg." ".$cmd[$i];
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ &write_file("data/user/memos/$alias2memo");
+ print DATEI "<font size=2 color=ffffff>(<font color=red>$day.$month. - $hours:$min:$sec</font>) $alias hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>";
+ close DATEI;
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>");
+ &reload_html($whisper);
+ exit;
+#############>- FLÜSTERN ( Auch mit '/' ) -<
+ } elsif ($cmd eq "msg" || $cmd eq "") {
+ my ($alias2post,$msg2post) = ($cmd[1],"");
+ if ($cmd eq "msg") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $action = "whisper";
+ } else {
+ $alias2post = $id;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ }
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ if ($_ eq $alias2post) {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &write_file("data/msgs/$alias");
+ print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &reload_html($alias2post,$action);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>");
+#############>- TOTALONLINEZEIT VON ALIAS ANZEIGEN -<
+ } elsif ($cmd eq "online") {
+ my $alias2prove= $cmd[1];
+ if (-f "data/user/counts/$alias2prove.online") {
+ &read_file("data/user/counts/$alias2prove.online");
+ my $online = <DATEI>;
+ close DATEI;
+ 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>hat z.Z. keine Statistiken !</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &reload_html($whisper,"quit");
+ sleep 2;
+ &remove_online($alias,$room);
+ &secure_removeid($alias);
+ exit;
+#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -<
+ } elsif ($cmd eq "rmgb") {
+ unlink("data/user/gbooks/$alias");
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias löscht sein gesamtes Gästebuch ...</font></i>",$_);
+ &reload_html($whisper);
+ exit;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my ($msg2scream,$msg2post);
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ $msg2post = "\U$msg2scream";
+ &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>");
+ &reload_html($whisper);
+ exit;
+#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGELOGT HAT -<
+ } elsif ($cmd eq "seen") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if (-f "data/user/lastlogin/$alias2prove") {
+ &read_file("data/user/lastlogin/$alias2prove");
+ my $lastlogin = <DATEI>;
+ close DATEI;
+ my $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>");
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2prove <font color=ffffff> hat z.Z. keine Statistiken !</font></font>");
+ &reload_html($whisper);
+ exit;
+#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -<
+} elsif ($cmd eq "w") {
+ &list_dir("data/online/rooms/$room");
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ my ($is,$nr) = ("t",0);
+ foreach(@dir) {
+ if (-f "data/online/rooms/$room/$_") {
+ $personen = $personen." ".$_;
+ $nr++;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>$room $door ($nr) [".$rstat[1]."] : <font color=ffa500>$personen</font></font>");
+ &reload_html($whisper);
+ exit;
+ #############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -<
+ } elsif ($cmd eq "wc" || $cmd eq "wc/") {
+ $raum = $cmd[1];
+ if ($raum eq "" && $cmd eq "wc") {
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/users/$_");
+ }
+ my $nr = ($#dir-1);
+ my ($nrs,$is) = ("","ist");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "sind";
+ }
+ &post_prv("$alias","<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;
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ &list_dir("data/online/rooms/$_",2);
+ &read_file("data/online/rstat/$_");
+ my @rstat = <DATEI>;
+ close DATEI;
+ 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><td><font size=2 color=ffffff>";
+ 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;
+ &list_dir("data/online/rooms/$raum");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_");
+ }
+ my ($nr,$is) = (($#dir-1),"t");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "n";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -<
+ } elsif ($cmd eq "wj" || $cmd eq "ju") {
+ my $alias2search = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum");
+ foreach $user (@dir2) {
+ if (-f "data/online/rooms/$raum/$user") {
+ if ($user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<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($whisper);
+ exit;
+#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -<
+ } elsif ($cmd eq "l") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $lock = "0\n";
+ &zeit;
+ if ($room eq "Cyberbar") {
+ &post("<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("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum ab ...</font></i>");
+ } else {
+ &post("<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];
+ }
+ write_file_new("data/online/rstat/$room");
+ print DATEI $lock;
+ close DATEI;
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- RAUMBESETZER ERNENNEN -<
+ } elsif ($cmd eq "su") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2su = $cmd[1];
+ &list_dir("data/online/rooms/$room");
+ foreach(@dir) {
+ if ($_ eq $alias2su) {
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ &hirachie($alias2su);
+ &prove_besetzer($alias2su,$room);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ &reload_html($whisper);
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>");
+ exit;
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias ernennt \"$alias2su\" zum Raumbesetzer ...</font></i>");
+ &write_file("data/online/rstat/$room");
+ print DATEI $alias2su."\n";
+ close DATEI;
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- RAUMBESETZER ENTNENNEN -<
+ } elsif ($cmd eq "rsu") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2rsu = $cmd[1];
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ &prove_besetzer($alias2rsu,$room);
+ if ($r_besetzer eq "true") {
+ &zeit;
+ &post("<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");
+ }
+ &write_file_new("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($whisper);
+ exit;
+#############>- RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "t") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $theme;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $theme = $theme." ".$cmd[$i];
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias gibt dem Raum das Thema <font color=red>( $theme )</font> ...</font></i>");
+ $theme = $r_stat[0].$theme."\n";
+ for ($i=2;$i<=$#r_stat;$i++) {
+ $theme = $theme.$r_stat[$i];
+ }
+ write_file_new("data/online/rstat/$room");
+ print DATEI $theme;
+ close DATEI;
+ }
+ &reload_html($whisper);
+ exit;
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN BZW. ENTBANNEN -<
+ } elsif ($cmd eq "ban" || $cmd eq "rban") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ my ($alias2handle,$registriert) = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ $registriert = "true" if ($_ eq $alias2handle);
+ }
+ if ($registriert ne "true") {
+ if ($cmd eq "ban") {
+ if ($alias2handle ne "") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>");
+ } else {
+ &read_file("data/ban");
+ my @banned = <DATEI>;
+ my ($benutzer);
+ my $nr = $#banned+1;
+ close DATEI;
+ foreach(@banned) {
+ $benutzer = $benutzer." ".$_;
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+ }
+ &read_file("data/ban");
+ my @banlist = <DATEI>;
+ close DATEI;
+ foreach(@banlist) {
+ if ($_ eq "$alias2handle\n") {
+ if ($cmd eq "ban") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>");
+ } else {
+ my $banned = "false";
+ foreach(@banlist) {
+ $banned = "true" if ($_ eq "$alias2handle\n");
+ }
+ if ($banned eq "true") {
+ my @newbanlist;
+ foreach(@banlist) {
+ push @newbanlist,$_ if ($_ ne "$alias2handle\n");
+ }
+ &write_file_new("data/ban");
+ print DATEI @newbanlist;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>");
+ }
+ }
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ if ($cmd eq "ban") {
+ &hirachie($alias2handle);
+ if ($hirachie ne "ow" || $hirachie eq "wa") {
+ &write_file("data/ban");
+ print DATEI "$alias2handle\n";
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font></font>");
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>");
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "ip") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/online/ident");
+ foreach(@dir) {
+ if ($_ eq $alias2prove) {
+ &read_file("data/online/ident/$_");
+ local $ipnr = <DATEI>;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2);
+ foreach $chatter (@dir2) {
+ if ($chatter eq $alias2kick) {
+ &hirachie($alias2kick);
+ if ($hirachie 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 ($hirachie 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 $_);
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_);
+ &remove_online($alias2kick,$_,"kick");
+ &secure_removeid($alias2kick);
+ }
+ &reload_html($whisper);
+ 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($whisper);
+ exit;
+#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
+ } elsif ($cmd eq "kill") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2kill = $cmd[1];
+ &hirachie($alias2kill);
+ if ($hirachie 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 ($hirachie 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("<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($whisper);
+ exit;
+ #############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -<
+ } elsif ($cmd eq "sys") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $sys_msg = $sys_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post_all("<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>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -<
+ } elsif ($cmd eq "wa" || $cmd eq "rwa") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ &zeit;
+ my $alias2handle = $cmd[1];
+ if ($cmd eq "wa") {
+ my $anerkennen = "false";
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if ($_ eq $alias2handle) {
+ $anerkennen = "true";
+ }
+ }
+ if ($anerkennen eq "true") {
+ &hirachie($alias2handle);
+ if ($hirachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>");
+ } elsif ($hirachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>");
+ } else {
+ &write_file("data/wa");
+ print DATEI $alias2handle."\n";
+ close DATEI;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>");
+ }
+ } else {
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ }
+ } elsif ($cmd eq "rwa") {
+ &read_file("data/wa");
+ my @wafile = <DATEI>;
+ close DATEI;
+ my $aberkennen = "false";
+ foreach(@wafile) {
+ if ($_ ne "$alias2handle\n") {
+ push @newafile,$_;
+ } else {
+ $aberkennen = "true";
+ }
+ }
+ &write_file_new("data/wa");
+ print DATEI @newafile;
+ close DATEI;
+ if ($aberkennen eq "true") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>");
+ } else {
+ &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>");
+ }
+ }
+ }
+#############>- ENDE DER CHATBEFEHLE -<
+}
+&reload_html($whisper,$action);
+}
+
+sub change_room { # Den Chat-Raum wechseln
+ my ($method,$newroom,$oldroom,$alias2follow) = @_;
+ # Überprüfen, ob Alias Raum betreten darf
+ &read_file("data/online/rstat/$newroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ if ($rstat[0] eq "1\n") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie eq "ow") {
+ } else {
+ &post_prv("$alias","<font size=2 color=ffffff>Der Raum \"<font color=ffa500>$newroom</font>\" ist leider abgesperrt!</font>");
+ &reload_html($id,$action);
+ exit;
+ }
+ }
+ $room = $oldroom;
+ &zeit; # Zeit 'erneuern'
+ if ($method eq "j") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ } elsif ($method eq "ju") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<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>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ }
+ # Sicherheitshalber Alias erneuert entf.
+ unlink("data/online/rooms/$oldroom/$alias");
+ &rm_rstat($oldroom,$alias);
+ &rm_rooms;
+}
+
+sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat
+ my ($r_alias,$r_room) = @_;
+ $r_besetzer = "false";
+ &read_file("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");
+ }
+}
\ No newline at end of file diff --git a/0.4.2/main2.pl b/0.4.2/main2.pl new file mode 100644 index 0000000..dbc736a --- /dev/null +++ b/0.4.2/main2.pl @@ -0,0 +1,568 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+
+if ($var eq "list_alias_html") {
+ &list_alias_html;
+} elsif ($var eq "alias_html") {
+ &alias_html;
+} elsif ($var eq "edit_profile_html") {
+ &edit_html("edit_profile_html");
+} elsif ($var eq "edit_options_html") {
+ &edit_html("edit_options_html");
+} elsif ($var eq "gb_html") {
+ &secure_checkid($alias);
+ &gb_html;
+} elsif ($var eq "post_gb") {
+ &secure_checkid($alias);
+ &post_gb;
+} elsif ($var eq "edit_profile") {
+ &secure_checkid($alias);
+ &edit("edit_profile");
+} elsif ($var eq "edit_options") {
+ &secure_checkid($alias);
+ &edit("edit_options");
+} elsif ($var eq "rm_gb_alias") {
+ &secure_checkid($alias);
+ &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";
+ }
+ if (-e "$tmpath") {
+ &read_file("$tmpath");
+ my @datei = <DATEI>;
+ close DATEI;
+ pop(@datei) if ($#datei > 99);
+ my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ @newdatei = ("@newdatei", "@datei");
+ &write_file_new("$tmpath");
+ print DATEI @newdatei;
+ close DATEI;
+ } else {
+ &write_file_new("$tmpath");
+ print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ close DATEI;
+ }
+ 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
+ $tmp = $alias;
+ &read_file("data/user/gbooks/$alias");
+ my @gbfile = <DATEI>;
+ close DATEI;
+ my @newgbfile = ();
+ for($i=0; $i <= $#gbfile; $i++) {
+ push(@newgbfile,$gbfile[$i]) if ($i != $id);
+ }
+ &write_file_new("data/user/gbooks/$alias");
+ print DATEI @newgbfile;
+ close DATEI;
+ &alias_html("rm_ok");
+}
+
+sub list_alias_html { # Liste aller Benutzer
+ &start_html("Alle Benutzer");
+ &list_dir("data/user/options");
+ my @liste = sort(@dir);
+ my $nr = $#dir-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];
+ local $counter = undef;
+ &read_file("data/user/counts/$tmp");
+ $counter = <DATEI>;
+ close DATEI;
+ $counter++;
+ &write_file_new("data/user/counts/$tmp");
+ print DATEI $counter."\n".$counter[1];
+ close DATEI;
+ &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
+}
+ &read_file("data/user/profiles/$tmp");
+ @data = <DATEI>;
+ close DATEI;
+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">
+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") {
+ &read_file("data/user/options/$alias");
+ } elsif ($method eq "edit_profile_html") {
+ &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","input");
+ 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="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <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
+ &read_file("colors.sno");
+ @colors = <DATEI>;
+ close DATEI;
+ 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="alias" value="$alias">
+ <input type="hidden" name="tmpid" value="$tmpid">
+ <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="submit" value="Daten ändern ...">
+ </font>
+ </form>
+</body>
+</html>
+END
+}
+
+
+sub edit { # Benutzerprofil od. Chat-Optionen abspeichern
+ my $method = $_[0];
+ if ($method eq "edit_profile") {
+ &write_file_new("data/user/profiles/$alias");
+ print DATEI $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 DATEI;
+ &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;
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat seine Chateinstellungen geändert ...</font></i>");
+
+ &write_file_new("data/user/options/$alias");
+ print DATEI $id."\n".$col."\n".$secol;
+ close DATEI;
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
diff --git a/0.4.2/online.pl b/0.4.2/online.pl new file mode 100644 index 0000000..57e1349 --- /dev/null +++ b/0.4.2/online.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+&secure_checkid($alias);
+
+# Onlinezeit zählen !
+&read_file("data/online/users/$alias");
+ my $oldstamp = <DATEI>;
+close DATEI;
+ if ($oldstamp > (time - 60)) {
+ &read_file("data/user/counts/$alias.online");
+ my $online = <DATEI>;
+ close DATEI;
+ my $total = (time-$oldstamp+$online);
+ &write_file_new("data/user/counts/$alias.online");
+ print DATEI $total;
+ close DATEI;
+ }
+##### ENDE
+
+&start_html("Online","online");
+&online($alias,$room);
+&list_dir("data/online/rooms/".$room);
+print
+ $q->div( "$room:" ),
+ "<font size=1 color=ffffef face=arial>";
+ foreach $online (@dir) {
+ 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) = @_;
+ &write_file_new("data/online/users/$alias");
+ print DATEI time;
+ close DATEI;
+ if (-e "data/online/rooms/$room") { # Falls Raum nicht existiert anlegen
+ } else {
+ &write_file_new("data/online/rstat/$room"); # Raumbesetzerstatus setzen
+ print DATEI "0\n\n$alias\n";
+ close DATEI;
+ mkdir "data/online/rooms/$room", 0777;
+ }
+ &write_file_new("data/online/rooms/$room/$alias");
+ print DATEI time;
+ close DATEI;
+ &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen
+ my $provetime = <DATEI>;
+ close DATEI;
+ if ($provetime < (time - 30)) {
+ &write_file_new("data/online/prove");
+ print DATEI time;
+ close DATEI;
+ &rm_alias("data/online/users");
+ &rm_rooms;
+ }
+}
\ No newline at end of file diff --git a/0.4.2/push.pl b/0.4.2/push.pl new file mode 100644 index 0000000..5ae82c5 --- /dev/null +++ b/0.4.2/push.pl @@ -0,0 +1,97 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+CGI->compile(':all');
+$q = new CGI;
+
+$| = 1; # Cache von Perl ausschalten
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkid($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title - Created & Copyright by Paul C. Bütow $tmp\n");
+
+ if (-f "data/user/memos/$alias") { # Nach Memonachrichten checken!
+ print "\n<br>";
+ &read_file("data/user/memos/$alias");
+ my $memos = <DATEI>;
+ close DATEI;
+ print $memos;
+ unlink("data/user/memos/$alias");
+ }
+ my $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+ print $q->br;
+ open (MSGFILE, $msgfile);
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) { # Nach 15 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen&tmpid=$tmpid\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.4.2/setup.sh b/0.4.2/setup.sh new file mode 100644 index 0000000..d076ded --- /dev/null +++ b/0.4.2/setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +mkdir 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/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 * +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.jpg ../../htdocs/yChat/ +echo +echo yChat Setup beendet ... +echo Created and copyrighted by Paul C. Bütow aka Snooper +echo + diff --git a/0.4.2/y.gif b/0.4.2/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.4.2/y.gif diff --git a/0.4.2/y_.gif b/0.4.2/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.4.2/y_.gif diff --git a/0.4.3a/CREDITS.txt b/0.4.3a/CREDITS.txt new file mode 100644 index 0000000..b1a6610 --- /dev/null +++ b/0.4.3a/CREDITS.txt @@ -0,0 +1,26 @@ +############################## yChat.de SETUP ###############################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.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 "Ferlaufform-JavaScripts" im
+ Texteingabeframe und für die technische Umsetzung, daß sich das
+ Inputframe bei jedem Textposting nicht wieder reloadet.
+ ( www.anklepper.de ).
+
+ - Dave aka Truhe, für die Erstellung der Farbtabelle unter Chatoptionen inkl.
+ Auswähl-JavaScript!
+ ( maligree.yi.org )
+
+ - Michi aka Snoopy, für das Testen des Skripts auf seinem Server.
+ ( www.berlin-singeltreff.de ).
+
+ - Florian B. aka RocketKid für designtechnische Anregungen.
+ ( www.Rocket-Kid.de und www.proa.de )
+
+ - Larry Wall, für die Erfindung von Perl !
+
+ - Stefan Münz, für die Erstellung von SelfHTML !
diff --git a/0.4.3a/README.txt b/0.4.3a/README.txt new file mode 100644 index 0000000..a4dda3c --- /dev/null +++ b/0.4.3a/README.txt @@ -0,0 +1,35 @@ +############################## yChat.de README ##############################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.credits.yChat.de => Creditsliste
+ www.download.yChat.de => Das Skript zum downloaden
+ www.readme.yChat.de => Allgemeine Bedingungen usw.
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.setup.yChat.de => Installationsdokumentation
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript im Einsatz
diff --git a/0.4.3a/SETUP.txt b/0.4.3a/SETUP.txt new file mode 100644 index 0000000..b133af0 --- /dev/null +++ b/0.4.3a/SETUP.txt @@ -0,0 +1,102 @@ +############################## yChat.de SETUP ###############################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+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 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.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
\ No newline at end of file diff --git a/0.4.3a/TODO.txt b/0.4.3a/TODO.txt new file mode 100644 index 0000000..59d9e3e --- /dev/null +++ b/0.4.3a/TODO.txt @@ -0,0 +1,24 @@ +Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - Löschung aller Chatter, die sich seit 60 Tagen nicht mehr
+ eingelogt haben.
+
+ - IP-Adressen ver-/entbannen.
+
+ - E-Mail zusendung bei verlorenem Passwort.
+
+ - Eine Top 20 (Onlinezeit) der Chatter
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.4.3a/UPDATES.txt b/0.4.3a/UPDATES.txt new file mode 100644 index 0000000..c7dcdcf --- /dev/null +++ b/0.4.3a/UPDATES.txt @@ -0,0 +1,136 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.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.3a/colors.sno b/0.4.3a/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.3a/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.3a/config.pm b/0.4.3a/config.pm new file mode 100644 index 0000000..9a54fcf --- /dev/null +++ b/0.4.3a/config.pm @@ -0,0 +1,303 @@ +# yChat - Copyright by Paul C. Bütow
+
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$datum = "30.12.2k";
+$version = "0.4.3";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-color: 005146 }
+ body.blank { background-color: 000000 }
+ body.online { background-color: 000000 }
+ body.log { 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; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ 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 im aktuellen Raum $room posten.
+ my ($room,$msg2post,$secroom) = @_;
+ my @rooms = $room;
+if ($room ne $secroom) {
+ my @rooms = ($room,$secroom);
+}
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ open (DATEI,">>data/msgs/$alias2post") || &error("Konnte $file2write nicht öffnen");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log($msg2post) if ($room eq "Cyberbar");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach $alias2post (@dir) {
+ if (-f "data/online/users/$alias2post") {
+ open (DATEI,">>data/msgs/$alias2post") || &error("Konnte $file2write nicht öffnen");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log($msg2post);
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($msg2log) = @_;
+ &zeit;
+ &write_file("data/logs/$day.$month.$year");
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen!");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub check_online {
+ open(PROVE,">data/online/prove");
+ print PROVE time;
+ close PROVE;
+ opendir(RAUMDIR, "data/online/rooms");
+ @raumdir = readdir(RAUMDIR);
+ closedir(RAUMDIR);
+ foreach $raum (@raumdir) {
+ opendir(BENUTZERDIR, "data/online/rooms/$raum");
+ @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");
+ $benutzerstamp = <BENUTZER>;
+ close BENUTZER;
+ if ($benutzerstamp < (time - 40)) {
+ unlink("data/online/$raum/$benutzer");
+ open (BENUTZER2,"<data/online/users/$benutzer");
+ $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");
+ }
+ }
+}
+
+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");
+ unlink("data/msgs/$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_removeid { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkid { # TmpID überprüfen
+ my ($alias2check) = @_;
+ &read_file("data/online/ident/$alias2check");
+ my @idfile = <DATEI>;
+ close DATEI;
+ if ($idfile[1] ne $tmpid) {
+ &error("Falsche TempID ! Du bist nicht befugt zu handeln !");
+ }
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = undef;
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten
\ No newline at end of file diff --git a/0.4.3a/help.sno b/0.4.3a/help.sno new file mode 100644 index 0000000..b2ac529 --- /dev/null +++ b/0.4.3a/help.sno @@ -0,0 +1,58 @@ +<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>/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 jedeglich 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=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> +<tr><td><div><font color=yellow>ADM</font></div></td><td><div>/ow <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Oberwächter ernennen</div></td></tr> +<tr><td><div><font color=yellow>ADM</font></div></td><td><div>/row <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> die Oberwächterrechte entziehen</div></td></tr> +<tr><td><div><font color=yellow>ADM</font></div></td><td><div>/pw <font color=red>Alias</font></div></td><td><div>Zeigt Zugangspasswort von <font color=red>Alias</font> an</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.3a/htdocs.pl b/0.4.3a/htdocs.pl new file mode 100644 index 0000000..f3b5b10 --- /dev/null +++ b/0.4.3a/htdocs.pl @@ -0,0 +1,221 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+$var = $q->param("var");
+if ($var eq "help_html") {
+ &printfile("help.sno","Alle Chatbefehle");
+} elsif ($var eq "logo_html") {
+ &start_html("Logo");
+ print "<layer top=-3 left=0><div style=\"position:absolute; top:5; left:10\">",
+ "<img src=\"$gfxpath/y_.gif\"></div></layer>";
+ $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);
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ &printfile($tmp,"blank","log");
+ }
+} 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;
+ sleep 2;
+ &remove_online($alias,$room);
+ &secure_removeid($alias);
+ 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>
+ <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")'>Logdateien</a>
+ <a href="http://www.updates.yChat.de" target="Updates">Updates</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>
+</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
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ my $room = $_;
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ &list_dir("data/online/rooms/$room",2);
+ local $nr = $#dir2-1;
+ print $q->b( $_ ),
+ " $door ($nr) Raumthema: $rstat[1]",
+ $q->br;
+ foreach(@dir2) {
+ if ($_ ne ".." && $_ ne ".") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_&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
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ),
+ $q->br;
+ &list_dir("data/logs");
+ my @sortedir = sort(@dir);
+ foreach(@sortedir) {
+ if (-f "data/logs/$_") {
+ print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_&tmpid=$tmpid",
+ -target=>"_new" },
+ "$_" ),
+ " ";
+ }
+ }
+ } else {
+ print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ",
+ "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde." ),
+ $q->hr;
+ &printfile("data/htdocs/logs_html");
+ }
+ print
+ $q->end_html;
+}
+
+sub superuser_html { # Zeigt an, wer Superuser ist
+ &start_html("Superuser");
+ print "<div>Hallo $alias. Du bist als ";
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ print
+ $q->b( "Oberwächter" ),
+ " (OW) eingetragen.</div>",
+ $q->hr;
+ } elsif ( $hirachie 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.3a/index.pl b/0.4.3a/index.pl new file mode 100644 index 0000000..7593428 --- /dev/null +++ b/0.4.3a/index.pl @@ -0,0 +1,408 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header; # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUFGERUFEN WERDEN?##
+#####################################
+
+$var = $q->param("var");
+$alias = $q->param("alias");
+$id = $q->param("id");
+$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;
+&read_file("data/count");
+ $counter = <DATEI>;
+close DATEI;
+$counter++;
+&write_file_new("data/count");
+ print DATEI $counter;
+close DATEI;
+&list_dir("data/online/users");
+my $logtin = $#dir-1;
+&list_dir("data/user/options",2);
+my $users = $#dir2-1;
+&start_html("Created & Copyright by Paul C. Bütow","start");
+print <<END;
+ <center>
+ <table width=500>
+ <tr>
+ <td>
+ <center>
+ <table>
+ <tr>
+ <td>
+ <img src="$gfxpath/y.gif">
+ </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:paul\@buetow.oxg.de">Paul C. Bütow</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="id" value="$id">
+ </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.
+my $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="id" value="$id">
+ </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";
+ &list_dir("data/user/options");
+ for (my $i=0; $i<=$#dir; $i++) {
+ if ($dir[$i] eq $alias) {
+ &read_file("data/user/options/$alias");
+ @datei = <DATEI>;
+ close DATEI;
+ chomp($datei[0]);
+ if ($datei[0] eq $id) {
+ &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist
+ @banned = <DATEI>;
+ close DATEI;
+ foreach(@banned) {
+ if ($_ eq "$alias\n") {
+ $tmp = "banned";
+ &login_html();
+ exit;
+ }
+ }
+ if ($datei[1] eq undef) {
+ $col = "ffffff";
+ }else {
+ $col = $datei[1];
+ }
+ if ($datei[2] eq undef) {
+ $secol = "ffffef";
+ }else {
+ $secol = $datei[2];
+ }
+ $tmpid = time;
+ &write_file_new("data/online/ident/$alias");
+ print DATEI $ENV{'REMOTE_ADDR'}."\n".$tmpid;
+ close DATEI;
+ &read_file("data/user/lastlogin/$alias");
+ my @lastlogin = <DATEI>;
+ close DATEI;
+ &write_file_new("data/user/lastlogin/$alias");
+ print DATEI time;
+ close DATEI;
+ &frameset_html;
+ exit;
+ } else {
+ $lognotexists = "false";
+ }
+ }
+ }
+ if ($lognotexists eq "true") {
+ }
+ &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite.
+}
+
+sub create_alias { # Erstellung eines neuen Benutzers.
+ if ($alias =~ /[\W]/ || $alias eq "") {
+ &create_alias_html("alias_prohibited");;
+ exit;
+ } elsif ($id ne $tmp) {
+ &create_alias_html("pw_wrong");
+ exit;
+ }
+ &list_dir("data/user/options");
+ for (my $i=0; $i<=$#dir; $i++) {
+ if ($dir[$i] eq $alias) {
+ &create_alias_html("alias_exists");
+ exit;
+ }
+ }
+ &write_file_new("data/user/options/$alias");
+ print DATEI $id."\n";
+ close DATEI;
+ &zeit;
+ &list_dir("data/user/options");
+ my $number = $#dir-1;
+ &post("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="main.pl?alias=$alias&var=input_html&room=Cyberbar&col=$col&secol=$secol&tmp=login&tmpid=$tmpid" scrolling="no">
+ </frameset>
+</frameset>
+</html>
+END
+}
diff --git a/0.4.3a/main.pl b/0.4.3a/main.pl new file mode 100644 index 0000000..010c58f --- /dev/null +++ b/0.4.3a/main.pl @@ -0,0 +1,899 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+$var = $q->param("var");
+$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");
+if ($var eq "input_html") {
+ &input_html;
+} elsif ($var eq "post_msg") {
+ $tmp = $q->param("tmp");
+ $msg = $q->param("msg");
+ $whisper = $q->param("whisper");
+ &post_msg;
+} else {
+ &error("Parameter fehlt");
+}
+
+sub input_html { # Eingabemaske für den Chat.
+ if ($tmp eq "login") {
+ &remove_rooms;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>");
+ }
+ my $whisper = @_;
+ $whisper = $q->param('whisper') if ($whisper == 0);
+print <<END;
+<html>
+ <head>
+ <script language="JavaScript">
+
+maxVerlauf = 10; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+fullVerlauf = new Array( maxVerlauf );
+
+function delout()
+{
+ addVerlauf( document.inf.msg.value );
+ document.inf.submit(); // Formular absenden
+ document.inf.msg.focus(); // Fukus in das Eingabeform
+ document.inf.msg.select(); // Text im Eigabeform markieren
+ return false;
+}
+function CheckAuswahl()
+{
+ id = document.verlaufform.verlauf.selectedIndex;
+
+ if( fullVerlauf[ id-1 ] == null ) // Falls das Feld leer ist
+ return false; // Aufruf ignorieren
+
+ document.inf.msg.value = fullVerlauf[ id-1 ];
+ document.inf.msg.focus();
+
+ return true;
+}
+function addVerlauf( msg )
+{
+ if( msg == "" ) // Falls msg leer
+ return false; // Aufruf ignorieren
+
+ 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];
+ }
+ if( msg.length > maxPreview )
+ pre = msg.slice( 0, maxPreview-3 ) + "...";
+ else
+ pre = msg;
+
+ document.verlaufform.verlauf.options[ maxVerlauf ].text = pre; // Neue Vorschau anfügen
+ fullVerlauf[ maxVerlauf-1 ] = msg; // Neuen Eintrag anfügen
+
+// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag
+ document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (Überschrift)
+}
+
+ </script>
+$style
+ </head>
+<body class="blank" onload="document.inf.msg.focus();">
+ <div align="left">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>
+ <form name="inf" target="reload" action="main.pl" method="GET" onsubmit="return delout()">
+ <input type="hidden" name="var" value="post_msg">
+ <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">
+ </form>
+ </td>
+ <td>
+ <form name="verlaufform">
+ <select size="1" name="verlauf" size="40" onChange="CheckAuswahl()">
+ <option value>- Nachrichten-Verlauf -</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ </select>
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>
+END
+}
+
+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 "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ } elsif ($action eq "change_colors") {
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol&tmpid=$tmpid\",\"menu\");";
+ print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "whisper") {
+ print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "away") {
+ print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&tmp=noaway&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "noaway") {
+ &zeit;
+ &post("$room,<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>");
+ print "open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");";
+ } elsif ($action eq "quit") {
+ print "open(\"index.pl?tmp=quit\",\"_top\");";
+ }
+ print "</script></head><body bgcolor=$col>";
+ print
+ $q->end_html;
+}
+
+sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde.
+ if ($tmp eq "noaway") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat sich zurück gemeldet ... </font></i>");
+ &post_prv($alias,"<script language=\"JavaScript\">open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");</script>");
+ }
+ $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren
+ if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht
+ &post($room,"<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>");
+ &reload_html($whisper,$tmp);
+ } else {
+ if ($tmp eq "noaway") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat sich zurück gemeldet ... </font></i>");
+ &post_prv($alias,"<script language=\"JavaScript\">open(\"main.pl?var=input_html&alias=$alias&col=$col&secol=$secol&room=$room&whisper=$whisper&tmpid=$tmpid\",\"input\");</script>");
+ }
+ &cmd($msg);
+ }
+}
+
+sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können.
+ $_[0] = $_[0]." ";
+ $_[0] = substr($_[0], 1, length($_[0])-1);
+ my @cmd = split(/ /, $_[0]);
+ my $cmd = substr($_[0],0 , index($_[0], " "));
+ my ($action);
+#############>- 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. Created by Paul C. Bütow 2k.</font>");
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde
+ my $away_msg = "";
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$away_msg</font> ) ...</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($whisper);
+ exit;
+#############>- FARBEN WECHSELN -<
+ } elsif ($cmd eq "col") {
+ $col = $cmd[1];
+ my $tmpsecol = $cmd[2];
+ if ($tmpsecol eq "") {
+ $secol = $col
+ } else {
+ $secol = $tmpsecol;
+ }
+ &read_file("data/user/options/$alias");
+ my @pro = <DATEI>;
+ close DATEI;
+ &write_file_new("data/user/options/$alias");
+ print DATEI $pro[0]."".$col."\n".$secol;
+ close DATEI;
+ &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($whisper);
+ exit;
+#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
+ } elsif ($cmd eq "j") {
+ &change_room("j",$cmd[1],$room);
+ &reload_html($whisper,"change_room");
+ exit;
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ if ($cmd eq "m") {
+ &post($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($whisper);
+ exit;
+#############>- MEMO SCHREIBEN -<
+ } elsif ($cmd eq "memo") {
+ my $alias2memo = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if(-f "data/user/options/$alias2memo") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $memo_msg = $memo_msg." ".$cmd[$i];
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ &write_file("data/user/memos/$alias2memo");
+ print DATEI "<font size=2 color=ffffff>(<font color=red>$day.$month. - $hours:$min:$sec</font>) $alias hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>";
+ close DATEI;
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>");
+ &reload_html($whisper);
+ exit;
+#############>- FLÜSTERN ( Auch mit '/' ) -<
+ } elsif ($cmd eq "msg" || $cmd eq "") {
+ my ($alias2post,$msg2post) = ($cmd[1],"");
+ if ($cmd eq "msg") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $action = "whisper";
+ } else {
+ $alias2post = $whisper;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ }
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ if ($_ eq $alias2post) {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &write_file("data/msgs/$alias");
+ print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &reload_html($alias2post,$action);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>");
+#############>- TOTALONLINEZEIT VON ALIAS ANZEIGEN -<
+ } elsif ($cmd eq "online") {
+ my $alias2prove= $cmd[1];
+ if (-f "data/user/counts/$alias2prove.online") {
+ &read_file("data/user/counts/$alias2prove.online");
+ my $online = <DATEI>;
+ close DATEI;
+ 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>hat z.Z. keine Statistiken !</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &reload_html($whisper,"quit");
+ &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;
+#############>- 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($whisper);
+ exit;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my ($msg2scream,$msg2post);
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ $msg2post = "\U$msg2scream";
+ &post($room,"<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>");
+ &reload_html($whisper);
+ exit;
+#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGELOGT HAT -<
+ } elsif ($cmd eq "seen") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if (-f "data/user/lastlogin/$alias2prove") {
+ &read_file("data/user/lastlogin/$alias2prove");
+ my $lastlogin = <DATEI>;
+ close DATEI;
+ my $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>");
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2prove <font color=ffffff> hat z.Z. keine Statistiken !</font></font>");
+ &reload_html($whisper);
+ exit;
+#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -<
+ } elsif ($cmd eq "w") {
+ &list_dir("data/online/rooms/$room");
+ &read_file("data/online/rstat/$room");
+ my @r_stat = <DATEI>;
+ close DATEI;
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($r_stat[0] eq "1\n");
+ my ($is,$nr) = ("t",0);
+ foreach(@dir) {
+ if (-f "data/online/rooms/$room/$_") {
+ $personen = $personen." ".$_;
+ $nr++;
+ }
+ }
+ &post_prv($alias,"<font size=2 color=ffffff>$room $door ($nr) [".$r_stat[1]."] : <font color=ffa500>$personen</font></font>");
+ &reload_html($whisper);
+ exit;
+ #############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -<
+ } elsif ($cmd eq "wc" || $cmd eq "wc/") {
+ $raum = $cmd[1];
+ if ($raum eq "" && $cmd eq "wc") {
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/users/$_");
+ }
+ my $nr = ($#dir-1);
+ my ($nrs,$is) = ("","ist");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "sind";
+ }
+ &post_prv("$alias","<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;
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ &list_dir("data/online/rooms/$_",2);
+ &read_file("data/online/rstat/$_");
+ my @rstat = <DATEI>;
+ close DATEI;
+ 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><td><font size=2 color=ffffff>";
+ 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;
+ &list_dir("data/online/rooms/$raum");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_");
+ }
+ my ($nr,$is) = (($#dir-1),"t");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "n";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -<
+ } elsif ($cmd eq "wj" || $cmd eq "ju") {
+ my $alias2search = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum");
+ foreach $user (@dir2) {
+ if (-f "data/online/rooms/$raum/$user") {
+ if ($user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<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($whisper);
+ exit;
+#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -<
+
+
+
+
+#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -<
+ } elsif ($cmd eq "l") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $lock = "0\n";
+ &zeit;
+ if ($room eq "Cyberbar") {
+ &post($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];
+ }
+ write_file_new("data/online/rstat/$room");
+ print DATEI $lock;
+ close DATEI;
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- RAUMBESETZER ERNENNEN -<
+ } elsif ($cmd eq "su") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2su = $cmd[1];
+ &list_dir("data/online/rooms/$room");
+ foreach(@dir) {
+ if ($_ eq $alias2su) {
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ &hirachie($alias2su);
+ &prove_besetzer($alias2su,$room);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ &reload_html($whisper);
+ &post_prv($alias,"<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>");
+ &write_file("data/online/rstat/$room");
+ print DATEI $alias2su."\n";
+ close DATEI;
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- RAUMBESETZER ENTNENNEN -<
+ } elsif ($cmd eq "rsu") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2rsu = $cmd[1];
+ &read_file("data/online/rstat/$room");
+ my @rstat = <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");
+ }
+ &write_file_new("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($whisper);
+ exit;
+#############>- RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "t") {
+ &prove_besetzer($alias,$room);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") {
+ my $theme;
+ &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];
+ }
+ write_file_new("data/online/rstat/$room");
+ print DATEI $theme;
+ close DATEI;
+ }
+ &reload_html($whisper);
+ exit;
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN BZW. ENTBANNEN -<
+ } elsif ($cmd eq "ban" || $cmd eq "rban") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ my ($alias2handle,$registriert) = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ $registriert = "true" if ($_ eq $alias2handle);
+ }
+ if ($registriert ne "true") {
+ if ($cmd eq "ban") {
+ if ($alias2handle ne "") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>");
+ } else {
+ &read_file("data/ban");
+ my @banned = <DATEI>;
+ my ($benutzer);
+ my $nr = $#banned+1;
+ close DATEI;
+ foreach(@banned) {
+ $benutzer = $benutzer." ".$_;
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>");
+ }
+ &reload_html($whisper);
+ exit;
+ }
+ &read_file("data/ban");
+ my @banlist = <DATEI>;
+ close DATEI;
+ foreach(@banlist) {
+ if ($_ eq "$alias2handle\n") {
+ if ($cmd eq "ban") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>");
+ } else {
+ my $banned = "false";
+ foreach(@banlist) {
+ $banned = "true" if ($_ eq "$alias2handle\n");
+ }
+ if ($banned eq "true") {
+ my @newbanlist;
+ foreach(@banlist) {
+ push @newbanlist,$_ if ($_ ne "$alias2handle\n");
+ }
+ &write_file_new("data/ban");
+ print DATEI @newbanlist;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>");
+ }
+ }
+ &reload_html($whisper);
+ exit;
+ }
+ }
+ if ($cmd eq "ban") {
+ &hirachie($alias2handle);
+ if ($hirachie ne "ow" || $hirachie eq "wa") {
+ &write_file("data/ban");
+ print DATEI "$alias2handle\n";
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font></font>");
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>");
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "ip") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/online/ident");
+ foreach(@dir) {
+ if ($_ eq $alias2prove) {
+ &read_file("data/online/ident/$_");
+ local $ipnr = <DATEI>;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2);
+ foreach $chatter (@dir2) {
+ if ($chatter eq $alias2kick) {
+ &hirachie($alias2kick);
+ if ($hirachie 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 ($hirachie 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($whisper);
+ 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($whisper);
+ exit;
+#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
+ } elsif ($cmd eq "kill") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2kill = $cmd[1];
+ &hirachie($alias2kill);
+ if ($hirachie 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 ($hirachie 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($whisper);
+ exit;
+ #############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -<
+ } elsif ($cmd eq "sys") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $sys_msg = $sys_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post_all("<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>");
+ }
+ &reload_html($whisper);
+ exit;
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN -<
+ } elsif ($cmd eq "wa") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2wa = $cmd[1];
+ &hirachie($alias2wa);
+ if ($hirachie 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($whisper);
+ exit;
+ } elsif ($hirachie 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($whisper);
+ 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($whisper);
+ 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($whisper);
+ exit;
+ }
+#############>- ALIAS DIE WÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "rwa") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2rwa = $cmd[1];
+ &hirachie($alias2rwa);
+ if ($hirachie 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($whisper);
+ exit;
+ }
+#############>- ADMINISTRATORBEFEHLE -<
+#############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -<
+ } elsif ($cmd eq "ow" && $alias eq "Snooper") {
+ my $alias2ow = $cmd[1];
+ &hirachie($alias2ow);
+ if ($hirachie 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($whisper);
+ exit;
+ } elsif ($hirachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2ow <font color=ffffff>ist bereits als Oberwächter eingetragen!</font></font>");
+ &reload_html($whisper);
+ 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($whisper);
+ 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($whisper);
+ exit;
+#############>- ALIAS DIE OBERWÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "row" && $alias eq "Snooper") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2row = $cmd[1];
+ &hirachie($alias2row);
+ if ($hirachie 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($whisper);
+ 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($whisper);
+ exit;
+ }
+ &post_prv($alias,"<font size=2 color=ffa500>$pw2show <font color=ffffff> existiert nicht in der Benutzerdatenbank !</font></font>");
+ &reload_html($whisper);
+ exit;
+#############>- SYSTEMMELDUNG POSTEN -<
+ } elsif ($cmd eq "cool" && $alias eq "Snooper") {
+ 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($whisper);
+ exit;
+#############>- ENDE DER CHATBEFEHLE -<
+}
+&reload_html($whisper,$action);
+}
+
+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") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie 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;
+ }
+ }
+ $room = $oldroom;
+ &zeit;
+ if ($method eq "j") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &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>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ } elsif ($method eq "ju") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &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>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ }
+ 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";
+ &read_file("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");
+ }
+}
\ No newline at end of file diff --git a/0.4.3a/main2.pl b/0.4.3a/main2.pl new file mode 100644 index 0000000..6b4ffb4 --- /dev/null +++ b/0.4.3a/main2.pl @@ -0,0 +1,601 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+
+$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";
+ }
+ if (-e "$tmpath") {
+ &read_file("$tmpath");
+ my @datei = <DATEI>;
+ close DATEI;
+ pop(@datei) if ($#datei > 99);
+ my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ @newdatei = ("@newdatei", "@datei");
+ &write_file_new("$tmpath");
+ print DATEI @newdatei;
+ close DATEI;
+ } else {
+ &write_file_new("$tmpath");
+ print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ close DATEI;
+ }
+ 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
+ &read_file("data/user/gbooks/$alias");
+ my @gbfile = <DATEI>;
+ close DATEI;
+ my @newgbfile = ();
+ for($i=0; $i <= $#gbfile; $i++) {
+ push(@newgbfile,$gbfile[$i]) if ($i != $id);
+ }
+ &write_file_new("data/user/gbooks/$alias");
+ print DATEI @newgbfile;
+ close DATEI;
+ &alias_html("rm_ok");
+}
+
+sub list_alias_html { # Liste aller Benutzer
+ &start_html("Alle Benutzer");
+ &list_dir("data/user/options");
+ my @liste = sort(@dir);
+ my $nr = $#dir-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];
+ local $counter = undef;
+ &read_file("data/user/counts/$tmp");
+ $counter = <DATEI>;
+ close DATEI;
+ $counter++;
+ &write_file_new("data/user/counts/$tmp");
+ print DATEI $counter."\n".$counter[1];
+ close DATEI;
+ &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
+}
+ &read_file("data/user/profiles/$tmp");
+ @data = <DATEI>;
+ close DATEI;
+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") {
+ &read_file("data/user/options/$alias");
+ } elsif ($method eq "edit_profile_html") {
+ &read_file("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=input_html&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","input");
+ 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
+ &read_file("colors.sno");
+ @colors = <DATEI>;
+ close DATEI;
+ 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>");
+ &write_file_new("data/user/profiles/$alias");
+ print DATEI $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 DATEI;
+ &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>");
+ &write_file_new("data/user/options/$alias");
+ print DATEI $id."\n".$col."\n".$secol;
+ close DATEI;
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
diff --git a/0.4.3a/online.pl b/0.4.3a/online.pl new file mode 100644 index 0000000..b77f845 --- /dev/null +++ b/0.4.3a/online.pl @@ -0,0 +1,71 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+$room = $q->param("room");
+
+&secure_checkid($alias);
+
+# Onlinezeit zählen !
+&read_file("data/online/users/$alias");
+ my $oldstamp = <DATEI>;
+close DATEI;
+ if ($oldstamp > (time - 60)) {
+ &read_file("data/user/counts/$alias.online");
+ my $online = <DATEI>;
+ close DATEI;
+ my $total = (time-$oldstamp+$online);
+ &write_file_new("data/user/counts/$alias.online");
+ print DATEI $total;
+ close DATEI;
+ }
+##### ENDE
+
+&start_html("Online","online");
+&online($alias,$room);
+&list_dir("data/online/rooms/".$room);
+print
+ $q->div( "$room:" ),
+ "<font size=1 color=ffffef face=arial>";
+ foreach $online (@dir) {
+ 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) = @_;
+ &write_file_new("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 {
+ &write_file_new("data/online/rstat/$room"); # Raumbesetzerstatus setzen
+ print DATEI "0\n\n$alias\n";
+ close DATEI;
+ }
+ &write_file_new("data/online/rooms/$room/$alias");
+ print DATEI time;
+ close DATEI;
+ &read_file("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.3a/ow b/0.4.3a/ow new file mode 100644 index 0000000..806a90d --- /dev/null +++ b/0.4.3a/ow @@ -0,0 +1,7 @@ +Snooper +Truhe +RocketKid +Anklepper +Peacemaker +bilke +Nilo diff --git a/0.4.3a/push.pl b/0.4.3a/push.pl new file mode 100644 index 0000000..5b037bf --- /dev/null +++ b/0.4.3a/push.pl @@ -0,0 +1,99 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+CGI->compile(':all');
+$q = new CGI;
+
+$| = 1; # Cache von Perl ausschalten
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+&secure_checkid($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title - Created & Copyright by Paul C. Bütow $tmp\n");
+
+ if (-f "data/user/memos/$alias") { # Nach Memonachrichten checken!
+ print "\n<br>";
+ &read_file("data/user/memos/$alias");
+ my $memos = <DATEI>;
+ close DATEI;
+ print $memos;
+ unlink("data/user/memos/$alias");
+ }
+ my $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+ print $q->br;
+ open (MSGFILE, $msgfile);
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) { # Nach 15 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen&tmpid=$tmpid\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.4.3a/setup.sh b/0.4.3a/setup.sh new file mode 100644 index 0000000..1859d19 --- /dev/null +++ b/0.4.3a/setup.sh @@ -0,0 +1,45 @@ +#!/bin/sh +echo +echo yChat wird konfiguriert! +echo +mkdir 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/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/ +echo +echo yChat Setup beendet ... +echo Created and Copyright by Paul C. Bütow +echo + diff --git a/0.4.3a/y.gif b/0.4.3a/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.4.3a/y.gif diff --git a/0.4.3a/y_.gif b/0.4.3a/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.4.3a/y_.gif diff --git a/0.4.4a3/CREDITS.txt b/0.4.4a3/CREDITS.txt new file mode 100644 index 0000000..2304a4c --- /dev/null +++ b/0.4.4a3/CREDITS.txt @@ -0,0 +1,22 @@ +########################### yChat.de CREDITS ################################
+## Copyright by Paul C. Bütow 200 - 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 "Ferlaufform-JavaScripts" im
+ Texteingabeframe und für die technische Umsetzung, daß sich das
+ Inputframe bei jedem Textposting nicht wieder reloadet.
+ Für ein nettes JavaScript, welches erlaubt, Formularwerte
+ frameübergreifend zu ändern.
+ ( www.anklepper.de ).
+
+ - Dave aka Truhe, für die Erstellung der Farbtabelle unter Chatoptionen inkl.
+ Auswähl-JavaScript!
+ ( maligree.yi.org )
+
+ - Larry Wall, für die Erfindung von Perl !
+
+ - Stefan Münz, für die Erstellung von SelfHTML !
diff --git a/0.4.4a3/README.txt b/0.4.4a3/README.txt new file mode 100644 index 0000000..2e943ff --- /dev/null +++ b/0.4.4a3/README.txt @@ -0,0 +1,36 @@ +############################## yChat.de README ##############################
+## Copyright by Paul C. Bütow 200 - 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 servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.credits.yChat.de => Creditsliste
+ www.download.yChat.de => Das Skript zum downloaden
+ www.readme.yChat.de => Allgemeine Bedingungen usw.
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.setup.yChat.de => Installationsdokumentation
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript im Einsatz
diff --git a/0.4.4a3/SETUP.txt b/0.4.4a3/SETUP.txt new file mode 100644 index 0000000..e46056c --- /dev/null +++ b/0.4.4a3/SETUP.txt @@ -0,0 +1,133 @@ +############################## yChat.de SETUP ###############################
+## Copyright by Paul C. Bütow 200 - 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 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.4a3/TODO.txt b/0.4.4a3/TODO.txt new file mode 100644 index 0000000..306537f --- /dev/null +++ b/0.4.4a3/TODO.txt @@ -0,0 +1,38 @@ +############################## yChat.de TODO ################################
+## Copyright by Paul C. Bütow 200 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+
+Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Neue Befehle:
+ Für WÄs:
+ /sl $room - Einen anderen Raum öffnen/schliessen
+ /st $room $msg - Einen anderen Raum ein Thema ageben
+
+ - Nach 5 Minuten Inaktivität soll der Benutzer automatisch
+ auf "away" gesetzt werden.
+ Nach 20 Minuten Inaktivität soll der Benutzer automatisch
+ aus dem System ausgelogt werden.
+
+ - 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.
+
+ - Eine Top 20 (Onlinezeit) der Chatter
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.4.4a3/UPDATES.txt b/0.4.4a3/UPDATES.txt new file mode 100644 index 0000000..6ba8316 --- /dev/null +++ b/0.4.4a3/UPDATES.txt @@ -0,0 +1,150 @@ +########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow 200 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.4.4 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.4a3/colors.sno b/0.4.4a3/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.4a3/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.4a3/config.pm b/0.4.4a3/config.pm new file mode 100644 index 0000000..52e1500 --- /dev/null +++ b/0.4.4a3/config.pm @@ -0,0 +1,245 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$datum = "04.01.01";
+$version = "0.4.4";
+$title = "yChat [$version]";
+$gfxpath = "../../yChat";
+$style = <<ENDCSS;
+<style rel="stylesheet" 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; text-decoration: none }
+</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 im aktuellen Raum $room posten.
+ my ($room,$msg2post,$secroom) = @_;
+ local @rooms = $room;
+ @rooms = ($room,$secroom) if ($room ne $secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ opendir(ROOMDIR,"data/online/rooms/$room2post");
+ local @roomdir = readdir(ROOMDIR);
+ closedir(ROOMDIR);
+ foreach(@roomdir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ open (DATEI,">>data/msgs/$alias2post") || &error("Konnte $file2write nicht öffnen");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log($msg2post) if ($room eq "Cyberbar");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ opendir(USERDIR,"data/online/users");
+ local @userdir = readdir(USERDIR);
+ close(USERDIR);
+ foreach $alias2post (@userdir) {
+ if (-f "data/online/users/$alias2post") {
+ open (MSG,">>data/msgs/$alias2post") || &error("Konnte $file2write nicht öffnen");
+ print MSG "$msg2post<br>\n";
+ close MSG;
+ }
+ }
+ &log($msg2post);
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ local ($alias2post,$msg2post) = @_;
+ open(MSG,">>data/msgs/$alias2post");
+ print MSG "$msg2post<br>\n";
+ close MSG;
+}
+
+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");
+ }
+ }
+}
+
+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");
+ unlink("data/msgs/$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 hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = undef;
+ open(WA,"<data/wa");
+ @was = <WA>;
+ close WA;
+ foreach $wa (@was) {
+ if ($wa eq $alias2prove || $wa eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ open(OW,"<data/ow");
+ @ows = <OW>;
+ close OW;
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach $ow (@ows) {
+ if ($ow eq $alias2prove || $ow eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten
\ No newline at end of file diff --git a/0.4.4a3/help.sno b/0.4.4a3/help.sno new file mode 100644 index 0000000..1c14b76 --- /dev/null +++ b/0.4.4a3/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 jedeglich 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.4a3/htdocs.pl b/0.4.4a3/htdocs.pl new file mode 100644 index 0000000..fcc0f88 --- /dev/null +++ b/0.4.4a3/htdocs.pl @@ -0,0 +1,225 @@ +#!/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 "<layer top=-3 left=0><div style=\"position:absolute; top:5; left:10\">",
+ "<img src=\"$gfxpath/y_.gif\"></div></layer>";
+ $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);
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie 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>
+ <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")'>Logdateien</a>
+ <a href="http://www.updates.yChat.de" target="Updates">Updates</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>
+</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
+ &hirachie($alias);
+ if ($hirachie 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 ";
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ print
+ $q->b( "Oberwächter" ),
+ " (OW) eingetragen.</div>",
+ $q->hr;
+ } elsif ( $hirachie 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.4a3/index.pl b/0.4.4a3/index.pl new file mode 100644 index 0000000..141fb38 --- /dev/null +++ b/0.4.4a3/index.pl @@ -0,0 +1,406 @@ +#!/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>
+ <img src="$gfxpath/y.gif">
+ </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:paul\@buetow.oxg.de">Paul C. Bütow</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 {
+ $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.4a3/input.pl b/0.4.4a3/input.pl new file mode 100644 index 0000000..da91dcb --- /dev/null +++ b/0.4.4a3/input.pl @@ -0,0 +1,138 @@ +#!/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">
+
+maxVerlauf = 10; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+fullVerlauf = new Array( maxVerlauf );
+
+function delout()
+{
+ addVerlauf( document.inf.msg.value );
+ document.inf.submit(); // Formular absenden
+ document.inf.msg.focus(); // Fukus in das Eingabeform
+ document.inf.msg.select(); // Text im Eigabeform markieren
+ return false;
+}
+
+function CheckAuswahl()
+{
+ id = document.verlaufform.verlauf.selectedIndex;
+
+ if( fullVerlauf[ id-1 ] == null ) // Falls das Feld leer ist
+ return false; // Aufruf ignorieren
+
+ document.inf.msg.value = fullVerlauf[ id-1 ];
+ document.inf.msg.focus();
+
+ return true;
+}
+
+function addVerlauf( msg )
+{
+ if( msg == "" ) // Falls msg leer
+ return false; // Aufruf ignorieren
+
+ 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];
+ }
+ if( msg.length > maxPreview )
+ pre = msg.slice( 0, maxPreview-3 ) + "...";
+ else
+ pre = msg;
+
+ document.verlaufform.verlauf.options[ maxVerlauf ].text = pre; // Neue Vorschau anfügen
+ fullVerlauf[ maxVerlauf-1 ] = msg; // Neuen Eintrag anfügen
+
+// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag
+ document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (Überschrift)
+}
+
+ </script>
+
+$style
+<style type="text/css" media="all">
+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>
+ </head>
+<body class="blank" onload="document.inf.msg.focus();">
+ <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="var" value="post_msg">
+ <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">
+ </form>
+ </td>
+ <td>
+ <form name="verlaufform">
+ <select size="1" name="verlauf" size="40" onChange="CheckAuswahl()">
+ <option value>- Nachrichten-Verlauf -</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ </select>
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>
+END
diff --git a/0.4.4a3/main.pl b/0.4.4a3/main.pl new file mode 100644 index 0000000..030f76d --- /dev/null +++ b/0.4.4a3/main.pl @@ -0,0 +1,817 @@ +#!/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");
+$msg = $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>");
+ &post_prv($alias,"<script language=\"JavaScript\"> parent.input.document.inf.tmp.value = \"notaway\";</script>");
+}
+$msg =~ s#<#<\;#g;
+if (substr($msg,0,1) ne "/") {
+ &post($room,"<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>");
+ &reload_html($whisper,$tmp);
+} else {
+ &cmd($msg);
+}
+
+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 "</script></head><body bgcolor=$col>";
+ print
+ $q->end_html;
+exit 0;
+}
+
+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") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie 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;
+ }
+ }
+ $room = $oldroom;
+ &zeit;
+ if ($method eq "j") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &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>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ } elsif ($method eq "ju") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &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>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ }
+ 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. Created by Paul C. Bütow 2k.</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 = "";
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &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>");
+ &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") {
+ open(MSGS,">>data/msgs/$alias2post");
+ print MSGS "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close MSGS;
+ open(MSGS,">>data/msgs/$alias");
+ print MSGS "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close MSGS;
+ &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;
+ &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;
+#############>- 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");
+ local @rstat = <RSTAT>;
+ close RSTAT;
+ local $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ local ($is,$nr) = ("t",0);
+ opendir(DIR,"data/online/rooms/$room");
+ local @dir = readdir(DIR);
+ closedir(DIR);
+ foreach(@dir) {
+ if (-f "data/online/rooms/$room/$_") {
+ $personen = $personen." ".$_;
+ $nr++;
+ }
+ }
+ &post_prv($alias,"<font size=2 color=ffffff>Der aktuelle Raum: $room $door ($nr) [".$rstat[1]."] : <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;
+ 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);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie 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);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie 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;
+ &hirachie($alias2su);
+ &prove_besetzer($alias2su,$room);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie 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);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie 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);
+ &hirachie($alias);
+ if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie 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") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie 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") {
+ &hirachie($alias2ban);
+ if ($hirachie 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 ($hirachie 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") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie 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") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie 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/$_");
+ local $ipnr = <DATEI>;
+ close DATEI;
+ &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") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie 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) {
+ &hirachie($alias2kick);
+ if ($hirachie 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 ($hirachie 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") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2kill = $cmd[1];
+ &hirachie($alias2kill);
+ if ($hirachie 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 ($hirachie 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;
+ #############>- IN EINEN ANDEREN RAUM HINEINRUFEN -<
+ } elsif ($cmd eq "ss") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie 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;
+ }
+ #############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -<
+ } elsif ($cmd eq "sys") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $sys_msg = $sys_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post_all("<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>");
+ }
+ &reload_html;
+ exit;
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN -<
+ } elsif ($cmd eq "wa") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2wa = $cmd[1];
+ &hirachie($alias2wa);
+ if ($hirachie 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 ($hirachie 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") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2rwa = $cmd[1];
+ &hirachie($alias2rwa);
+ if ($hirachie 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];
+ &hirachie($alias2ow);
+ if ($hirachie 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 ($hirachie 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") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2row = $cmd[1];
+ &hirachie($alias2row);
+ if ($hirachie 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.4a3/main2.pl b/0.4.4a3/main2.pl new file mode 100644 index 0000000..36a0012 --- /dev/null +++ b/0.4.4a3/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.4a3/online.pl b/0.4.4a3/online.pl new file mode 100644 index 0000000..b6346c5 --- /dev/null +++ b/0.4.4a3/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.4a3/push.pl b/0.4.4a3/push.pl new file mode 100644 index 0000000..bb420f6 --- /dev/null +++ b/0.4.4a3/push.pl @@ -0,0 +1,96 @@ +#!/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);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title - Created & Copyright by Paul C. Bütow $tmp\n");
+
+if (-f "data/user/memos/$alias") {
+ print "\n<br>";
+ open(MEMOS,"<data/user/memos/$alias");
+ my $memos = <MEMOS>;
+ close MEMOS;
+ print $memos;
+ unlink("data/user/memos/$alias");
+}
+
+my $msgfile = "data/msgs/$alias";
+open(MSG,">$msgfile");
+ print MSG $q->br;
+close MSG;
+print $q->br;
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+open(MSGFILE,$msgfile);
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) {
+ print "\n<!--PING//-->";
+ $times = 0;
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen&tmpid=$tmpid\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.4.4a3/setup.sh b/0.4.4a3/setup.sh new file mode 100644 index 0000000..b3706b6 --- /dev/null +++ b/0.4.4a3/setup.sh @@ -0,0 +1,46 @@ +#!/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/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/ +echo +echo yChat Setup beendet ... +echo Created and Copyright by Paul C. Bütow +echo + diff --git a/0.4.4a3/y.gif b/0.4.4a3/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.4.4a3/y.gif diff --git a/0.4.4a3/y_.gif b/0.4.4a3/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.4.4a3/y_.gif diff --git a/0.4.5a/CREDITS.txt b/0.4.5a/CREDITS.txt new file mode 100644 index 0000000..b520354 --- /dev/null +++ b/0.4.5a/CREDITS.txt @@ -0,0 +1,21 @@ +########################### 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 "Ferlaufform-JavaScripts" im
+ Texteingabeframe und für die technische Umsetzung, daß sich das
+ Inputframe bei jedem Textposting nicht wieder reloadet.
+ Für ein nettes JavaScript, welches erlaubt, Formularwerte
+ frameübergreifend zu ändern.
+ Für die Erstellung der Flashanimationen.
+ ( www.anklepper.de ).
+
+ - Dave aka Truhe, für die Erstellung der Farbtabelle unter Chatoptionen inkl.
+ Auswähl-JavaScript!
+ ( maligree.yi.org )
+
+ - Larry Wall, für die Erfindung von Perl !
\ No newline at end of file diff --git a/0.4.5a/README.txt b/0.4.5a/README.txt new file mode 100644 index 0000000..2e943ff --- /dev/null +++ b/0.4.5a/README.txt @@ -0,0 +1,36 @@ +############################## yChat.de README ##############################
+## Copyright by Paul C. Bütow 200 - 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 servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.credits.yChat.de => Creditsliste
+ www.download.yChat.de => Das Skript zum downloaden
+ www.readme.yChat.de => Allgemeine Bedingungen usw.
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.setup.yChat.de => Installationsdokumentation
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript im Einsatz
diff --git a/0.4.5a/SETUP.txt b/0.4.5a/SETUP.txt new file mode 100644 index 0000000..dc93551 --- /dev/null +++ b/0.4.5a/SETUP.txt @@ -0,0 +1,133 @@ +############################## 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 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.5a/TODO.txt b/0.4.5a/TODO.txt new file mode 100644 index 0000000..8c9c445 --- /dev/null +++ b/0.4.5a/TODO.txt @@ -0,0 +1,33 @@ +############################## yChat.de TODO ################################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+
+Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Nach 5 Minuten Inaktivität soll der Benutzer automatisch
+ auf "away" gesetzt werden.
+ Nach 20 Minuten Inaktivität soll der Benutzer automatisch
+ aus dem System ausgelogt werden.
+
+ - 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.
+
+ - Eine Top 20 (Onlinezeit) der Chatter
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.4.5a/UPDATES.txt b/0.4.5a/UPDATES.txt new file mode 100644 index 0000000..c254a53 --- /dev/null +++ b/0.4.5a/UPDATES.txt @@ -0,0 +1,162 @@ +########################### 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.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.5a/colors.sno b/0.4.5a/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.5a/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.5a/config.pm b/0.4.5a/config.pm new file mode 100644 index 0000000..69cf341 --- /dev/null +++ b/0.4.5a/config.pm @@ -0,0 +1,233 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$datum = "18.01.01";
+$version = "0.4.5a";
+$title = "yChat [$version]";
+$gfxpath = "../../yChat";
+$style = <<ENDCSS;
+<style rel="stylesheet" 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; text-decoration: none }
+</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) = @_;
+ local @rooms = $room;
+ @rooms = ($room,$secroom) if ($room ne $secroom);
+ foreach(@rooms) {
+ open(MSGFILE,">>data/msgs/$_");
+ print MSGFILE "!<;".time."<;!<;!<;$msg2post<;\n";
+ close MSGFILE;
+ }
+ &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;
+ 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/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";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten
\ No newline at end of file diff --git a/0.4.5a/help.sno b/0.4.5a/help.sno new file mode 100644 index 0000000..558d4fd --- /dev/null +++ b/0.4.5a/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.5a/htdocs.pl b/0.4.5a/htdocs.pl new file mode 100644 index 0000000..6167fde --- /dev/null +++ b/0.4.5a/htdocs.pl @@ -0,0 +1,240 @@ +#!/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>
+ <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")'>Logdateien</a>
+ <a href="http://www.updates.yChat.de" target="Updates">Updates</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>
+</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.5a/index.pl b/0.4.5a/index.pl new file mode 100644 index 0000000..aeb6af2 --- /dev/null +++ b/0.4.5a/index.pl @@ -0,0 +1,418 @@ +#!/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:paul\@buetow.oxg.de">Paul C. Bütow</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 {
+ $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.5a/input.pl b/0.4.5a/input.pl new file mode 100644 index 0000000..2c5914e --- /dev/null +++ b/0.4.5a/input.pl @@ -0,0 +1,121 @@ +#!/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">
+
+maxVerlauf = 10; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+fullVerlauf = new Array( maxVerlauf );
+
+function delout()
+{
+ addVerlauf( document.inf.msg.value );
+ document.inf.submit(); // Formular absenden
+ document.inf.msg.focus(); // Fukus in das Eingabeform
+ document.inf.msg.select(); // Text im Eigabeform markieren
+ return false;
+}
+
+function CheckAuswahl()
+{
+ id = document.verlaufform.verlauf.selectedIndex;
+
+ if( fullVerlauf[ id-1 ] == null ) // Falls das Feld leer ist
+ return false; // Aufruf ignorieren
+
+ document.inf.msg.value = fullVerlauf[ id-1 ];
+ document.inf.msg.focus();
+
+ return true;
+}
+
+function addVerlauf( msg )
+{
+ if( msg == "" ) // Falls msg leer
+ return false; // Aufruf ignorieren
+
+ 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];
+ }
+ if( msg.length > maxPreview )
+ pre = msg.slice( 0, maxPreview-3 ) + "...";
+ else
+ pre = msg;
+
+ document.verlaufform.verlauf.options[ maxVerlauf ].text = pre; // Neue Vorschau anfügen
+ fullVerlauf[ maxVerlauf-1 ] = msg; // Neuen Eintrag anfügen
+
+// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag
+ document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (Überschrift)
+}
+
+ </script>
+
+$style
+ </head>
+<body class="blank" onload="document.inf.msg.focus();">
+ <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="var" value="post_msg">
+ <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">
+ </form>
+ </td>
+ <td>
+ <form name="verlaufform">
+ <select size="1" name="verlauf" size="40" onChange="CheckAuswahl()">
+ <option value>- Nachrichten-Verlauf -</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ </select>
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>
+END
diff --git a/0.4.5a/main.pl b/0.4.5a/main.pl new file mode 100644 index 0000000..66dc31a --- /dev/null +++ b/0.4.5a/main.pl @@ -0,0 +1,896 @@ +#!/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");
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b><;\n";
+ close MSGFILE;
+ &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") {
+# unlink("data/online/rooms/$oldroom/$alias");
+ &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") {
+# unlink("data/online/rooms/$oldroom/$alias");
+ &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;
+ }
+ 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 = "";
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &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>");
+ &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;
+ &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;
+#############>- 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/$_");
+ local $ipnr = <DATEI>;
+ close DATEI;
+ &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.5a/main2.pl b/0.4.5a/main2.pl new file mode 100644 index 0000000..36a0012 --- /dev/null +++ b/0.4.5a/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.5a/online.pl b/0.4.5a/online.pl new file mode 100644 index 0000000..b6346c5 --- /dev/null +++ b/0.4.5a/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.5a/push.pl b/0.4.5a/push.pl new file mode 100644 index 0000000..0157665 --- /dev/null +++ b/0.4.5a/push.pl @@ -0,0 +1,103 @@ +#!/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");
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+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>
+END
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title - Created & Copyright by Paul C. Bütow [PID: $$]<br>\n");
+
+if (-f "data/user/memos/$alias") {
+ open(MEMOS,"<data/user/memos/$alias");
+ my $memos = <MEMOS>;
+ close MEMOS;
+ print $memos;
+ unlink("data/user/memos/$alias");
+}
+
+###############################
+##ENDLOSSCHLEIFE FÜR DEN PUSH##
+###############################
+
+my $counter = 0;
+my $startime;
+OPENMSGFILE:
+$startime = time;
+
+if (-e "data/online/users/$alias") {
+ open(MSGFILE,"<data/msgs/$room");
+} else {
+ sleep 1;
+ goto OPENMSGFILE;
+}
+
+while (-e "data/online/users/$alias") {
+ 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") {
+ $room = $action;
+ close MSGFILE;
+ goto OPENMSGFILE;
+ }
+ print "$message<br>\n";
+ }
+ }
+ }
+ $counter++;
+ if ($counter > 14) {
+ print "<!--PING//-->\n";
+ $counter = 0;
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0);
+}
\ No newline at end of file diff --git a/0.4.5a/setup.sh b/0.4.5a/setup.sh new file mode 100644 index 0000000..4f875ed --- /dev/null +++ b/0.4.5a/setup.sh @@ -0,0 +1,48 @@ +#!/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/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.5a/y.gif b/0.4.5a/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.4.5a/y.gif diff --git a/0.4.5a/yIntro.swf b/0.4.5a/yIntro.swf Binary files differnew file mode 100644 index 0000000..d592826 --- /dev/null +++ b/0.4.5a/yIntro.swf diff --git a/0.4.5a/ySymbol.swf b/0.4.5a/ySymbol.swf Binary files differnew file mode 100644 index 0000000..2b899bb --- /dev/null +++ b/0.4.5a/ySymbol.swf diff --git a/0.4.5a/y_.gif b/0.4.5a/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.4.5a/y_.gif diff --git a/0.4.6/CREDITS.txt b/0.4.6/CREDITS.txt new file mode 100644 index 0000000..b520354 --- /dev/null +++ b/0.4.6/CREDITS.txt @@ -0,0 +1,21 @@ +########################### 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 "Ferlaufform-JavaScripts" im
+ Texteingabeframe und für die technische Umsetzung, daß sich das
+ Inputframe bei jedem Textposting nicht wieder reloadet.
+ Für ein nettes JavaScript, welches erlaubt, Formularwerte
+ frameübergreifend zu ändern.
+ Für die Erstellung der Flashanimationen.
+ ( www.anklepper.de ).
+
+ - Dave aka Truhe, für die Erstellung der Farbtabelle unter Chatoptionen inkl.
+ Auswähl-JavaScript!
+ ( maligree.yi.org )
+
+ - Larry Wall, für die Erfindung von Perl !
\ No newline at end of file diff --git a/0.4.6/README.txt b/0.4.6/README.txt new file mode 100644 index 0000000..2e943ff --- /dev/null +++ b/0.4.6/README.txt @@ -0,0 +1,36 @@ +############################## yChat.de README ##############################
+## Copyright by Paul C. Bütow 200 - 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 servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.credits.yChat.de => Creditsliste
+ www.download.yChat.de => Das Skript zum downloaden
+ www.readme.yChat.de => Allgemeine Bedingungen usw.
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.setup.yChat.de => Installationsdokumentation
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript im Einsatz
diff --git a/0.4.6/SETUP.txt b/0.4.6/SETUP.txt new file mode 100644 index 0000000..b1e17f8 --- /dev/null +++ b/0.4.6/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.6/TODO.txt b/0.4.6/TODO.txt new file mode 100644 index 0000000..8c9c445 --- /dev/null +++ b/0.4.6/TODO.txt @@ -0,0 +1,33 @@ +############################## yChat.de TODO ################################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+
+Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Nach 5 Minuten Inaktivität soll der Benutzer automatisch
+ auf "away" gesetzt werden.
+ Nach 20 Minuten Inaktivität soll der Benutzer automatisch
+ aus dem System ausgelogt werden.
+
+ - 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.
+
+ - Eine Top 20 (Onlinezeit) der Chatter
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.4.6/UPDATES.txt b/0.4.6/UPDATES.txt new file mode 100644 index 0000000..c3f21b9 --- /dev/null +++ b/0.4.6/UPDATES.txt @@ -0,0 +1,177 @@ +########################### 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.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.6/colors.sno b/0.4.6/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.6/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.6/config.pm b/0.4.6/config.pm new file mode 100644 index 0000000..f66fa0f --- /dev/null +++ b/0.4.6/config.pm @@ -0,0 +1,241 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$datum = "18.01.01";
+$version = "0.4.6";
+$title = "yChat [$version]";
+$gfxpath = "../../yChat";
+$style = <<ENDCSS;
+<style rel="stylesheet" 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; text-decoration: none }
+</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.6/help.sno b/0.4.6/help.sno new file mode 100644 index 0000000..558d4fd --- /dev/null +++ b/0.4.6/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.6/htdocs.pl b/0.4.6/htdocs.pl new file mode 100644 index 0000000..6167fde --- /dev/null +++ b/0.4.6/htdocs.pl @@ -0,0 +1,240 @@ +#!/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>
+ <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")'>Logdateien</a>
+ <a href="http://www.updates.yChat.de" target="Updates">Updates</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>
+</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.6/index.pl b/0.4.6/index.pl new file mode 100644 index 0000000..aeb6af2 --- /dev/null +++ b/0.4.6/index.pl @@ -0,0 +1,418 @@ +#!/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:paul\@buetow.oxg.de">Paul C. Bütow</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 {
+ $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.6/input.pl b/0.4.6/input.pl new file mode 100644 index 0000000..2c5914e --- /dev/null +++ b/0.4.6/input.pl @@ -0,0 +1,121 @@ +#!/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">
+
+maxVerlauf = 10; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+fullVerlauf = new Array( maxVerlauf );
+
+function delout()
+{
+ addVerlauf( document.inf.msg.value );
+ document.inf.submit(); // Formular absenden
+ document.inf.msg.focus(); // Fukus in das Eingabeform
+ document.inf.msg.select(); // Text im Eigabeform markieren
+ return false;
+}
+
+function CheckAuswahl()
+{
+ id = document.verlaufform.verlauf.selectedIndex;
+
+ if( fullVerlauf[ id-1 ] == null ) // Falls das Feld leer ist
+ return false; // Aufruf ignorieren
+
+ document.inf.msg.value = fullVerlauf[ id-1 ];
+ document.inf.msg.focus();
+
+ return true;
+}
+
+function addVerlauf( msg )
+{
+ if( msg == "" ) // Falls msg leer
+ return false; // Aufruf ignorieren
+
+ 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];
+ }
+ if( msg.length > maxPreview )
+ pre = msg.slice( 0, maxPreview-3 ) + "...";
+ else
+ pre = msg;
+
+ document.verlaufform.verlauf.options[ maxVerlauf ].text = pre; // Neue Vorschau anfügen
+ fullVerlauf[ maxVerlauf-1 ] = msg; // Neuen Eintrag anfügen
+
+// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag
+ document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (Überschrift)
+}
+
+ </script>
+
+$style
+ </head>
+<body class="blank" onload="document.inf.msg.focus();">
+ <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="var" value="post_msg">
+ <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">
+ </form>
+ </td>
+ <td>
+ <form name="verlaufform">
+ <select size="1" name="verlauf" size="40" onChange="CheckAuswahl()">
+ <option value>- Nachrichten-Verlauf -</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ <option value>(leer)</option>
+ </select>
+ </form>
+ </td>
+ </tr>
+ </table>
+ </div>
+</body>
+</html>
+END
diff --git a/0.4.6/main.pl b/0.4.6/main.pl new file mode 100644 index 0000000..57e82cb --- /dev/null +++ b/0.4.6/main.pl @@ -0,0 +1,903 @@ +#!/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 = "";
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &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>");
+ &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;
+ &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;
+#############>- 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.6/main2.pl b/0.4.6/main2.pl new file mode 100644 index 0000000..36a0012 --- /dev/null +++ b/0.4.6/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.6/online.pl b/0.4.6/online.pl new file mode 100644 index 0000000..b6346c5 --- /dev/null +++ b/0.4.6/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.6/push.pl b/0.4.6/push.pl new file mode 100644 index 0000000..f8b8a78 --- /dev/null +++ b/0.4.6/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.6/setup.sh b/0.4.6/setup.sh new file mode 100644 index 0000000..6b3ef8a --- /dev/null +++ b/0.4.6/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.6/y.gif b/0.4.6/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.4.6/y.gif diff --git a/0.4.6/yIntro.swf b/0.4.6/yIntro.swf Binary files differnew file mode 100644 index 0000000..d592826 --- /dev/null +++ b/0.4.6/yIntro.swf diff --git a/0.4.6/ySymbol.swf b/0.4.6/ySymbol.swf Binary files differnew file mode 100644 index 0000000..2b899bb --- /dev/null +++ b/0.4.6/ySymbol.swf diff --git a/0.4.6/y_.gif b/0.4.6/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.4.6/y_.gif 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 diff --git a/0.4.8a2/CREDITS.txt b/0.4.8a2/CREDITS.txt new file mode 100644 index 0000000..6f2a6cc --- /dev/null +++ b/0.4.8a2/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.8a2/README.txt b/0.4.8a2/README.txt new file mode 100644 index 0000000..b67f15e --- /dev/null +++ b/0.4.8a2/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.8a2/SETUP.txt b/0.4.8a2/SETUP.txt new file mode 100644 index 0000000..19a6fbe --- /dev/null +++ b/0.4.8a2/SETUP.txt @@ -0,0 +1,137 @@ +############################## 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
+ranking.php4 => Dieses Skript erstellt die Top 20 Ranking-List +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/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern und TempIDs der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Alle Grafik- und Multimediadateien (*.gif, *.jpg, *.swf) 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.8a2/TODO.txt b/0.4.8a2/TODO.txt new file mode 100644 index 0000000..5dca7c1 --- /dev/null +++ b/0.4.8a2/TODO.txt @@ -0,0 +1,33 @@ +############################## 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 :-)
\ No newline at end of file diff --git a/0.4.8a2/UPDATES.txt b/0.4.8a2/UPDATES.txt new file mode 100644 index 0000000..0de557c --- /dev/null +++ b/0.4.8a2/UPDATES.txt @@ -0,0 +1,215 @@ +########################### 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.8 auf 0.4.8a (29.01.01)
+ - Neue Befehle: /me/ und /m/ (Müssen inmitten des Textes eingegeben
+ werden.)
+ - Beim posten einer Nachricht wird die zu beschreibende
+ Nachrichtendatei mit flock(MSGFIL, 2); geschützt. Dies verhindert,
+ daß 2 Skripte gleichzeitig versuchen, die Nachrichtendatei zu
+ beschreiben.
+
+Update von 0.4.7 auf 0.4.8 (26.01.01)
+ - Top 20 Ranking Liste in PHP4.
+ - Überarbeitung des Flash-Intros.
+ - PIDs für die Signalhandler werden zuverlässiger abgespeichert und
+ ggf. wieder gelöscht.
+ - Das push.pl-Skript (endlosschleife) benötigt nun nurnoch halb so
+ viel Speicher beim Ausführen. Die Datei config.pm wird nicht mehr
+ mit "require config;" eingebunden.
+ - Benutzernamen dürfen maximal nurnoch 15 Zeichen lang sein.
+ - Chatnachrichten dürfen maximal nurnoch 300 Zeichen lang sein.
+ - Wenn ein Benutzer eine Nachricht textet, überprüft das System, ob
+ derjenige sich auch wirklich im jew. Raum befindet.
+ - In den Chatoptionen kann man zusätzliche Einstellungen vornehmen:
+ 1.) Anzahl der Nachrichten im Nachrichten-Verlauf
+ 2.) Anordnung der Nachrichten im Nachrichten-Verlauf.
+ Neueinstellungen dieser Optionen werden erst nach einem
+ Neueinloggen aktiv.
+ - Die Error-Logdatei "data/error" wurde erweitert.
+
+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.8a2/colors.sno b/0.4.8a2/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.8a2/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.8a2/config.pm b/0.4.8a2/config.pm new file mode 100644 index 0000000..0cebeb9 --- /dev/null +++ b/0.4.8a2/config.pm @@ -0,0 +1,269 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$datum = "30.01.01";
+$version = "0.4.8a2";
+$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 = $room;
+ @rooms = ($room,$secroom) if ($room ne $secroom);
+ foreach $raum (@rooms) {
+ open(MSGFILE,">>data/msgs/$raum");
+ flock(MSGFILE, 2);
+ print MSGFILE "!<;".time."<;!<;!<;$msg2post<;\n";
+ close MSGFILE;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ }
+ &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");
+ flock(MSGFILE, 2);
+ print MSGFILE "$alias2post<;".time."<;!<;!<;$msg2post<;\n";
+ close MSGFILE;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ 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 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 "$alias $tmpid $$ ".time." $error_msg \n";
+ close ERROR;
+ exit 0;
+}
+
+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) $benutzer hat den Chat verlassen ... </font></i>");
+ }
+ }
+ }
+ }
+ opendir(PIDS,"data/online/pids/$raum");
+ my @pids = readdir(PIDS);
+ closedir(PIDS);
+ if ($raumleer == 1) { # Falls Raum leer ist => entf.
+ rmdir("data/online/rooms/$raum");
+ unlink("data/online/rstat/$raum");
+ unlink("data/msgs/$raum");
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ unlink("data/online/pids/$raum/$_");
+ }
+ }
+ rmdir("data/online/pids/$raum");
+ } else {
+ foreach(@pids) {
+ unless (kill 0 => $_) {
+ unlink("data/online/pids/$room/$_");
+ }
+ }
+ }
+ }
+}
+
+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";
+ }
+ }
+ }
+}
+
+sub debug {
+ open(DEBUG,">data/debug");
+ print DEBUG @_;
+ close DEBUG;
+}
\ No newline at end of file diff --git a/0.4.8a2/help.sno b/0.4.8a2/help.sno new file mode 100644 index 0000000..4074cc0 --- /dev/null +++ b/0.4.8a2/help.sno @@ -0,0 +1,58 @@ +<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>Chat 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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=red>Raum</font> ein <font color=ffa500>Thema</font > geben</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.8a2/htdocs.pl b/0.4.8a2/htdocs.pl new file mode 100644 index 0000000..361fcb2 --- /dev/null +++ b/0.4.8a2/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=ffffff>$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 40</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.8a2/index.pl b/0.4.8a2/index.pl new file mode 100644 index 0000000..2b9cee2 --- /dev/null +++ b/0.4.8a2/index.pl @@ -0,0 +1,426 @@ +#!/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 "autologout") {
+print <<END;
+ <div>
+ Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.
+ <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 (-d "data/online/rooms") {
+ } else {
+ mkdir "data/online/rooms", 0777;
+ }
+}
+
+
+sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers.
+my $reload = $_[0];
+&start_html("Registration");
+print <<END;
+ <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
+} elsif ($reload eq "alias_length") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Dein gewählter Benutername "$alias" enthält zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!
+ </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;
+ foreach(@options) {
+ chomp $_;
+ }
+ 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 { $col = $options[1]; }
+ if ($options[2] eq undef) { $secol = "ffffef";}
+ else { $secol = $options[2];}
+ if ($options[3] eq undef) { $maxVerlauf = "10";}
+ else { $maxVerlauf = $options[3];}
+ if ($options[4] eq undef) { $verlaufOrder = "1";}
+ else {$verlaufOrder = $options[4];}
+ $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 0;
+ } elsif ($pw ne $tmp) {
+ &create_alias_html("pw_wrong");
+ exit 0;
+ } elsif (length($alias) >= 15) {
+ &create_alias_html("alias_length");
+ exit 0;
+ }
+ 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=ffffff>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>");
+ &login_html;
+}
+
+sub frameset_html {
+print <<END;
+<html>
+ <head>
+ <title>
+ $title - Powered by CXG - Chatters of the next generation
+ </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&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" scrolling="no">
+ </frameset>
+</frameset>
+</html>
+END
+}
\ No newline at end of file diff --git a/0.4.8a2/input.pl b/0.4.8a2/input.pl new file mode 100644 index 0000000..1be7ed0 --- /dev/null +++ b/0.4.8a2/input.pl @@ -0,0 +1,197 @@ +#!/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");
+$maxVerlauf = $q->param("maxVerlauf");
+$verlaufOrder = $q->param("verlaufOrder");
+
+if ($maxVerlauf eq undef) { $maxVerlauf = "10";}
+if ($verlaufOrder eq undef) { $verlaufOrder = "1";}
+
+if ($tmp eq "login") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat den Chat betreten ...</font></i>");
+}
+
+print <<END;
+<html>
+<head>
+<script language="JavaScript"><!--
+
+// Einstellungsvariablen
+maxVerlauf = $maxVerlauf; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+verlaufOrder = $verlaufOrder; // Neue Nachrichten von: 0=oben, 1=unten
+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" maxlength="300" 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.8a2/main.pl b/0.4.8a2/main.pl new file mode 100644 index 0000000..b849216 --- /dev/null +++ b/0.4.8a2/main.pl @@ -0,0 +1,945 @@ +#!/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");
+
+if ($tmp eq "away") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat sich zurück gemeldet ... </font></i>");
+}
+
+if ($q->param('var') eq "change_colors") {
+ &reload_html("","change_colors")
+}
+unless (-e "data/online/rooms/$room/$alias") {
+ &post_prv($alias,"<font color=ffffff>Du befindest Dich nicht im Raum \"<font color=ffa500>$room</font>\" und kannst dort auch keine Nachrichten posten!</font>");
+ &reload_html;
+} elsif (length($$rmsg) > 300) {
+ &post_prv($alias,"<font color=ffffff>Deine Nachricht enthält zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>");
+ &reload_html;
+}
+
+
+$$rmsg =~ s#<#<\;#g;
+if (substr($$rmsg,0,1) ne "/") {
+ open(MSGFILE,">>data/msgs/$room");
+ unless ($$rmsg =~ s#/me/#<i>$alias</i>#g || $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g) {
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b><;\n";
+ } else {
+ $$rmsg =~ s#/me/#<i>$alias</i>#g;
+ $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$secol>$$rmsg</font></font></b><;\n";
+ }
+ close MSGFILE;
+ opendir(PID,"data/online/pids/$room");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$room/$_") {
+ kill USR1 => $_;
+ }
+ }
+ &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" && $tmp eq "autologout") {
+ print "open(\"index.pl?tmp=autologout\",\"_top\");";
+ &rm_alias($alias,$room);
+ } elsif ($action eq "quit") {
+ print "open(\"index.pl?tmp=quit\",\"_top\");";
+ &rm_alias($alias,$room);
+ }
+ print "parent.input.document.inf.tmp.value = \"notaway\";" if ($tmp eq "away");
+ print "</script></head><body bgcolor=$col>";
+ print $q->end_html;
+ exit 0;
+}
+
+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");
+ flock(MSGFILE, 2);
+ 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) $alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ open(MSGFILE,">>data/msgs/$room");
+ flock(MSGFILE, 2);
+ print MSGFILE "$alias<;$tmpstamp<;!<;!<;<i><font color=ffffff>($hours:$min:$sec) 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) $alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ...</font></i>");
+ open(MSGFILE,">>data/msgs/$room");
+ flock(MSGFILE, 2);
+ print MSGFILE "$alias<;$tmpstamp<;!<;!<;<i><font color=ffffff>($hours:$min:$sec) Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i><;\n";
+ close MSGFILE;
+ }
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ 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 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) $alias meldet sich ab (<font color=ffa500>$away_msg</font> ) ...</i></font>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 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];
+ }
+ $me_msg =~ s#/me/#<i>$alias</i>#g;
+ $me_msg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if ($cmd eq "m") {
+ &post($room,"<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>");
+ } else {
+ &post($room,"<b><font color=$col><i>$alias</i> $me_msg</font></b>");
+ }
+ &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 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ open(MEMO,">>data/user/memos/$alias2memo");
+ print MEMO "<font 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 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];
+ }
+ }
+ $msg2post =~ s#/me/#<i>$alias</i>#g;
+ $msg2post =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if (-f "data/online/users/$alias2post") {
+ &post_prv($alias2post,"<b><font color=$col><i>$alias flüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &post_prv($alias,"<b><font color=$col><i>Zu $alias2post geflüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &reload_html($alias2post,$action);
+ exit;
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2post <font color=ffffff>ist 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 color=ffa500>$alias2prove <font color=ffffff> war insgesamt schon $totaltime Minuten online!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+ exit;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &zeit;
+ if ($tmp ne "autologout") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias loggt sich aus dem Chat aus ... </font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias wurde vom System automatisch ausgeloggt ... </font></i>");
+ }
+ &reload_html($whisper,"quit");
+ 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) $alias löscht das eigene 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,"<b><font color=$col><i>$alias schreit:</i> <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 color=ffa500>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingelogt!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> hat sich seit der Einführung dieses Befehls noch nie eingelogt!</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font 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 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 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 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 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 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 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) $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) $alias sperrt den Raum ab ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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) $alias verleiht \"$alias2su\" Raumbesetzerrechte ...</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) $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 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) $alias gibt dem Raum das Thema (<font color=ffa500> $theme </font>) ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 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 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 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 color=ffa500>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>");
+ &reload_html;
+ exit;
+ }
+ }
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 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) $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 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 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 color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>");
+ } elsif ($hierachie eq "wa") {
+ &post_prv("$alias","<font 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) $alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$raum);
+ &rm_alias($alias2kick,$raum);
+ &check_online;
+ }
+ &reload_html;
+ exit;
+ }
+ }
+ }
+ &post_prv("$alias","<font 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 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 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) $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) $alias sperrt den Raum \"$sl_room\" von aussen ab ...</font></i>",$sl_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 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) $alias ruft in den Raum \"$ss_room\" hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>",$ss_room);
+ &reload_html;
+ exit;
+ } else {
+ &post_prv($alias,"<font 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) $alias gibt dem Raum \"$st_room\" das Thema (<font color=ffa500> $theme </font>) ...</font></i>",$st_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 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 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 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) $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 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) $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 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 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 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) $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 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) $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 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 color=ffa500>$pw2show <font color=ffffff> hat das Passwort \"".$pw[0]."\" !</font></font>");
+ &reload_html;
+ exit;
+ }
+ &post_prv($alias,"<font 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) $msg2post</font></i>");
+ &reload_html;
+ exit;
+#############>- ENDE DER CHATBEFEHLE -<
+ }
+&post_prv($alias,"<font color=ffffff>Der Chatbefehl <font color=ffa500>/$cmd</font> existiert nicht oder Du hast keine Berechtigung diesen Befehl auszuführen!</font></font>");
+&reload_html;
+}
diff --git a/0.4.8a2/main2.pl b/0.4.8a2/main2.pl new file mode 100644 index 0000000..d98380d --- /dev/null +++ b/0.4.8a2/main2.pl @@ -0,0 +1,638 @@ +#!/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 color=ffffff><a href=\"main2.pl?alias=$tmp&var=alias_html&tmp=$alias&tmpid=$tmpid\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$tmp&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;
+ my $nr = 1;
+ if ($alias ne $tmp) {
+ foreach(@datei) {
+ print "<br>Eintrag # $nr: $_";
+ $nr++;
+ }
+ } 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>
+ <br>
+ Eintrag # $nr:
+ $datei[$i]
+ </div>
+ </td>
+ </tr>
+END
+$nr++;
+}
+print <<END;
+ </table>
+ <table>
+ <tr>
+ <td>
+ <font color=ffffff>
+ <input type="submit" value="Markierten Eintrag löschen">
+ </font>
+ </td>
+ <td>
+ <font color=ffffff>
+ <input type="reset" value="Markierung 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;
+ foreach(@data) {
+ chomp $_;
+ }
+ if ($method eq "edit_options_html") {
+ if ($message eq "edit_options_ok") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Chateinstellungen geändert ...</font></i>");
+print <<END;
+<script language="JavaScript">
+ open("main.pl?var=change_colors&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","reload");
+</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>
+ <hr>
+ <div>Einstellungen für den Nachrichten-Verlauf</div>
+ <table>
+ <tr>
+ <td>
+ <br>
+ <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div>
+ <font color=ffffff>
+ <select name="maxVerlauf" size="1">
+ <option value="$data[3]">$data[3]
+END
+for($i=1;$i<=50;$i++) {
+ print "<option value=\"$i\">$i";
+}
+print<<END;
+ </select>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <br>
+<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div>
+ <font color=ffffff>
+ <select name="verlaufOrder" size="1">
+ <option value="$data[4]">Bisherige Einstellung ($data[4])
+ <option value="0">Neue Verlaufnachrichten oben (0)
+ <option value="1">Neue Verlaufnachrichten unten (1)
+ </select>
+ </font>
+ </td>
+ </tr>
+ </table>
+<br>
+ <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div>
+ <hr>
+ <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 markieren 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") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat das Profil geändert ...</font></i>");
+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") {
+ 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;
+ }
+ open(OPTIONS,">data/user/options/$alias");
+ print OPTIONS $id."\n".$col."\n".$secol."\n".$q->param("maxVerlauf")."\n".$q->param("verlaufOrder");
+ close OPTIONS;
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
\ No newline at end of file diff --git a/0.4.8a2/online.pl b/0.4.8a2/online.pl new file mode 100644 index 0000000..b6346c5 --- /dev/null +++ b/0.4.8a2/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.8a2/push.pl b/0.4.8a2/push.pl new file mode 100644 index 0000000..da19357 --- /dev/null +++ b/0.4.8a2/push.pl @@ -0,0 +1,117 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+CGI->compile(':all');
+$q = new CGI;
+print
+ $q->header;
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+
+{
+ open(IDENT,"<data/online/ident/$alias");
+ my @ident = <IDENT>;
+ close IDENT;
+ if ($ident[1] ne $tmpid) {
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ open(ERROR,">>data/error");
+ print ERROR "$alias $tmpid $$ ".time." $error_msg \n";
+ close ERROR;
+ exit 0;
+ }
+}
+
+$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>Willkommen im yChat [PID: $pid]</font><br>
+END
+
+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,@flood;
+OPENMSGFILE:
+$change_room = 0;
+$startime = time;
+
+if (-e "data/msgs/$room") {
+ open(MSGFILE,"<data/msgs/$room");
+ unless (-d "data/online/pids") {
+ mkdir "data/online/pids", 0777;
+ } unless (-d "data/online/pids/$room") {
+ mkdir "data/online/pids/$room", 0777;
+ }
+ open(PID,">data/online/pids/$room/$pid");
+ print PID time;
+ close PID;
+} else {
+ sleep 1;
+ goto OPENMSGFILE;
+}
+
+&sendmsgs;
+while (-e "data/online/users/$alias") {
+ local $SIG{USR1} = \&sendmsgs;
+ goto OPENMSGFILE if ($change_room == 1);
+ sleep 15;
+ print "\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") {
+ unlink("data/online/pids/$room/$pid");
+ $room = $action;
+ close MSGFILE;
+ $change_room = 1;
+ }
+ print "$message<br>\n" if ($change_room != 1);
+ push(@flood,$message);
+ if ($flood[0] eq $flood[1] && $flood[0] eq $flood[2] && $flood[0] eq $flood[3]) {
+ print "<i><font color=red> Jemand floodet den Chat !</font></i><br>\n";
+ }
+ shift(@flood) if ($#flood > 2);
+ }
+ }
+ }
+ seek(MSGFILE, $curpos, 0);
+}
+
+unlink("data/online/pids/$room/$pid");
\ No newline at end of file diff --git a/0.4.8a2/ranking.php4 b/0.4.8a2/ranking.php4 new file mode 100644 index 0000000..54104fb --- /dev/null +++ b/0.4.8a2/ranking.php4 @@ -0,0 +1,80 @@ +<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
+<html>
+<head>
+ <title>Top 20 Ranking</title>
+ <style rel="stylesheet" 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 { font-family: arial, verdana, helvetiva; font-size: 8pt; color: #FF0000 }
+ a:hover { color: #000000; text-decoration: none }
+ </style>
+</head>
+<body>
+<?
+
+$pfad = "data/user/counts";
+$handle = opendir($pfad);
+$counter = 0;
+$datei=readdir($handle);
+$datei=readdir($handle);
+while($datei=readdir($handle))
+{
+
+ $ganzername = $pfad . "/" . $datei;
+ $groesse = filesize($ganzername);
+ $dateihandle = fopen($ganzername,"r");
+ $onlinezeit = fgets($dateihandle, $groesse+1);
+ $counter++;
+ $user = substr($datei, 0, strlen($datei) - 7);
+ $array[$user] = (int) ($onlinezeit / 60);
+
+}
+echo "<div>Es wurden " . sizeof($array) . " Einträge gefunden und ausgewertertet.<p> Top-40 Ranking:<br></div><HR>";
+arsort($array);
+
+
+echo "<table border=0 bgcolor=#000000 cellspacing=1 cellpadding=2>";
+
+echo "<tr><td bgcolor=#DD0000 align=center>";
+echo "<div> Rank </div>";
+echo "<td bgcolor=#DD0000 align=center>";
+echo "<div> Chatter </div>";
+echo "<td bgcolor=#DD0000 align=center>";
+echo "<div> Onlinezeit <br> [DD:HH:MM] </div>";
+echo "</tr>";
+$mykeys = array_keys($array);
+$counter = 0;
+$platz=0;
+foreach ($mykeys as $keyname) {
+ $counter++;
+ if ($counter <= 40) {
+ $namedesprofils=$keyname;
+ $min = (int) ($array[$keyname] % 60);
+ $tmphrs = (int) ($array[$keyname] / 60);
+ $hrs = (int) ($tmphrs % 24);
+ $tmpdays = (int) ($tmphrs / 24);
+ $days = (int) ($tmphrs / 24);
+
+ $onlinezeit = sprintf("%02d:%02d:%02d", $days, $hrs, $min);
+ echo "<tr><td bgcolor=#EEEEEE align=center>";
+ echo "<font face=\"arial,verdana,helvetiva\" size=1 color=#000000>$counter</font>";
+ echo "<td bgcolor=#EEEEEE align=center>";
+ echo "<a href=\"main2.pl?var=alias_html&tmp=$namedesprofils&alias=$alias&tmpid=$tmpid\" target=\"_self\">";
+ echo "<font face=\"arial,verdana,helvetiva\" size=1 color=#FF0000>";
+ echo "$keyname";
+ echo "</font>";
+ echo "</a>";
+ echo "<td bgcolor=#999999 align=center>";
+ echo "<font face=\"arial,verdana,helvetiva\" size=1 color=#FFFFFF>$onlinezeit</font>";
+ echo "</tr>";
+ }
+ if ($keyname == $alias) { $platz=$counter; }
+}
+echo "</table> <HR>";
+echo "<div> $alias, Du befindest Dich momentan auf Platz Nr.: $platz</div>";
+?>
+</body>
+</html>
diff --git a/0.4.8a2/setup.sh b/0.4.8a2/setup.sh new file mode 100644 index 0000000..6b3ef8a --- /dev/null +++ b/0.4.8a2/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.8a2/y.gif b/0.4.8a2/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.4.8a2/y.gif diff --git a/0.4.8a2/yIntro.swf b/0.4.8a2/yIntro.swf Binary files differnew file mode 100644 index 0000000..d592826 --- /dev/null +++ b/0.4.8a2/yIntro.swf diff --git a/0.4.8a2/ySymbol.swf b/0.4.8a2/ySymbol.swf Binary files differnew file mode 100644 index 0000000..2b899bb --- /dev/null +++ b/0.4.8a2/ySymbol.swf diff --git a/0.4.8a2/y_.gif b/0.4.8a2/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.4.8a2/y_.gif diff --git a/0.4.9/CREDITS.txt b/0.4.9/CREDITS.txt new file mode 100644 index 0000000..3f34ba9 --- /dev/null +++ b/0.4.9/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.
+ ... die Optimierung der Statusgrafiken in der Onlineliste.
+ ( 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 )
+
+ - Dommi für die Erstellung der Away-Grafik.
+
+ - Larry Wall, für die Erfindung von Perl !
\ No newline at end of file diff --git a/0.4.9/README.txt b/0.4.9/README.txt new file mode 100644 index 0000000..b67f15e --- /dev/null +++ b/0.4.9/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.9/SETUP.txt b/0.4.9/SETUP.txt new file mode 100644 index 0000000..cd02a6b --- /dev/null +++ b/0.4.9/SETUP.txt @@ -0,0 +1,139 @@ +############################## 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
+stat.pl => Erstellt diverse Statistiken
+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/*
+
+- Verzeichnis für die Raumstatusdateien. Hier wird abgespeichert:
+ Raumbesetzer, Away (inkl. Away-Nachricht)und das Raumthema.
+ ./cgi-bin/yChat/data/online/rstat/*
+
+ - 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/*
+
+- 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 Grafik- und Multimediadateien (*.gif, *.jpg, *.swf) 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.9/TODO.txt b/0.4.9/TODO.txt new file mode 100644 index 0000000..4538bea --- /dev/null +++ b/0.4.9/TODO.txt @@ -0,0 +1,32 @@ +############################## yChat.de TODO ################################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+
+Folgende Funktionen werden demnächst evtl. in yChat integriert:
+
+ - OOP bei den HTML-Eingabeformularen und dem Menü.
+
+ - Kein CGI.pm im main.pl und config.pm.
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - 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 :-)
\ No newline at end of file diff --git a/0.4.9/UPDATES.txt b/0.4.9/UPDATES.txt new file mode 100644 index 0000000..7fc17d9 --- /dev/null +++ b/0.4.9/UPDATES.txt @@ -0,0 +1,227 @@ +########################### 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.8 auf 0.4.9
+ - "/online Alias" zeigt die Onlinezeit in Stunden, nicht mehr in
+ Minuten an.
+ - Hinzufügung des Statistikskripts "stat.pl" unter dem Menüpunkt
+ "Statistik". Das Top 40 - PHP Skript wurde nicht mehr benötigt und
+ gelöscht.
+ - Neue Befehle: /me/ und /m/ (Müssen inmitten des Textes eingegeben
+ werden.)
+ - Wird ein Benutzer aus dem Chat gekillt, so wird dies in der Datei
+ "data/kill" protokolloert.
+ - In der main.pl wird die Datei "config.pm" per "require" nur noch
+ in das Dokument eingefügt, wenn es notwendig ist.
+ - In der Onlineliste neben dem Raumnamen steht nun, wieviele Benutzer
+ sich im aktuellen Raum befinden. Ausserdem wird in der Onlineliste
+ angezeigt, ob ein Benutzer abgemeldet ist oder nicht und welche
+ Rechte er hat. Die Onlineliste ist nun Alphabetisch sortiert.
+ - Wird das Profil geändert und das http:// bei der Homepage-Adresse
+ vergessen, so wird dies automatisch hinzugefügt.
+ - Viele Bugfixes.
+
+Update von 0.4.7 auf 0.4.8 (26.01.01)
+ - Top 20 Ranking Liste in PHP4.
+ - Überarbeitung des Flash-Intros.
+ - PIDs für die Signalhandler werden zuverlässiger abgespeichert und
+ ggf. wieder gelöscht.
+ - Das push.pl-Skript (endlosschleife) benötigt nun nurnoch halb so
+ viel Speicher beim Ausführen. Die Datei config.pm wird nicht mehr
+ mit "require config;" eingebunden.
+ - Benutzernamen dürfen maximal nurnoch 15 Zeichen lang sein.
+ - Chatnachrichten dürfen maximal nurnoch 300 Zeichen lang sein.
+ - Wenn ein Benutzer eine Nachricht textet, überprüft das System, ob
+ derjenige sich auch wirklich im jew. Raum befindet.
+ - In den Chatoptionen kann man zusätzliche Einstellungen vornehmen:
+ 1.) Anzahl der Nachrichten im Nachrichten-Verlauf
+ 2.) Anordnung der Nachrichten im Nachrichten-Verlauf.
+ Neueinstellungen dieser Optionen werden erst nach einem
+ Neueinloggen aktiv.
+ - Die Error-Logdatei "data/error" wurde erweitert.
+
+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.9/away.gif b/0.4.9/away.gif Binary files differnew file mode 100644 index 0000000..10d460b --- /dev/null +++ b/0.4.9/away.gif diff --git a/0.4.9/colors.sno b/0.4.9/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.9/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.9/config.pm b/0.4.9/config.pm new file mode 100644 index 0000000..7602abc --- /dev/null +++ b/0.4.9/config.pm @@ -0,0 +1,322 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$datum = "11.02.01";
+$version = "0.4.9";
+$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 = $room;
+ @rooms = ($room,$secroom) if ($room ne $secroom);
+ foreach $raum (@rooms) {
+ open(MSGFILE,">>data/msgs/$raum");
+ print MSGFILE "!<;".time."<;!<;!<;$msg2post<;\n";
+ close MSGFILE;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ }
+ &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;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ goto ENDPRV;
+ }
+ }
+ }
+ENDPRV:
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ local $msg2log = $_[0];
+ &zeit;
+ my $js;
+ ($msg2log,$js) = split(/<script/, $msg2log);
+ open(LOG,">>data/logs/$day.$month.$year");
+ flock(LOG, 2);
+ 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 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");
+ flock(ERROR, 2);
+ print ERROR "$alias $tmpid $$ ".time." $error_msg \n";
+ close ERROR;
+ exit 0;
+}
+
+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) $benutzer hat den Chat verlassen ... </font></i>");
+ }
+ }
+ }
+ }
+ opendir(PIDS,"data/online/pids/$raum");
+ my @pids = readdir(PIDS);
+ closedir(PIDS);
+ if ($raumleer == 1) { # Falls Raum leer ist => entf.
+ rmdir("data/online/rooms/$raum");
+ unlink("data/online/rstat/$raum");
+ unlink("data/online/rstat/$raum.away");
+ unlink("data/msgs/$raum");
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ unlink("data/online/pids/$raum/$_");
+ }
+ }
+ rmdir("data/online/pids/$raum");
+ } else {
+ foreach(@pids) {
+ unless (kill 0 => $_) {
+ unlink("data/online/pids/$room/$_");
+ }
+ }
+ }
+ }
+}
+
+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++) {
+ chomp($rstat[$i]);
+ push(@rstat2,$rstat[$i]."\n") if ($rstat[$i] ne $r_alias);
+ }
+ open (RSTAT,">data/online/rstat/$rstatroom");
+ flock(RSTAT, 2);
+ print RSTAT @rstat2;
+ close RSTAT;
+}
+
+sub rm_away { # Benutzer als Raumbesetzer austragen
+ my ($a_alias,$rstatroom) = @_;
+ open (AWAY,"<data/online/rstat/$rstatroom.away");
+ my @away = <AWAY>;
+ close AWAY;
+ my @away2;
+ foreach (@away) {
+ my @split = split(/<;/);
+ push(@away2, $_) if ($a_alias ne $split[0]);
+ }
+ open (AWAY,">data/online/rstat/$rstatroom.away");
+ print AWAY @away2;
+ close AWAY;
+}
+
+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(@was) {
+ chomp;
+ if ($_ eq $alias2prove) {
+ $hierachie = "wa";
+ last;
+ }
+ }
+ open(OW,"<data/ow");
+ @ows = <OW>;
+ close OW;
+ if ($hierachie ne "wa") {
+ foreach(@ows) {
+ chomp;
+ if ($_ eq $alias2prove) {
+ $hierachie = "ow";
+ last;
+ }
+ }
+ }
+}
+
+sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat
+ my ($r_alias,$r_room) = @_;
+ $r_besetzer = undef;
+ open(DATEI,"<data/online/rstat/$r_room");
+ @r_stat = <DATEI>;
+ close DATEI;
+ for($i=2;$i<=$#r_stat;$i++) {
+ chomp($r_stat[$i]);
+ if ($r_stat[$i] eq $r_alias) {
+ $r_besetzer = "true";
+ last;
+ }
+ }
+}
+
+sub prove_away { # Prüfen, ob Benutzer Raumbesetzerrechte hat
+ my ($a_alias,$a_room) = @_;
+ my $alias;
+ $away = undef;
+ open(DATEI,"<data/online/rstat/$a_room.away");
+ @away = <DATEI>;
+ close DATEI;
+ foreach(@away) {
+ if (/^$a_alias.*/) {
+ ($alias,$away) = split(/<; /);
+ chomp($away);
+ last;
+ }
+ }
+}
+
+#sub debug {
+# open(DEBUG,">data/debug");
+# print DEBUG @_;
+# close DEBUG;
+#}
\ No newline at end of file diff --git a/0.4.9/help.sno b/0.4.9/help.sno new file mode 100644 index 0000000..4074cc0 --- /dev/null +++ b/0.4.9/help.sno @@ -0,0 +1,58 @@ +<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>Chat 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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=red>Raum</font> ein <font color=ffa500>Thema</font > geben</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.9/htdocs.pl b/0.4.9/htdocs.pl new file mode 100644 index 0000000..b8f8831 --- /dev/null +++ b/0.4.9/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=ffffff>$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("stat.pl?&alias=$alias&tmpid=$tmpid","Statistik")'>Statistik</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.9/index.pl b/0.4.9/index.pl new file mode 100644 index 0000000..29f3399 --- /dev/null +++ b/0.4.9/index.pl @@ -0,0 +1,429 @@ +#!/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");
+ flock(COUNT, 2);
+ 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 "autologout") {
+print <<END;
+ <div>
+ Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.
+ <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 (-d "data/online/rooms") {
+ } else {
+ mkdir "data/online/rooms", 0777;
+ }
+}
+
+
+sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers.
+my $reload = $_[0];
+&start_html("Registration");
+print <<END;
+ <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
+} elsif ($reload eq "alias_length") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Dein gewählter Benutername "$alias" enthält zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!
+ </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;
+ foreach(@options) {
+ chomp $_;
+ }
+ 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 { $col = $options[1]; }
+ if ($options[2] eq undef) { $secol = "ffffef";}
+ else { $secol = $options[2];}
+ if ($options[3] eq undef) { $maxVerlauf = "10";}
+ else { $maxVerlauf = $options[3];}
+ if ($options[4] eq undef) { $verlaufOrder = "1";}
+ else {$verlaufOrder = $options[4];}
+ $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 "") {
+goto CREATE if ($alias =~ /[-]/);
+ &create_alias_html("alias_prohibited");;
+ exit 0;
+ } elsif ($pw ne $tmp) {
+ &create_alias_html("pw_wrong");
+ exit 0;
+ } elsif (length($alias) >= 15) {
+ &create_alias_html("alias_length");
+ exit 0;
+ }
+CREATE:
+ opendir(USERDIR,"data/user/options");
+ my @user = readdir(USERDIR);
+ close USERDIR;
+ foreach $user (@user) {
+ if ($user eq $alias) {
+ &create_alias_html("alias_exists");
+ 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=ffffff>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>");
+ &login_html;
+}
+
+sub frameset_html {
+print <<END;
+<html>
+ <head>
+ <title>
+ $title - Powered by CXG - Chatters of the next generation
+ </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&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" scrolling="no">
+ </frameset>
+</frameset>
+</html>
+END
+}
\ No newline at end of file diff --git a/0.4.9/input.pl b/0.4.9/input.pl new file mode 100644 index 0000000..6244039 --- /dev/null +++ b/0.4.9/input.pl @@ -0,0 +1,201 @@ +#!/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");
+$maxVerlauf = $q->param("maxVerlauf");
+$verlaufOrder = $q->param("verlaufOrder");
+
+if ($maxVerlauf eq undef) { $maxVerlauf = "10";}
+if ($verlaufOrder eq undef) { $verlaufOrder = "1";}
+
+if ($tmp eq "login") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat den Chat betreten ...</font></i>");
+}
+
+print <<END;
+<html>
+<head>
+<script language="JavaScript"><!--
+
+// Einstellungsvariablen
+maxVerlauf = $maxVerlauf; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+verlaufOrder = $verlaufOrder; // 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" maxlength="300" 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
+
+&rm_away($alias,$room);
\ No newline at end of file diff --git a/0.4.9/main.pl b/0.4.9/main.pl new file mode 100644 index 0000000..de40f2a --- /dev/null +++ b/0.4.9/main.pl @@ -0,0 +1,910 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+print $q->header();
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+
+{
+ open(IDENT,"<data/online/ident/$alias");
+ my @ident = <IDENT>;
+ close IDENT;
+ if ($ident[1] ne $tmpid) {
+ &error("Falsche TempID ! Du bist nicht befugt zu handeln !");
+ }
+}
+
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$tmp = $q->param("tmp");
+$rmsg = \$q->param("msg");
+
+
+if ($tmp eq "away") {
+ require config;
+ &rm_away($alias,$room);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat sich zurück gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+}
+
+if ($q->param('var') eq "change_colors") {
+ &reload_html("","change_colors")
+}
+unless (-e "data/online/rooms/$room/$alias") {
+ require config;
+ &post_prv($alias,"<font color=ffffff>Du befindest Dich nicht im Raum \"<font color=ffa500>$room</font>\" und kannst dort auch keine Nachrichten posten!</font>");
+ &reload_html;
+} elsif (length($$rmsg) > 300) {
+ require config;
+ &post_prv($alias,"<font color=ffffff>Deine Nachricht enthält zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>");
+ &reload_html;
+}
+
+$$rmsg =~ s#<#<\;#g;
+if (substr($$rmsg,0,1) ne "/") {
+ open(MSGFILE,">>data/msgs/$room");
+ unless ($$rmsg =~ s#/me/#<i>$alias</i>#g || $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g) {
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b><;\n";
+ } else {
+ $$rmsg =~ s#/me/#<i>$alias</i>#g;
+ $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$secol>$$rmsg</font></font></b><;\n";
+ }
+ close MSGFILE;
+ opendir(PID,"data/online/pids/$room");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$room/$_") {
+ kill USR1 => $_;
+ }
+ }
+ require config;
+ &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" && $tmp eq "autologout") {
+ print "open(\"index.pl?tmp=autologout\",\"_top\");";
+ &rm_alias($alias,$room);
+ } elsif ($action eq "quit") {
+ print "open(\"index.pl?tmp=quit\",\"_top\");";
+ &rm_alias($alias,$room);
+ }
+ print "parent.input.document.inf.tmp.value = \"notaway\";" if ($tmp eq "away");
+ print "</script></head><body bgcolor=$col>";
+ print $q->end_html;
+ exit 0;
+}
+
+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);
+ }
+ }
+ open(MSGFILE,">>data/msgs/$room");
+ flock(MSGFILE, 2);
+ 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) $alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ open(MSGFILE,">>data/msgs/$room");
+ flock(MSGFILE, 2);
+ print MSGFILE "$alias<;$tmpstamp<;!<;!<;<i><font color=ffffff>($hours:$min:$sec) 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) $alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ...</font></i>");
+ open(MSGFILE,">>data/msgs/$room");
+ flock(MSGFILE, 2);
+ print MSGFILE "$alias<;$tmpstamp<;!<;!<;<i><font color=ffffff>($hours:$min:$sec) Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i><;\n";
+ close MSGFILE;
+ }
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ unlink("data/online/rooms/$oldroom/$alias");
+ &rm_rstat($alias,$oldroom);
+ &check_online;
+}
+
+sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können.
+ require config;
+ $_[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 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Erstellt von Paul C. Bütow (2000 - 2001).</font>");
+ &reload_html;
+#############>- 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;
+ my $js = "<script language='JavaScript'>parent.online.location.reload();</script>";
+ if ($tmp ne "autoaway") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias meldet sich ab (<font color=ffa500>$away_msg</font> ) ...</i></font>$js");
+ } else {
+ $away_msg = " $alias wurde vom System abgemeldet ...";
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)$away_msg</i></font>$js");
+ }
+ open(AWAY,">>data/online/rstat/$room.away");
+ print AWAY "$alias<;$away_msg\n";
+ close AWAY;
+ &reload_html($whisper,"away");
+#############>- 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;
+#############>- 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");
+#############>- AKTUELLES DATUM UND URZEIT AUSGEBEN -<
+ } elsif ($cmd eq "date") {
+ &zeit;
+ &post_prv("$alias","<font color=ffffff>Heute ist der $day.$month. Jahr $year. Es ist genau $hours:$min Uhr und $sec Sekunden.</font>");
+ &reload_html;
+#############>- 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");
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ my $me_msg;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ $me_msg =~ s#/me/#<i>$alias</i>#g;
+ $me_msg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if ($cmd eq "m") {
+ &post($room,"<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>");
+ } else {
+ &post($room,"<b><font color=$col><i>$alias</i> $me_msg</font></b>");
+ }
+ &reload_html;
+#############>- 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 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ open(MEMO,">>data/user/memos/$alias2memo");
+ print MEMO "<font 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;
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>");
+ &reload_html;
+#############>- 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 = $q->param('whisper');
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ }
+ $msg2post =~ s#/me/#<i>$alias</i>#g;
+ $msg2post =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if (-f "data/online/users/$alias2post") {
+ &post_prv($alias2post,"<b><font color=$col><i>$alias flüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &post_prv($alias,"<b><font color=$col><i>Zu $alias2post geflüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &reload_html($alias2post,$action);
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2post <font color=ffffff>ist nicht anwesend !</font></font>");
+ &reload_html;
+#############>- 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 / 3600));
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> war insgesamt schon $totaltime Stunden online!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &zeit;
+ if ($tmp ne "autologout") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias loggt sich aus dem Chat aus ... </font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias wurde vom System automatisch ausgeloggt ... </font></i>");
+ }
+ &reload_html($whisper,"quit");
+#############>- 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) $alias löscht das eigene Gästebuch ...</font></i>");
+ &reload_html;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my $msg2scream;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ my $msg2post = "\U$msg2scream";
+ &post($room,"<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2post</font></font></b>");
+ &reload_html;
+#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGElOGGT 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 color=ffa500>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> hat sich seit der Einführung dieses Befehls noch nie eingeloggt!</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+#############>- 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 color=ffffff>Der aktuelle Raum: $room $theme $door ($nr) : <font color=ffa500>$personen</font></font>");
+ &reload_html;
+#############>- 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 color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: <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 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 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+ &reload_html;
+#############>- 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 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");
+ }
+ }
+ }
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2search <font color=ffffff> ist nicht eingeloggt !</font></font>");
+ &reload_html;
+#############>- 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) $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) $alias sperrt den Raum ab ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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;
+ }
+#############>- 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") {
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>");
+ &reload_html;
+ }
+ open(RSTAT,">>data/online/rstat/$room");
+ flock(RSTAT, 2);
+ print RSTAT $alias2su."\n";
+ close RSTAT;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verleiht \"$alias2su\" Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ &reload_html;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>");
+ &reload_html;
+ }
+#############>- 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") {
+ &rm_rstat($alias2rsu,$room);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2rsu <font color=ffffff>ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !</font></font>");
+ }
+ &reload_html;
+ }
+#############>- 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") {
+ &zeit;
+ my $theme;
+ if ($cmd[1] ne undef) {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $theme = $theme." ".$cmd[$i];
+ }
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias gibt dem Raum das Thema (<font color=ffa500> $theme </font>) ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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]."\n";
+ }
+ open(RSTAT,">data/online/rstat/$room");
+ print RSTAT $theme;
+ close RSTAT;
+ &reload_html;
+ }
+#############>- 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 $nr = @ban;
+ my $banned;
+ foreach(@ban) {
+ chomp($_);
+ $banned .= " $_";
+ }
+ &post_prv("$alias","<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$banned</font></font>");
+ &reload_html;
+ } elsif (-f "data/user/options/$alias2ban") {
+ &hierachie($alias2ban);
+ if ($hierachie eq "wa") {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist Wächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ } elsif ($hierachie eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist Oberwächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ }
+ foreach $ban (@ban) {
+ if ($ban eq $alias2ban."\n") {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>");
+ &reload_html;
+ }
+ }
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verbannt \"$alias2ban\" aus dem Chat ...</font></i>");
+ open(BAN,">>data/ban");
+ print BAN $alias2ban."\n";
+ close BAN;
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2ban <font color=ffffff>kann nicht verbannt werden da Benutzername nicht existiert!</font></font>");
+ &reload_html;
+ }
+#############>- 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) $alias entbannt \"$alias2rban\" ...</font></i>");
+ my @ban2;
+ foreach(@ban) {
+ push(@ban2,$_) if ($_ ne $alias2rban."\n");
+ }
+ open(BAN,">data/ban");
+# flock(BAN, 2);
+ print BAN @ban2; #."\n";
+ close BAN;
+ &reload_html;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2rban <font color=ffffff>ist nicht verbannt!</font></font>");
+ &reload_html;
+ }
+#############>- 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 color=ffa500>$_<font color=ffffff> hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ &reload_html;
+ }
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ &hierachie($alias);
+ if ($hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ if (-f "data/online/users/$alias2kick") {
+ 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 color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>");
+ } elsif ($hierachie eq "wa") {
+ &post_prv("$alias","<font 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>");
+ $_ = undef if ($room eq $raum);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$raum);
+ &rm_alias($alias2kick,$raum);
+ &check_online;
+ }
+ &reload_html;
+ }
+ }
+ }
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>");
+ &reload_html;
+ }
+#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
+ } elsif ($cmd eq "kill") {
+ &hierachie($alias);
+ if ($hierachie eq "ow") {
+ my $alias2kill = $cmd[1];
+ if (-f "data/user/options/$alias2kill") {
+ &hierachie($alias2kill);
+ if ($hierachie eq "ow") {
+ &post_prv($alias,"<font 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 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) $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");
+ open(DEL, ">>data/kill");
+ print DEL "($day.$month.$year $hours:$min:$sec) $alias2kill wurde von $alias gekillt\n";
+ close DEL;
+ }
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2kill <font color=ffffff> existiert nicht in der DB und kann nicht \"gekillt\" werden !</font></font>");
+ }
+ &reload_html;
+ }
+#############>- 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) $alias sperrt den Raum \"$sl_room\" von aussen ab ...</font></i>",$sl_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 color=ffffff>Der Raum <font color=ffa500>$sl_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- 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) $alias ruft in den Raum \"$ss_room\" hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>",$ss_room);
+ &reload_html;
+ } else {
+ &post_prv($alias,"<font color=ffffff>Der Raum <font color=ffa500>$ss_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- 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) $alias gibt dem Raum \"$st_room\" das Thema (<font color=ffa500> $theme </font>) ...</font></i>",$st_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- 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;
+ }
+#############>- 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 color=ffa500>$alias2wa <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>");
+ &reload_html;
+ } elsif ($hierachie eq "ow") {
+ &post_prv("$alias","<font 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;
+ }
+ if (-f "data/user/options/$alias2wa") {
+ &zeit;
+ open(WA,">>data/wa");
+ print WA $alias2wa."\n";
+ close WA;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias ernennt \"$alias2wa\" zum Wächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2wa <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ &reload_html;
+ }
+#############>- 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") {
+ 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;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat \"$alias2rwa\" vom Wächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2rwa <font color=ffffff>ist kein Wächter und können die Wächterrechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- 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 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;
+ } elsif ($hierachie eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$alias2ow <font color=ffffff>ist bereits als Oberwächter eingetragen!</font></font>");
+ &reload_html;
+ }
+ if (-f "data/user/options/$alias2ow") {
+ open(OW,">>data/ow");
+ print OW $alias2ow."\n";
+ close OW;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias ernennt \"$alias2ow\" zum Oberwächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2ow <font color=ffffff>kann nicht zum Oberwächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ &reload_html;
+#############>- 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") {
+ 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;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat \"$alias2row\" vom Oberwächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2row <font color=ffffff>ist kein Oberwächter und können die Wächterrechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- 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 color=ffa500>$pw2show <font color=ffffff> hat das Passwort \"".$pw[0]."\" !</font></font>");
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$pw2show <font color=ffffff> existiert nicht in der Benutzerdatenbank !</font></font>");
+ &reload_html;
+#############>- 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) $msg2post</font></i>");
+ &reload_html;
+#############>- SPION -<
+#} elsif ($cmd eq "sr") {
+# my $secroom = $cmd[1];
+# open(MSGFILE,">>data/msgs/$room");
+# print MSGFILE "$alias<;".time."<;sr<;$secroom<;!<;\n";
+# close MSGFILE;
+# &reload_html;
+#} elsif ($cmd eq "csr") {
+# my $secroom = $cmd[1];
+# open(MSGFILE,">>data/msgs/$room");
+# print MSGFILE "$alias<;".time."<;csr<;!<;!<;\n";
+# close MSGFILE;
+# &reload_html;
+#############>- ENDE DER CHATBEFEHLE -<
+ }
+ &post_prv($alias,"<font 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.9/main2.pl b/0.4.9/main2.pl new file mode 100644 index 0000000..54f5ce2 --- /dev/null +++ b/0.4.9/main2.pl @@ -0,0 +1,640 @@ +#!/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 color=ffffff><a href=\"main2.pl?alias=$tmp&var=alias_html&tmp=$alias&tmpid=$tmpid\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$tmp&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;
+ my $nr = 1;
+ if ($alias ne $tmp) {
+ foreach(@datei) {
+ print "<br>Eintrag # $nr: $_";
+ $nr++;
+ }
+ } 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>
+ <br>
+ Eintrag # $nr:
+ $datei[$i]
+ </div>
+ </td>
+ </tr>
+END
+$nr++;
+}
+print <<END;
+ </table>
+ <table>
+ <tr>
+ <td>
+ <font color=ffffff>
+ <input type="submit" value="Markierten Eintrag löschen">
+ </font>
+ </td>
+ <td>
+ <font color=ffffff>
+ <input type="reset" value="Markierung 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;
+ foreach(@data) {
+ chomp $_;
+ }
+ if ($method eq "edit_options_html") {
+ if ($message eq "edit_options_ok") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Chateinstellungen geändert ...</font></i>");
+print <<END;
+<script language="JavaScript">
+ open("main.pl?var=change_colors&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","reload");
+</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>
+ <hr>
+ <div>Einstellungen für den Nachrichten-Verlauf</div>
+ <table>
+ <tr>
+ <td>
+ <br>
+ <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div>
+ <font color=ffffff>
+ <select name="maxVerlauf" size="1">
+ <option value="$data[3]">$data[3]
+END
+for($i=1;$i<=50;$i++) {
+ print "<option value=\"$i\">$i";
+}
+print<<END;
+ </select>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <br>
+<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div>
+ <font color=ffffff>
+ <select name="verlaufOrder" size="1">
+ <option value="$data[4]">Bisherige Einstellung ($data[4])
+ <option value="0">Neue Verlaufnachrichten oben (0)
+ <option value="1">Neue Verlaufnachrichten unten (1)
+ </select>
+ </font>
+ </td>
+ </tr>
+ </table>
+<br>
+ <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div>
+ <hr>
+ <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 markieren 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") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat das Profil geändert ...</font></i>");
+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") {
+ my $url = $q->param('homepage');
+ $url =~ s#^[http://]*##g;
+ 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"."http://$url\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;
+ }
+ open(OPTIONS,">data/user/options/$alias");
+ print OPTIONS $id."\n".$col."\n".$secol."\n".$q->param("maxVerlauf")."\n".$q->param("verlaufOrder");
+ close OPTIONS;
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
\ No newline at end of file diff --git a/0.4.9/online.pl b/0.4.9/online.pl new file mode 100644 index 0000000..e785652 --- /dev/null +++ b/0.4.9/online.pl @@ -0,0 +1,84 @@ +#!/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
+
+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;
+}
+
+&start_html("Online","online");
+opendir(ROOM,"data/online/rooms/".$room);
+ my @room = readdir(ROOM);
+closedir(ROOM);
+my $chatter = $#room-1;
+print $q->div( "$room ($chatter):" ), "<table>";
+ @room = sort(@room);
+ foreach $online (@room) {
+ if (-f "data/online/rooms/$room/$online") {
+ &prove_away($online,$room);
+ if ($away ne undef) {
+ print "<tr><td><img title='$away' alt='$away' src='$gfxpath/away.gif'></td>";
+ goto WEITER;
+ }
+ &hierachie($online);
+ if ($hierachie eq "ow") {
+ print "<tr><td><img title='Oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>";
+ goto WEITER;
+ } elsif ($hierachie eq "wa") {
+ print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>";
+ goto WEITER;
+ }
+ &prove_besetzer($online,$room);
+ if ($r_besetzer eq "true") {
+ print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>";
+ } else {
+ print "<tr><td></td>";
+ }
+WEITER:
+ print "<td><a href='main2.pl?var=alias_html&alias=$alias&tmp=$online&tmpid=$tmpid' target='$online'><font size='1' face='arial'>$online</font></a></td></tr>";
+ }
+ }
+print "</table>", $q->end_html;
+
+
diff --git a/0.4.9/ow.gif b/0.4.9/ow.gif Binary files differnew file mode 100644 index 0000000..c2a5c2a --- /dev/null +++ b/0.4.9/ow.gif diff --git a/0.4.9/push.pl b/0.4.9/push.pl new file mode 100644 index 0000000..6606e52 --- /dev/null +++ b/0.4.9/push.pl @@ -0,0 +1,122 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+#CGI->compile(':all');
+$q = new CGI;
+print
+ $q->header;
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+
+{
+ open(IDENT,"<data/online/ident/$alias");
+ my @ident = <IDENT>;
+ close IDENT;
+ if ($ident[1] ne $tmpid) {
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ open(ERROR,">>data/error");
+ print ERROR "$alias $tmpid $$ ".time." $error_msg \n";
+ close ERROR;
+ exit 0;
+ }
+}
+
+$room = $q->param("room");
+#$SIG{INT} = ignore;
+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>Willkommen im yChat [PID: $pid]</font><br>
+END
+
+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,@flood;
+OPENMSGFILE:
+$change_room = 0;
+$startime = time;
+
+if (-e "data/msgs/$room") {
+ open(MSGFILE,"<data/msgs/$room");
+ unless (-d "data/online/pids") {
+ mkdir "data/online/pids", 0777;
+ } unless (-d "data/online/pids/$room") {
+ mkdir "data/online/pids/$room", 0777;
+ }
+ open(PID,">data/online/pids/$room/$pid");
+ print PID time;
+ close PID;
+} else {
+ sleep 1;
+ goto OPENMSGFILE;
+}
+
+&sendmsgs;
+while (-f "data/online/users/$alias") {
+ local $SIG{USR1} = \&sendmsgs;
+ goto OPENMSGFILE if ($change_room == 1);
+ sleep 15;
+ print "\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") {
+ unlink("data/online/pids/$room/$pid");
+ $room = $action;
+ close MSGFILE;
+ $change_room = 1;
+ }
+ print "$message<br>\n" if ($change_room != 1);
+ push(@flood,$message);
+ if ($flood[0] eq $flood[1] && $flood[0] eq $flood[2] && $flood[0] eq $flood[3]) {
+ print "<i><font color=red> Jemand floodet den Chat !</font></i><br>\n";
+ }
+ shift(@flood) if ($#flood > 2);
+ }
+ }
+ }
+ seek(MSGFILE, $curpos, 0);
+}
+
+#sub snp {
+# exec('perl push.pl?alias=$alias&room=$room');
+#}
+
+unlink("data/online/pids/$room/$pid");
\ No newline at end of file diff --git a/0.4.9/rb.gif b/0.4.9/rb.gif Binary files differnew file mode 100644 index 0000000..1187798 --- /dev/null +++ b/0.4.9/rb.gif diff --git a/0.4.9/setup.sh b/0.4.9/setup.sh new file mode 100644 index 0000000..6b3ef8a --- /dev/null +++ b/0.4.9/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.9/stat.pl b/0.4.9/stat.pl new file mode 100644 index 0000000..51e4d4d --- /dev/null +++ b/0.4.9/stat.pl @@ -0,0 +1,207 @@ +#!/usr/bin/perl -w
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+
+my $var = $q->param('var');
+my $alias = $q->param('alias');
+my $tmpid = $q->param('tmpid');
+
+print $q->header();
+&start_html("Statistiken");
+print $q->div("yChat Statistiken"), $q->hr,
+ $q->div( $q->a( { -href=>"stat.pl?var=ranking&alias=$alias&tmpid=$tmpid" }, "Rankings"), " | ",
+ $q->a( { -href=>"stat.pl?var=del&alias=$alias&tmpid=$tmpid" }, "Loginstatistiken"), " | ",
+ $q->a( { -href=>"stat.pl?var=stat&alias=$alias&tmpid=$tmpid" }, "DB-Statistik"), " | ",
+ $q->a( { -href=>"stat.pl?var=code&alias=$alias&tmpid=$tmpid" }, "Programmcode"), " | ",
+ ), $q->hr;
+# $q->a( { -href=>"stat.pl?var=var&alias=$alias&tmpid=$tmpid" }, "Umgebungsvariablen")
+
+
+if ($var eq "ranking") {
+
+ opendir(COUNTS, "data/user/counts");
+ my @counts = readdir(COUNTS);
+ closedir(COUNTS);
+
+ print "<div>";
+
+ my $nr_start = $q->param('start');
+ my $nr_end = $q->param('end');
+ my %online;
+ my $rank;
+ my $nr;
+
+ foreach(@counts) {
+ if(-f "data/user/counts/$_" ) {
+ if (s#.online##g) {
+ open(TOTAL, "<data/user/counts/$_.online");
+ my $total = <TOTAL>;
+ close TOTAL;
+ $online{sprintf("%.2f",($total / 3600))} = $_;
+ }
+ }
+ }
+ print "<div>", $q->b("Rankings:"), $q->br,
+ "<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>";
+
+ if (!$nr_start) {
+ $nr_start = 1;
+ } if (!$nr_end) {
+ $nr_end = 20;
+ }
+
+ foreach $wert (reverse(sort { $a <=> $b } keys %online)) {
+ $nr++;
+ if ($online{$wert} eq $alias) {
+ $rank = $nr;
+ last if ($nr > $nr_end);
+ }
+ next if ($nr < $nr_start || $nr > $nr_end);
+ print "<tr><td><font color='ffffff' size='1' face='arial'>".$nr."</font></td><td><font color='ffffff' size='1' face='arial'> ".$wert."h </font></td><td> <a href='main2.pl?var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n";
+ }
+ print "</table>", $q->hr;
+ $nr_start -= 20; $nr_end -= 20;
+ print "Rankings von <a href='stat.pl?var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" if ($nr_start > 0);
+ $nr_start += 40; $nr_end += 40;
+ print "Rankings von <a href='stat.pl?var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...",
+ $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>");
+
+} elsif ($var eq "del") {
+
+ print "<div>", $q->b("Alte Benutzer löschen:"), $q->br,
+ "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gelöscht.", $q->br, $q->br;
+
+ opendir(USER, "data/user/options");
+ my @user = readdir(USER);
+ closedir(USER);
+ @user = sort(@user);
+
+ my $i = 0;
+ my $j;
+ my $k = 0;
+ my $l = 0;
+ my $full = $q->param('tmp');
+
+ foreach(@user) {
+ if (-f "data/user/lastlogin/$_") {
+ open(LOGIN,"<data/user/lastlogin/$_");
+ my $login = <LOGIN>;
+ close LOGIN;
+ $login = sprintf("%.2f",((time - $login) / 3600));
+ $j++;
+ if (999 < $login && $login < 1440) { # 1440 = 60 Tage
+ $k++;
+ print $q->font( { -color=>"ffa500" }, $q->b( "$j($k) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef);
+ } elsif ($login < 48) {
+ $l++;
+ print $q->font( { -color=>"ffffef" }, $q->b( "$j($l) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef);
+ } elsif ($login < 1440) {
+ print "$j $_ Letztes Login vor: ".$login."h", $q->br, "\n" if ($full ne undef);
+ } else {
+ $k++;
+ &kill($_,$i++,$login);
+ }
+ } elsif (-f "data/user/options/$_") {
+ &kill($_,$i++);
+ }
+ }
+ print $q->hr if ($full ne undef);
+ print "</div>", $q->div( $q->b(
+ "$j Benutzer befinden sich in der Datenbank!", $q->br,
+ $q->font( { -color=>"ffffef" }, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br,
+ $q->font( { -color=>"ffa500" }, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br,
+ $q->font( { -color=>"ff0000" }, "$i Benutzer wurden gerade eben gelöscht!") ), $q->br, $q->br,
+ "PS: Jeder registrierte Benutzername wird nur einmal gezählt!" );
+ print $q->br, $q->div( "(", $q->a( { -href=>"stat.pl?var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, "Vollständige Ansicht"), ")" ) if ($full eq undef);
+
+} elsif ($var eq "var") {
+
+ print "<div>", $q->b("Server Umgebungsvariablen:"), $q->br, $q->br;
+ while(($key,$value) = each(%ENV)) {
+ print "$key = $value\n", $q->br;
+ }
+ print "</div>";
+
+} elsif ($var eq "stat") {
+
+ print $q->div( $q->b("yChat-DB Statistik:") ), $q->br;
+ $files = 0;
+ $size = 0;
+ $directorys = 1;
+ &zaehle("data");
+ $size = sprintf("%.2f", ($size/1048576));
+ print $q->div( "Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys");
+
+ } elsif ($var eq "code") {
+
+ print $q->div( $q->b("yChat Programmcode-Statistik:") ), $q->br;
+
+ my $zeilen;
+ my $size;
+ my $bytes;
+ my $files;
+
+ opendir(DIR,".");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ $dir = sort(@dir);
+
+ foreach(@dir) {
+ if (/.+[pl]$/ || /.+[pm]$/) {
+ $bytes = (-s);
+ $size += $bytes;
+ open(PL, "<$_");
+ my @pl = <PL>;
+ close PL;
+ local $nr = $#pl+1;
+ $zeilen += $nr;
+ $files++;
+ print $q->div("Datei $files: $nr Zeilen, $bytes Bytes"), $q->br, "\n";
+ }
+ }
+print $q->div( $q->b("Programmcode: $files Dateien, $zeilen Zeilen", $q->br, "Größe: $size Bytes") );
+
+}
+
+print $q->end_html;
+
+sub zaehle {
+ local ($dir,$data) = @_;
+ $dir = "$dir/$data" if ($data ne undef);
+ opendir(DATA,$dir);
+ local @data = readdir(DATA);
+ closedir(DATA);
+ $files2 = 0;
+ foreach(@data) {
+ if (-f "$dir/$_") {
+ $files++;
+ $files2++;
+ $size += (-s "$dir/$_");
+ } elsif (-d "$dir/$_" && $_ ne "." && $_ ne "..") {
+ $directorys++;
+ &zaehle($dir,$_);
+ }
+ }
+}
+
+sub kill {
+ my ($rm,$nr,$login) = @_;
+ $login = "XXXXXX" if ($login eq undef);
+ print $q->font( { -color=>"ff0000" }, $q->b( "$j($nr) $rm Letztes Login vor: ".$login."h (wurde gelöscht)") ), $q->br, "\n";
+ print "<font size='1'>";
+ print "options " if unlink("data/user/options/$rm");
+ print "profiles " if unlink("data/user/profiles/$rm");
+ print "gbooks " if unlink("data/user/gbooks/$rm");
+ print "counts " if unlink("data/user/counts/$rm");
+ print "counts.online " if unlink("data/user/counts/".$rm.".online");
+ print "lastlogin " if unlink("data/user/lastlogin/$rm");
+ print "memos" if unlink("data/user/memos/$rm");
+ print "</font>", $q->hr, "\n";
+ &zeit;
+ open(DEL, ">>data/kill");
+ print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n";
+ close DEL;
+}
\ No newline at end of file diff --git a/0.4.9/wa.gif b/0.4.9/wa.gif Binary files differnew file mode 100644 index 0000000..2b1ba45 --- /dev/null +++ b/0.4.9/wa.gif diff --git a/0.4.9/y.gif b/0.4.9/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.4.9/y.gif diff --git a/0.4.9/yIntro.swf b/0.4.9/yIntro.swf Binary files differnew file mode 100644 index 0000000..d592826 --- /dev/null +++ b/0.4.9/yIntro.swf diff --git a/0.4.9/ySymbol.swf b/0.4.9/ySymbol.swf Binary files differnew file mode 100644 index 0000000..2b899bb --- /dev/null +++ b/0.4.9/ySymbol.swf diff --git a/0.4.9/y_.gif b/0.4.9/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.4.9/y_.gif diff --git a/0.6.0/CREDITS.txt b/0.6.0/CREDITS.txt new file mode 100644 index 0000000..84ec216 --- /dev/null +++ b/0.6.0/CREDITS.txt @@ -0,0 +1,33 @@ +########################### 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.
+ ... die Optimierung der Statusgrafiken in der Onlineliste.
+ ( 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.
+ ... die Erstellung der "Chatiquette".
+ ... einige Bugfixes in JavaScript-Codes.
+ ( maligree.yi.org )
+
+ - Dommi für die Erstellung der Away-Grafik. Diese wurde jedoch nachträglich
+ von mir verfärbt :-)
+
+ - Larry Wall, für die Erfindung von Perl !
\ No newline at end of file diff --git a/0.6.0/README.txt b/0.6.0/README.txt new file mode 100644 index 0000000..b67f15e --- /dev/null +++ b/0.6.0/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.6.0/SETUP.txt b/0.6.0/SETUP.txt new file mode 100644 index 0000000..700b229 --- /dev/null +++ b/0.6.0/SETUP.txt @@ -0,0 +1,140 @@ +############################## 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
+stat.pl => Erstellt diverse Statistiken
+README.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+CREDITS.txt => Personen, die geolfen haben yChat zu proggen
+SETUP.txt => Dieses Dokument
+chatiq.sno => Datei beinhaltet die Chatiquette
+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/*
+
+- Verzeichnis für die Raumstatusdateien. Hier wird abgespeichert:
+ Raumbesetzer, Away (inkl. Away-Nachricht)und das Raumthema.
+ ./cgi-bin/yChat/data/online/rstat/*
+
+ - 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/*
+
+- 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 Grafik- und Multimediadateien (*.gif, *.jpg, *.swf) 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.6.0/TODO.txt b/0.6.0/TODO.txt new file mode 100644 index 0000000..4538bea --- /dev/null +++ b/0.6.0/TODO.txt @@ -0,0 +1,32 @@ +############################## yChat.de TODO ################################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+
+Folgende Funktionen werden demnächst evtl. in yChat integriert:
+
+ - OOP bei den HTML-Eingabeformularen und dem Menü.
+
+ - Kein CGI.pm im main.pl und config.pm.
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - 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 :-)
\ No newline at end of file diff --git a/0.6.0/UPDATES.txt b/0.6.0/UPDATES.txt new file mode 100644 index 0000000..1bb6902 --- /dev/null +++ b/0.6.0/UPDATES.txt @@ -0,0 +1,249 @@ +########################### 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.9 auf 0.6.0 (22.02.01)
+ - Auf der Startseite wird angezeigt, wer alles eingeloggt ist.
+ - Das Skript 'online.pl' wurde komplett überarbeitet.
+ - Viele Programmteile des gesamten Systems wurden überarbeitet und
+ optimiert.
+ - Der Chat hat den neuen Menüpunkt "Chatiquette" bekommen, dort
+ stehen die wichtigsten Verhaltensregeln für Chatter.
+ - Oberwächter können in der "Statistik" die Serverumgebungsvariablen
+ einsehen.
+ - Erweiterung der Errorlogfunktion.
+ - Neue Befehle: mit "/banip Alias" wird ie IP-Nummer von Alias aus
+ dem Chat verbannt. Mit "/rbanip ip://x.x.x.x" wird diese IP-Nummer
+ entbannt. Mir "/rban ip://x.x.x.x" läßt sich eine verbannte
+ IP-Nummer zwar auch entbannen, diese wird jedoch allen Chattern
+ offen präsentiert. Die verbannten IP-Nummern sind mit dem bisher
+ bekannten Befehl "/ban" einzusehen. Die Liste der verbannten
+ IP-Nummern befindet sich in der Datei "data/ban".
+ - Die Liste der Chatbefehle wurde übersichtlicher gemacht.
+ - Noch zufälligere TempIDs.
+ - Bei "/kill Alias" wird Alias auch aus der Datei "data/ban"
+ entfernt.
+
+Update von 0.4.8 auf 0.4.9 (11.02.01)
+ - "/online Alias" zeigt die Onlinezeit in Stunden, nicht mehr in
+ Minuten an.
+ - Hinzufügung des Statistikskripts "stat.pl" unter dem Menüpunkt
+ "Statistik". Das Top 40 - PHP Skript wurde nicht mehr benötigt und
+ gelöscht.
+ - Neue Befehle: /me/ und /m/ (Müssen inmitten des Textes eingegeben
+ werden.)
+ - Wird ein Benutzer aus dem Chat gekillt, so wird dies in der Datei
+ "data/kill" protokolloert.
+ - In der main.pl wird die Datei "config.pm" per "require" nur noch
+ in das Dokument eingefügt, wenn es notwendig ist.
+ - In der Onlineliste neben dem Raumnamen steht nun, wieviele Benutzer
+ sich im aktuellen Raum befinden. Ausserdem wird in der Onlineliste
+ angezeigt, ob ein Benutzer abgemeldet ist oder nicht und welche
+ Rechte er hat. Die Onlineliste ist nun Alphabetisch sortiert.
+ - Wird das Profil geändert und das http:// bei der Homepage-Adresse
+ vergessen, so wird dies automatisch hinzugefügt.
+ - Viele Bugfixes.
+
+Update von 0.4.7 auf 0.4.8 (26.01.01)
+ - Top 20 Ranking Liste in PHP4.
+ - Überarbeitung des Flash-Intros.
+ - PIDs für die Signalhandler werden zuverlässiger abgespeichert und
+ ggf. wieder gelöscht.
+ - Das push.pl-Skript (endlosschleife) benötigt nun nurnoch halb so
+ viel Speicher beim Ausführen. Die Datei config.pm wird nicht mehr
+ mit "require config;" eingebunden.
+ - Benutzernamen dürfen maximal nurnoch 15 Zeichen lang sein.
+ - Chatnachrichten dürfen maximal nurnoch 300 Zeichen lang sein.
+ - Wenn ein Benutzer eine Nachricht textet, überprüft das System, ob
+ derjenige sich auch wirklich im jew. Raum befindet.
+ - In den Chatoptionen kann man zusätzliche Einstellungen vornehmen:
+ 1.) Anzahl der Nachrichten im Nachrichten-Verlauf
+ 2.) Anordnung der Nachrichten im Nachrichten-Verlauf.
+ Neueinstellungen dieser Optionen werden erst nach einem
+ Neueinloggen aktiv.
+ - Die Error-Logdatei "data/error" wurde erweitert.
+
+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.6.0/away.gif b/0.6.0/away.gif Binary files differnew file mode 100644 index 0000000..10d460b --- /dev/null +++ b/0.6.0/away.gif diff --git a/0.6.0/chatiq.sno b/0.6.0/chatiq.sno new file mode 100644 index 0000000..cf8be28 --- /dev/null +++ b/0.6.0/chatiq.sno @@ -0,0 +1 @@ +<style type="text/css">
li { color: #ffffff }
</style>
<div><h2>Chatiquette</h2></div>
<hr>
<div>
Hier einige Grundlagen ...</div>
<ul><li><div>
Vergiss nie, dass am anderen Ende auch nur Menschen sitzen. Diese mögen es gar nicht, angepöbelt, beleidigt oder in sonstiger Weise angegriffen zu werden.
</div></li>
<li><div>
Störend ist auch immer, wenn ein privater Streit im Chat ausgetragen wird. Tragt eure privaten Sachen ausserhalb des Chats aus.<br>Selbst wenn es nur Spass ist - weiss der Rest im Chat das?
</div></li>
<li><div>
Dauergeschrei fällt auch immer wieder störend auf. Was in Grossbuchstaben geschrieben wird, wird als Schreien bezeichnet.
</div></li>
<li><div>
Unsere ganz besonderen Spezialisten wollen auch immer wieder rausfliegen. Um das zu erreichen, senden sie die ganze Zeit Unsinn.
</div></li>
<li><div>
Diskussionen sind dagegen kein Problem. Dafür ist ein Chat ja da. Sobald allerdings das Thema der Diskussion zu sehr entgleist, sollte die Diskussion in einen etwas weniger öffentlichen Raum verlegt werden.
</div></li>
</ul><div>
Daraus ergeben sich folgende Regeln:
</div><ul>
<li><div>
keinen beleidigenden Wortschatz verwenden
</div></li>
<li><div>
obzöner und verfassungsfeindlicher Wortschatz fällt auch weg
</div></li>
<li><div>
streitet euch woanders oder in einem privaten Raum
</div></li>
<li><div>
schreit nich so viel
</div></li>
<li><div>
schreibt keinen Unsinn, der so aussieht, als ob eure Katze über die Tastatur gelaufen ist
</div></li>
<li><div>
schreibt nicht zu schnell hintereinander, besonders nicht dasselbe
</div></li>
<li><div>
verlagert die Diskussion, wenn sich jemand gestört fühlt
</div></li>
<li><div>
Diese Liste ist nicht vollständig. Mit dem gesunden Menschenverstand sollte es eigentlich möglich sein, sich die nicht aufgeführten Punkte zu denken.
</div></li>
</ul><div>
So - nach den ganzen "lass-es-bessers" noch ein paar Überlebenstips:
</div><ul>
<li><div>
beachte die oben stehenden Punkte ;-)
</div></li>
<li><div>
es macht sich immer gut, beim Reinkommen mal zu grüssen
</div></li>
<li><div>
warte nicht, bis man/frau dich anspricht - werde selbst aktiv und gib deinen Senf dazu
</div></li>
<li><div>
es gibt meist kein allgemein anerkanntes Gesprächsthema - lies dich einfach rein
</div></li>
<li><div>
die frage "wer will chatten" ist eigentlich überflüssig in einem Chat (wir warten doch alle nur aufs Ufo ;-)
</div></li>
<li><div>
fang nich sofort mit den W-Fragen (woher, wie alt, weiblich oder männlich?) an - es stört einige Leute
</div></li></ul>
<div>
Problematisch für die Wächter und Oberwächter ist:
</div><ul>
<li><div>
"der nervt mich - schmeiss den mal raus" ist oft nicht nachvollziehbar, weil der WÄ oder OW die Vorgeschichte - die vielleicht ausserhalb des yChat stattgefunden hat - nicht kennt oder keinen Beweis dafür hat.
</div></li></ul>
<hr>
<div><h2>
Richtlinien für den gestressten WÄ und OW:
</h2></div>
<ul><li><div>
Du hast die Macht - aber mißbrauche sie nicht!
</div></li>
<li><div>
Leute, die ganz offensichtlich stören wollen und dabei den Chatbetrieb massiv behindern, sofort rausschmeissen! Kriterien dazu:
</div>
<ul><li><div>
Fluten des Chats
</div></li><li><div>
Wiederholung von Parolen
</div></li><li><div>
Exzessive Nutzung von zufälligen Buchstaben-/Zeichenfolgen
</div></li>
<li><div>
usw...
</div></li></ul>
</li>
<li><div>
Bei den anderen vorher noch eine Warnung aussprechen...
</div></li>
<li><div>
Nicht vergessen: auch für euch gelten die oben aufgeführten Regeln!
</div></li>
<li><div>
Vergabe von Raumbesetzer- und Wächterrechten:<br>
(dies gilt für RB-Vergabe in der Cyberbar, WÄ allgemein)
</div>
<ul>
<li><div>
Um RB oder WÄ betteln wird schon mal gar nicht beachtet.
</div></li>
<li><div>
Wer WÄ wird, soll sichs verdienen - z.B. durch häufiges Helfen bei Neulingen.
</div></li>
<li><div>
Ein WÄ sollte schon öfter im Chat sein.
</div></li>
<li><div>
Oberwächter zu werden ist sehr schwierig. Frag gar nicht erst danach ;-)
</div></li>
</ul>
</ul><div>
Wer meint, von einem Wächter oder Oberwächter ungerecht behandelt worden zu sein (z.B. weil dieser wegen persönlichen Streitigkeiten rausschmeisst), richte seine Klage an einen Oberwächter oder direkt an den obersten Boss: Snooper (<a href="mailto:admin@ychat.de">admin@ychat.de</a>).
</div>
</body>
</html>
\ No newline at end of file diff --git a/0.6.0/colors.sno b/0.6.0/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.6.0/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.6.0/config.pm b/0.6.0/config.pm new file mode 100644 index 0000000..6f79fb9 --- /dev/null +++ b/0.6.0/config.pm @@ -0,0 +1,314 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$datum = "22.02.01";
+$version = "0.6.0";
+$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, geneva, verdana, helvetiva; font-size: 12px; color: #ffffff }
+ div.b { font-weight: bold; color: #ffa500 }
+ a { color: #ffffef; }
+ a:hover { color: #ffffff; }
+ p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; }
+</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; background-color: #ffffff; 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");
+ while(<FILE2PRINT>) {
+ print "$_\n";
+ }
+ close FILE2PRINT;
+}
+
+sub start_html { # Der HEADER einer HTML-Datei
+ print "<html><head><title>$title - $_[0]</title>$_[2]$style</head>";
+ 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 = $room;
+ @rooms = ($room,$secroom) if ($room ne $secroom);
+ foreach $raum (@rooms) {
+ open(MSGFILE,">>data/msgs/$raum");
+ print MSGFILE "!<;".time."<;!<;!<;$msg2post<;\n";
+ close MSGFILE;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ }
+ &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;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ goto ENDPRV;
+ }
+ }
+ }
+ENDPRV:
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my $msg2log = $_[0];
+ my $js;
+ &zeit;
+ ($msg2log,$js) = split(/<script/, $msg2log);
+ 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 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");
+ flock(ERROR, 2);
+ print ERROR "Alias: $alias TempID: $tmpid File. $0 PID: $$ Time: ".time." Message: $error_msg \n";
+ close ERROR;
+ exit 0;
+}
+
+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);
+ } else {
+ unlink("data/online/rooms/$raum/$benutzer");
+ }
+ &zeit;
+ &post($raum,"<i><font color=ffffff>($hours:$min:$sec) $benutzer hat den Chat verlassen ... </font></i>");
+ }
+ }
+ }
+ }
+ opendir(PIDS,"data/online/pids/$raum");
+ my @pids = readdir(PIDS);
+ closedir(PIDS);
+ if ($raumleer == 1) { # Falls Raum leer ist => entf.
+ rmdir("data/online/rooms/$raum");
+ unlink("data/online/rstat/$raum");
+ unlink("data/online/rstat/$raum.away");
+ unlink("data/msgs/$raum");
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ unlink("data/online/pids/$raum/$_");
+ }
+ }
+ rmdir("data/online/pids/$raum");
+ } else {
+ foreach(@pids) {
+ unless (kill 0 => $_) {
+ unlink("data/online/pids/$room/$_");
+ }
+ }
+ }
+ }
+}
+
+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++) {
+ chomp($rstat[$i]);
+ push(@rstat2,$rstat[$i]."\n") if ($rstat[$i] ne $r_alias);
+ }
+ open (RSTAT,">data/online/rstat/$rstatroom");
+ flock(RSTAT, 2);
+ print RSTAT @rstat2;
+ close RSTAT;
+}
+
+sub rm_away { # Benutzer als Raumbesetzer austragen
+ my ($a_alias,$rstatroom) = @_;
+ open (AWAY,"<data/online/rstat/$rstatroom.away");
+ my @away = <AWAY>;
+ close AWAY;
+ my @away2;
+ foreach (@away) {
+ my @split = split(/<;/);
+ push(@away2, $_) if ($a_alias ne $split[0]);
+ }
+ open (AWAY,">data/online/rstat/$rstatroom.away");
+ print AWAY @away2;
+ close AWAY;
+}
+
+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!");
+ }
+}
+
+sub hierachie { # Chatter nach SU überprüfen.
+ open WA, "<data/wa";
+ my @was = <WA>;
+ close WA;
+ foreach(@was) {
+ chomp;
+ if ($_ eq $_[0]) {
+ return "wa";
+ }
+ }
+ open OW, "<data/ow";
+ my @ows = <OW>;
+ close OW;
+ foreach(@ows) {
+ chomp;
+ if ($_ eq $_[0]) {
+ return "ow";
+ }
+ }
+}
+
+sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat
+ my ($alias,$room,$method) = @_;
+ open DATEI,"<data/online/rstat/$room";
+ my @rstat = <DATEI>;
+ close DATEI;
+ if ($method eq "return_list") {
+ my @value;
+ for($i=2;$i<=$#rstat;$i++) {
+ push @value,$rstat[$i];
+ }
+ return @value;
+ }
+ for($i=2;$i<=$#rstat;$i++) {
+ chomp($rstat[$i]);
+ if ($rstat[$i] eq $alias) {
+ return 1;
+ }
+ }
+}
+
+sub prove_away { # Prüfen, ob Benutzer abgemeldet ist
+ my ($a_alias,$room,$method) = @_;
+ open(DATEI,"<data/online/rstat/$room.away");
+ @away = <DATEI>;
+ close DATEI;
+ if ($method eq "return_list") {
+ my %away;
+ foreach(@away) {
+ $away{$alias} = split(/<; /);
+ }
+ return %away;
+ }
+ my $alias, $away;
+ foreach(@away) {
+ if (/^$a_alias.*/) {
+ ($alias,$away) = split(/<; /);
+ chomp($away);
+ return $away;
+ }
+ }
+}
+
+# sub debug { open DEBUG,">data/debug"; while(@_) { chomp; print DEBUG "$_\n"; } close DEBUG;}
\ No newline at end of file diff --git a/0.6.0/help.sno b/0.6.0/help.sno new file mode 100644 index 0000000..9f44f96 --- /dev/null +++ b/0.6.0/help.sno @@ -0,0 +1,60 @@ +<div>
+ Alle Chat-Befehle:
+</div>
+<hr>
+<table border=1>
+<tr><th><div>SU</div></th><th><div>Befehl</div></th><th><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>Chat 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>/sl <font color=red>Raum</font></div></td><td><div>Einen anderen <font color=ffa500>Raum</font> absperren</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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=ffa500>Raum</font> ein <font color=ffa500>Thema</font > geben</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/banip <font color=red>Alias</font></div></td><td><div>Die IP-Nummer von <font color=red>Alias</font> verbannen</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/rbanip ip://<font color=red>x.x.x.x</font></div></td><td><div>Die IP-Nummer <font color=red>x.x.x.x</font> "entbannen"</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><br>
+ Nur Oberwächer können Logdateien der Cyberbar lesen!<br><br>
+ Oberwächter ernennt nur der Systemadministrator!
+</div>
+</body>
+</html>
\ No newline at end of file diff --git a/0.6.0/htdocs.pl b/0.6.0/htdocs.pl new file mode 100644 index 0000000..8476962 --- /dev/null +++ b/0.6.0/htdocs.pl @@ -0,0 +1,245 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print $q->header;
+
+$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);
+ if (&hierachie($alias) eq "ow") {
+ &printfile($tmp,"Logdatei","blank");
+ }
+} elsif ($var eq "superuser_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &secure_checkid($alias);
+ &superuser_html;
+} elsif ($var eq "chatiquette_html") {
+ &printfile("chatiq.sno","Chatiquette");
+} 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=ffffff>$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")'>Optionen</a>
+ <a href='javascript:fenster("main2.pl?var=list_alias_html&alias=$alias&tmpid=$tmpid","Benutzerliste")'>Benutzer</a>
+ <a href='javascript:fenster("htdocs.pl?var=help_html&tmpid=$tmpid","Befehle")'>Befehle</a>
+ <a href='javascript:fenster("main2.pl?var=gb_html&alias=$alias&tmpid=$tmpid","Board")'>Board</a><br>
+ <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("stat.pl?&alias=$alias&tmpid=$tmpid","Statistik")'>Statistik</a>
+ <a href='javascript:fenster("htdocs.pl?var=chatiquette_html","Chatiquette")'>Chatiquette</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
+ if (&hierachie($alias) 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 ";
+ if (hierachie($alias) eq "ow") {
+ print
+ $q->b( "Oberwächter" ),
+ " (OW) eingetragen.</div>",
+ $q->hr;
+ } elsif (hierachie($alias) eq "wa") {
+ print
+ $q->b( "Wächter" ),
+ " (WÄ) eingetragen.</div>",
+ $q->hr;
+ } else {
+ print
+ $q->b( "normaler Chatter" ),
+ " (NC) eingetragen.</div>",
+ $q->hr;
+ }
+
+ open WA, "<data/wa";
+ my @was = <WA>;
+ close WA;
+ open OW, "<data/ow";
+ my @ows = <OW>;
+ close OW;
+
+ 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.6.0/index.pl b/0.6.0/index.pl new file mode 100644 index 0000000..5440dd3 --- /dev/null +++ b/0.6.0/index.pl @@ -0,0 +1,446 @@ +#!/usr/bin/perl
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print $q->header;
+
+$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");
+ flock(COUNT, 2);
+ print COUNT $counter;
+close COUNT;
+opendir(USERS,"data/online/users");
+ my @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 "autologout") {
+print <<END;
+ <div>
+ Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.
+ <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>
+ Du wurdest aus dem Chat 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>
+END
+if ($logtin > 0) {
+ print "<div>Folgende Personen sind eingeloggt:<br><font size='1'>";
+ foreach(@users) {
+ print "$_ " if (-f "data/online/users/$_");
+ }
+ print "</font></div>";
+}
+print<<END;
+ </td>
+ </tr>
+ </table>
+ </center>
+</body>
+</html>
+END
+ if (-d "data/online/rooms") {
+ } else {
+ mkdir "data/online/rooms", 0777;
+ }
+}
+
+
+sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers.
+my $reload = $_[0];
+&start_html("Registration");
+print <<END;
+ <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
+} elsif ($reload eq "alias_length") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Dein gewählter Benutername "$alias" enthält zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!
+ </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;
+ foreach(@options) {
+ chomp $_;
+ }
+ if ($options[0] eq $pw) {
+ open(BAN,"<data/ban");
+ my @ban = <BAN>;
+ close BAN;
+ foreach(@ban) {
+ chomp;
+ if ($_ eq "$alias" || $_ eq "ip://".$ENV{'REMOTE_ADDR'}) {
+ $tmp = "banned";
+ &login_html;
+ exit 0;
+ }
+ }
+ if ($options[1] eq undef) { $col = "ffffff";}
+ else { $col = $options[1]; }
+ if ($options[2] eq undef) { $secol = "ffffef";}
+ else { $secol = $options[2];}
+ if ($options[3] eq undef) { $maxVerlauf = "10";}
+ else { $maxVerlauf = $options[3];}
+ if ($options[4] eq undef) { $verlaufOrder = "1";}
+ else {$verlaufOrder = $options[4];}
+ my @digit = (A..Z, a..z, 0..9);
+ my $num1 = rand(@digit);
+ my $num2 = rand(@digit);
+ my $num3 = rand(@digit);
+ my $num4 = rand(@digit);
+ my $num5 = rand(@digit);
+ my $num6 = rand(@digit);
+ my $num7 = rand(@digit);
+ my $num8 = rand(@digit);
+ my $num9 = rand(@digit);
+ my $num10 = rand(@digit);
+ $tmpid = ($digit[$num1].$digit[$num2].$digit[$num3].$digit[$num4].$digit[$num5].$digit[$num6].$digit[$num7].$digit[$num8].$digit[$num9].$digit[$num10]);
+
+ open(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 "") {
+goto CREATE if ($alias =~ /[-]/);
+ &create_alias_html("alias_prohibited");;
+ exit 0;
+ } elsif ($pw ne $tmp) {
+ &create_alias_html("pw_wrong");
+ exit 0;
+ } elsif (length($alias) >= 15) {
+ &create_alias_html("alias_length");
+ exit 0;
+ }
+CREATE:
+ opendir(USERDIR,"data/user/options");
+ my @user = readdir(USERDIR);
+ close USERDIR;
+ foreach $user (@user) {
+ if ($user eq $alias) {
+ &create_alias_html("alias_exists");
+ 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=ffffff>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>");
+ &login_html;
+}
+
+sub frameset_html {
+print <<END;
+<html>
+ <head>
+ <title>
+ $title - Powered by CXG - Chatters of the next generation
+ </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&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" scrolling="no">
+ </frameset>
+</frameset>
+</html>
+END
+}
\ No newline at end of file diff --git a/0.6.0/input.pl b/0.6.0/input.pl new file mode 100644 index 0000000..55007eb --- /dev/null +++ b/0.6.0/input.pl @@ -0,0 +1,201 @@ +#!/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");
+$maxVerlauf = $q->param("maxVerlauf");
+$verlaufOrder = $q->param("verlaufOrder");
+
+if ($maxVerlauf eq undef) { $maxVerlauf = "10";}
+if ($verlaufOrder eq undef) { $verlaufOrder = "1";}
+
+if ($tmp eq "login") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat den Chat betreten ...</font></i>");
+}
+
+print <<END;
+<html>
+<head>
+<script language="JavaScript"><!--
+
+// Einstellungsvariablen
+maxVerlauf = $maxVerlauf; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+verlaufOrder = $verlaufOrder; // 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.msg.focus(); // Fukus in das Eingabeform
+ document.inf.msg.select(); // Text im Eigabeform markieren
+ document.inf.submit(); // Formular absenden
+ 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" maxlength="300" 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
+
+&rm_away($alias,$room);
\ No newline at end of file diff --git a/0.6.0/main.pl b/0.6.0/main.pl new file mode 100644 index 0000000..37b11bb --- /dev/null +++ b/0.6.0/main.pl @@ -0,0 +1,901 @@ +#!/usr/bin/perl
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+print $q->header();
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+
+{
+ open(IDENT,"<data/online/ident/$alias");
+ my @ident = <IDENT>;
+ close IDENT;
+ if ($ident[1] ne $tmpid) {
+ &error("Falsche TempID ! Du bist nicht befugt zu handeln!");
+ }
+}
+
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$tmp = $q->param("tmp");
+$rmsg = \$q->param("msg");
+
+if ($tmp eq "away") {
+ require config;
+ &rm_away($alias,$room);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat sich zurück gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+}
+
+if ($q->param('var') eq "change_colors") {
+ &reload_html("change_colors")
+}
+
+unless (-e "data/online/rooms/$room/$alias") {
+ require config;
+ &post_prv($alias,"<font color=ffffff>Du befindest Dich nicht im Raum \"<font color=ffa500>$room</font>\" und kannst dort auch keine Nachrichten posten!</font>");
+ &reload_html;
+} elsif (length($$rmsg) > 300) {
+ require config;
+ &post_prv($alias,"<font color=ffffff>Deine Nachricht enthält zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>");
+ &reload_html;
+}
+
+$$rmsg =~ s#<#<\;#g;
+if (substr($$rmsg,0,1) ne "/") {
+ open MSGFILE,">>data/msgs/$room";
+ unless ($$rmsg =~ s#/me/#<i>$alias</i>#g || $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g) {
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b><;\n";
+ } else {
+ $$rmsg =~ s#/me/#<i>$alias</i>#g;
+ $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$secol>$$rmsg</font></font></b><;\n";
+ }
+ close MSGFILE;
+ opendir PID,"data/online/pids/$room";
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$room/$_") {
+ kill USR1 => $_;
+ }
+ }
+ require config;
+ &log("<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b>") if ($room eq "Cyberbar");
+ &reload_html;
+} else {
+ &cmd($$rmsg);
+}
+
+sub reload_html { # Wird neugeladen, wenn eine Nachricht getextet wird!
+ my ($action,$whisper) = @_;
+ 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" && $tmp eq "autologout") {
+ print "open('index.pl?tmp=autologout','_top');";
+ &rm_alias($alias,$room);
+ } elsif ($action eq "quit") {
+ print "open('index.pl?tmp=quit','_top');";
+ &rm_alias($alias,$room);
+ }
+ print "parent.input.document.inf.tmp.value = 'notaway';" if ($tmp eq "away");
+ print "</script></head><body bgcolor='$col'>";
+ print $q->end_html;
+ exit 0;
+}
+
+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);
+ }
+ }
+ 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) $alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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) 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) $alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ...</font></i>");
+ open(MSGFILE,">>data/msgs/$room");
+ flock(MSGFILE, 2);
+ print MSGFILE "$alias<;$tmpstamp<;!<;!<;<i><font color=ffffff>($hours:$min:$sec) Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i><;\n";
+ close MSGFILE;
+ }
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ unlink("data/online/rooms/$oldroom/$alias");
+ rm_rstat($alias,$oldroom);
+ check_online;
+}
+
+sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können.
+ require config;
+ $_[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 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. Bütow (2000 - 2001).</font>");
+ &reload_html;
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ my $js = "<script language='JavaScript'>parent.online.location.reload();</script>";
+ if ($tmp ne "autoaway") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias meldet sich ab (<font color=ffa500>$away_msg</font> ) ...</i></font>$js");
+ } else {
+ $away_msg = " $alias wurde vom System abgemeldet ...";
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)$away_msg</i></font>$js");
+ }
+ open AWAY,">>data/online/rstat/$room.away";
+ flock AWAY, 2;
+ print AWAY "$alias<;$away_msg\n";
+ close AWAY;
+ &reload_html("away");
+#############>- 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;
+#############>- 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("change_colors");
+#############>- AKTUELLES DATUM UND URZEIT AUSGEBEN -<
+ } elsif ($cmd eq "date") {
+ &zeit;
+ &post_prv("$alias","<font color=ffffff>Heute ist der $day.$month. Jahr $year. Es ist genau $hours:$min Uhr und $sec Sekunden.</font>");
+ &reload_html;
+#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
+ } elsif ($cmd eq "j") {
+ &change_room("j",$cmd[1],$room);
+ &reload_html("change_room");
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ my $me_msg;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ $me_msg =~ s#/me/#<i>$alias</i>#g;
+ $me_msg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if ($cmd eq "m") {
+ &post($room,"<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>");
+ } else {
+ &post($room,"<b><font color=$col><i>$alias</i> $me_msg</font></b>");
+ }
+ &reload_html;
+#############>- 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 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ open MEMO,">>data/user/memos/$alias2memo";
+ flock MEMO, 2;
+ print MEMO "<font 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;
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>");
+ &reload_html;
+#############>- 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 = $q->param('whisper');
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ }
+ $msg2post =~ s#/me/#<i>$alias</i>#g;
+ $msg2post =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if (-f "data/online/users/$alias2post") {
+ &post_prv($alias,"<b><font color=$col><i>Zu $alias2post geflüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &post_prv($alias2post,"<b><font color=$col><i>$alias flüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &reload_html($action,$alias2post);
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2post <font color=ffffff>ist nicht anwesend !</font></font>");
+ &reload_html;
+#############>- 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 / 3600));
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &zeit;
+ if ($tmp ne "autologout") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias loggt sich aus dem Chat aus ... </font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias wurde vom System automatisch ausgeloggt ... </font></i>");
+ }
+ &reload_html("quit");
+#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -<
+ } elsif ($cmd eq "rmgb") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias löscht das eigene Gästebuch ...</font></i>");
+ unlink("data/user/gbooks/$alias");
+ &reload_html;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my $msg2scream;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ $msg2scream =~ s#ä#Ä#g; $msg2scream =~ s#ö#Ö#g; $msg2scream =~ s#ü#Ü#g; $msg2scream = "\U$msg2scream";
+ &post($room,"<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>");
+ &reload_html;
+#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGElOGGT 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";
+ my $lastlogin = <LASTLOGIN>;
+ close LASTLOGIN;
+ my $timestamp = sprintf("%.2f",((time() - $lastlogin) / 3600));
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> hat sich seit der Einführung dieses Befehls noch nie eingeloggt!</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+#############>- 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 color=ffffff>Der aktuelle Raum: $room $theme $door ($nr) : <font color=ffa500>$personen</font></font>");
+ &reload_html;
+#############>- 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 color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: <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 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 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+ &reload_html;
+#############>- 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" && $user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<font color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>");
+ } else {
+ &change_room("ju",$raum,$room,$alias2search);
+ }
+ &reload_html("change_room");
+ }
+ }
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2search <font color=ffffff> ist nicht eingeloggt !</font></font>");
+ &reload_html;
+#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -<
+ } elsif ($cmd eq "l") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") {
+ open RSTAT, "data/online/rstat/$room";
+ my @r_stat = <RSTAT>;
+ close RSTAT;
+ my $lock = "0\n";
+ &zeit;
+ if ($room eq "Cyberbar") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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) $alias sperrt den Raum ab ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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";
+ flock RSTAT, 2;
+ print RSTAT $lock;
+ close RSTAT;
+ }
+ &reload_html;
+ }
+#############>- RAUMBESETZER ERNENNEN -<
+ } elsif ($cmd eq "su") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $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;
+ if (prove_besetzer($alias2su,$room) == 1 || &hierachie($alias2su) eq "wa" || &hierachie($alias2su) eq "ow") {
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>");
+ &reload_html;
+ }
+ open RSTAT,">>data/online/rstat/$room";
+ flock(RSTAT, 2);
+ print RSTAT $alias2su."\n";
+ close RSTAT;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verleiht \"$alias2su\" Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ &reload_html;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>");
+ &reload_html;
+ }
+#############>- RAUMBESETZER ENTNENNEN -<
+ } elsif ($cmd eq "rsu") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2rsu = $cmd[1];
+ open(DATEI,"<data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ if (prove_besetzer($alias2rsu,$room) == 1) {
+ &rm_rstat($alias2rsu,$room);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2rsu <font color=ffffff>ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !</font></font>");
+ }
+ &reload_html;
+ }
+#############>- RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "t") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") {
+ open RSTAT, "data/online/rstat/$room";
+ my @r_stat = <RSTAT>;
+ close RSTAT;
+ &zeit;
+ my $theme;
+ if ($cmd[1] ne undef) {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $theme = $theme." ".$cmd[$i];
+ }
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias gibt dem Raum das Thema (<font color=ffa500> $theme </font>) ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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]."\n";
+ }
+ open RSTAT,">data/online/rstat/$room";
+ print RSTAT $theme;
+ close RSTAT;
+ &reload_html;
+ }
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN -<
+ } elsif ($cmd eq "ban" || $cmd eq "banip") {
+ my $hierachiealias = &hierachie($alias);
+ if ($hierachiealias eq "wa" || $hierachiealias eq "ow") {
+ $hierachie = &hierachie($alias2ban);
+ my $alias2ban = $cmd[1];
+ open BAN,"<data/ban";
+ my @ban = <BAN>;
+ close BAN;
+ if ($cmd[1] eq undef) {
+ my $nr = @ban;
+ my $banned;
+ foreach(@ban) {
+ chomp($_);
+ $banned .= " $_";
+ }
+ &post_prv("$alias","<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$banned</font></font>");
+ &reload_html;
+ } elsif (-f "data/user/options/$alias2ban") {
+ if ($hierachie eq "wa") {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist Wächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ } elsif ($hierachie eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist Oberwächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ }
+ if ($cmd eq "ban") {
+ if (add_entry($alias2ban,"ban") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verbannt \"$alias2ban\" aus dem Chat ...</font></i>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>");
+ }
+ } elsif ($hierachiealias eq "ow") {
+ if (-f "data/online/ident/$alias2ban") {
+ open DATEI, "<data/online/ident/$alias2ban";
+ my $ipnr = <DATEI>;
+ close DATEI;
+ chomp($ipnr);
+ if (add_entry("ip://$ipnr","ban") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verbannt die IP-Nummer von \"$alias2ban\" aus dem Chat ...</font></i>");
+ } else {
+ &post_prv("$alias","<font color=ffffff>Die IP-Nummer <font color=ffa500>$ipnr</font> von $alias2ban ist bereits verbannt!</font></font>");
+ }
+ &reload_html;
+ } else {
+ &post_prv("$alias","<font color=ffffff>Die IP-Nummer von <font color=ffa500>$alias2ban </font>kann nicht verbannt werden, da Benutzer nicht eingeloggt ist!</font></font>");
+ &reload_html;
+ }
+ } else {
+ goto ENDCMD;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2ban $ipnr<font color=ffffff>kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>");
+ &reload_html;
+ }
+#############>- ALIAS ENTBANNEN -<
+ } elsif ($cmd eq "rban" || $cmd eq "rbanip") {
+ my $hierachie = &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 (&rm_entry($alias2rban,"ban") == 1) {
+ if ($cmd eq "rban") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias entbannt \"$alias2rban\" ...</font></i>");
+ } else {
+ &post_prv($alias,"<font color=ffffff>Die IP-Nummer <font color=ffa500>$alias2rban </font>wurde aus der Banliste ausgetragen!</font></font>");
+ }
+ &reload_html;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2rban <font color=ffffff>ist nicht verbannt!</font></font>");
+ &reload_html;
+ }
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+} elsif ($cmd eq "ip") {
+ my $hierachie = &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";
+ my $ipnr = <DATEI>;
+ close DATEI;
+ chomp($ipnr);
+ &post_prv("$alias","<font color=ffa500>$_<font color=ffffff> hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ &reload_html;
+ }
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ my $hierachie= &hierachie($alias);
+ if ($hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ if (-f "data/online/users/$alias2kick") {
+ 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) {
+ my $hierachie = &hierachie($alias2kick);
+ if ($hierachie eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>");
+ } elsif ($hierachie eq "wa") {
+ &post_prv("$alias","<font 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>");
+ $_ = undef if ($room eq $raum);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$raum);
+ rm_alias($alias2kick,$raum);
+ check_online;
+ }
+ &reload_html;
+ }
+ }
+ }
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>");
+ &reload_html;
+ }
+#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
+ } elsif ($cmd eq "kill") {
+ if (hierachie($alias) eq "ow") {
+ my $alias2kill = $cmd[1];
+ if (-f "data/user/options/$alias2kill") {
+ my $hierachie = &hierachie($alias2kill);
+ if ($hierachie eq "ow") {
+ &post_prv($alias,"<font 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 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) $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");
+ &rm_entry($alias2kill,"ban");
+ open(DEL, ">>data/kill");
+ print DEL "($day.$month.$year $hours:$min:$sec) $alias2kill wurde von $alias gekillt\n";
+ close DEL;
+ }
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2kill <font color=ffffff> existiert nicht in der DB und kann nicht \"gekillt\" werden !</font></font>");
+ }
+ &reload_html;
+ }
+#############>- EINEN ANDEREN RAUM AUF-/ABSPERREN -<
+ } elsif ($cmd eq "sl") {
+ my $hierachie = &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) $alias sperrt den Raum \"$sl_room\" von aussen ab ...</font></i>",$sl_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 color=ffffff>Der Raum <font color=ffa500>$sl_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- IN EINEN ANDEREN RAUM HINEINRUFEN -<
+ } elsif ($cmd eq "ss") {
+ my $hierachie = &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) $alias ruft in den Raum \"$ss_room\" hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>",$ss_room);
+ &reload_html;
+ } else {
+ &post_prv($alias,"<font color=ffffff>Der Raum <font color=ffa500>$ss_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- EINEN ANDEREN RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "st") {
+ my $hierachie = &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) $alias gibt dem Raum \"$st_room\" das Thema (<font color=ffa500> $theme </font>) ...</font></i>",$st_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME &postEN -<
+ } elsif ($cmd eq "sys") {
+ my $hierachie = &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;
+ }
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN -<
+ } elsif ($cmd eq "wa") {
+ if (hierachie($alias) eq "ow") {
+ if (-f "data/user/options/$cmd[1]") {
+ if (hierachie($cmd[1]) eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$cmd[1] <font color=ffffff>ist bereits als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>");
+ } elsif (!add_entry($cmd[1],"wa")) {
+ &post_prv("$alias","<font color=ffa500>$cmd[1] <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>")
+ } else {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias ernennt \"$cmd[1]\" zum Wächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ }
+ &reload_html;
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2wa <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- ALIAS DIE WÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "rwa") {
+ if (hierachie($alias) eq "ow") {
+ if (&rm_entry($cmd[1],"wa") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat \"$cmd[1]\" vom Wächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$cmd[1] <font color=ffffff>ist kein Wächter und können die Wächterrechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- ADMINISTRATORBEFEHLE -<
+#############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -<
+ } elsif ($cmd eq "ow" && $alias eq "Snooper") {
+ if (-f "data/user/options/$cmd[1]") {
+ if (add_entry($cmd[1],"ow") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias ernennt \"$cmd[1]\" zum Oberwächter ...</font></i>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$cmd[1] <font color=ffffff>ist bereits als Oberwächter eingetragen!</font></font>");
+ }
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2wa <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ }
+ &reload_html;
+#############>- ALIAS DIE OBERWÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "row" && $alias eq "Snooper") {
+ if (&rm_entry($cmd[1],"ow") ne undef) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat \"$cmd[1]\" vom Oberwächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$cmd[1] <font color=ffffff>ist kein Oberwächter und können die Rechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+#############>- 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";
+ my @pw = <PW>;
+ close PW;
+ chomp($pw[0]);
+ &post_prv($alias,"<font color=ffa500>$pw2show <font color=ffffff> hat das Passwort \"$pw[0]\" !</font></font>");
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$pw2show <font color=ffffff> existiert nicht in der Benutzerdatenbank !</font></font>");
+ &reload_html;
+#############>- 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) $msg2post</font></i>");
+ &reload_html;
+#############>- ENDE DER CHATBEFEHLE -<
+ }
+ENDCMD:
+ &post_prv($alias,"<font color=ffffff>Der Chatbefehl <font color=ffa500>/$cmd</font> existiert nicht oder Du hast keine Berechtigung diesen Befehl auszuführen!</font></font>");
+ &reload_html;
+}
+
+sub rm_entry {
+ my ($alias,$file) = @_;
+ open ENTRY, "<data/$file";
+ my @entry = <ENTRY>;
+ close ENTRY;
+ my @new;
+ foreach(@entry) {
+ push @new,$_ if ($alias."\n" ne $_);
+ }
+ if (@entry != @new) {
+ open ENTRY, ">data/$file";
+ flock ENTRY, 2;
+ print ENTRY @new;
+ close ENTRY;
+ return 1;
+ } else {
+ return;
+ }
+}
+
+sub add_entry {
+ my ($alias,$file) = @_;
+ open ENTRY, "<data/$file";
+ my @entry = <ENTRY>;
+ close ENTRY;
+ foreach(@entry) {
+ chomp;
+ if ($alias eq $_) {
+ return;
+ }
+ }
+ open ENTRY, ">>data/$file";
+ flock ENTRY, 2;
+ print ENTRY $alias."\n";
+ close ENTRY;
+ return 1;
+}
\ No newline at end of file diff --git a/0.6.0/main2.pl b/0.6.0/main2.pl new file mode 100644 index 0000000..96408ba --- /dev/null +++ b/0.6.0/main2.pl @@ -0,0 +1,618 @@ +#!/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 color=ffffff><a href=\"main2.pl?alias=$tmp&var=alias_html&tmp=$alias&tmpid=$tmpid\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$tmp&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;
+ my $nr = 1;
+ if ($alias ne $tmp) {
+ foreach(@datei) {
+ print "<br>Eintrag # $nr: $_";
+ $nr++;
+ }
+ } 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>
+ <br>
+ Eintrag # $nr:
+ $datei[$i]
+ </div>
+ </td>
+ </tr>
+END
+$nr++;
+}
+print <<END;
+ </table>
+ <table>
+ <tr>
+ <td>
+ <font color=ffffff>
+ <input type="submit" value="Markierten Eintrag löschen">
+ </font>
+ </td>
+ <td>
+ <font color=ffffff>
+ <input type="reset" value="Markierung 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;
+ foreach(@data) {
+ chomp $_;
+ }
+ if ($method eq "edit_options_html") {
+ if ($message eq "edit_options_ok") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Chateinstellungen geändert ...</font></i>");
+print <<END;
+<script language="JavaScript">
+ open("main.pl?var=change_colors&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","reload");
+</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>
+ <hr>
+ <div>Einstellungen für den Nachrichten-Verlauf</div>
+ <table>
+ <tr>
+ <td>
+ <br>
+ <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div>
+ <font color=ffffff>
+ <select name="maxVerlauf" size="1">
+ <option value="$data[3]">$data[3]
+END
+for($i=1;$i<=50;$i++) {
+ print "<option value=\"$i\">$i";
+}
+print<<END;
+ </select>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <br>
+<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div>
+ <font color=ffffff>
+ <select name="verlaufOrder" size="1">
+ <option value="$data[4]">Bisherige Einstellung ($data[4])
+ <option value="0">Neue Verlaufnachrichten oben (0)
+ <option value="1">Neue Verlaufnachrichten unten (1)
+ </select>
+ </font>
+ </td>
+ </tr>
+ </table>
+<br>
+ <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div>
+ <hr>
+ <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 markieren 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") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat das Profil geändert ...</font></i>");
+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") {
+ my $url = $q->param('homepage');
+ $url =~ s#^[http://]*##g;
+ 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"."http://$url\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;
+ }
+ open(OPTIONS,">data/user/options/$alias");
+ print OPTIONS $id."\n".$col."\n".$secol."\n".$q->param("maxVerlauf")."\n".$q->param("verlaufOrder");
+ close OPTIONS;
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
\ No newline at end of file diff --git a/0.6.0/online.pl b/0.6.0/online.pl new file mode 100644 index 0000000..0380293 --- /dev/null +++ b/0.6.0/online.pl @@ -0,0 +1,138 @@ +#!/usr/bin/perl
+
+# 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");
+
+open(DATEI,"<data/online/rstat/$room.away");
+ my @datei = <DATEI>;
+close DATEI;
+foreach(@datei) {
+ push @away,split(/<; /);
+}
+
+#my %away = &prove_away($alias,$room,"return_list");
+
+#print "<font color=red>das ist ein test: ";
+#for ($i=0;$i<=$#away;$i+=2) {
+# print "$away[$i]<br>";
+# }
+#print "</font>";
+
+for ($i=0;$i<=$#away;$i+=2) {
+ goto DONOTCOUNT if ($away[$i] eq $alias);
+}
+
+open(DATEI,"<data/online/users/$alias");
+ my $oldstamp = <DATEI>;
+close DATEI;
+if ($oldstamp > (time - 40)) {
+ 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;
+}
+DONOTCOUNT:
+
+unless (-d "data/online/rooms/$room") {
+ mkdir "data/online/rooms/$room", 0777;
+}
+unless (-f "data/online/rstat/$room") {
+ open(DATEI,">data/online/rstat/$room"); # Raumbesetzerstatus setzen
+ print DATEI "0\n\n$alias\n";
+ close DATEI;
+}
+
+open(DATEI,">data/online/users/$alias");
+ print DATEI time;
+close DATEI;
+open(DATEI,">data/online/rooms/$room/$alias");
+ print DATEI time;
+close DATEI;
+
+open(DATEI,"<data/online/prove");
+ my $provetime = <DATEI>;
+close DATEI;
+&check_online if ($provetime < (time - 30));
+
+print<<HEADER;
+<html>
+ <head>
+ <meta http-equiv="refresh" content="20" URL="online.pl?room=$room&alias=$alias&tmpid=$tmpid">
+ <style type="text/css">
+ a { font-family: arial; font-size:11px; color: #ffffef; }
+ a:hover { color: #ffffff; }
+ </style>
+ <style type="text/css" media="all">
+ a { text-decoration: none; }
+ a:hover { text-decoration:underline; }
+ </style>
+ </head>
+ <body bgcolor="#000000">
+HEADER
+
+opendir(ROOM,"data/online/rooms/".$room);
+ my @room = sort(readdir(ROOM));
+closedir(ROOM);
+
+my $chatter = $#room-1;
+my @besetzer = &prove_besetzer(undef,$room,"return_list");
+
+open WA, "<data/wa";
+ my @wa = <WA>;
+close WA;
+open OW, "<data/ow";
+ my @ow = <OW>;
+close OW;
+
+print "<font size='1' color='ffffff' face='arial'>$room ($chatter):</font><table>";
+
+foreach $online (@room) {
+ if (-f "data/online/rooms/$room/$online") {
+ for ($i=0;$i<=$#away;$i+=2) {
+ chomp $away[$i+1];
+ if ($away[$i] eq $online) {
+ my $away = $away[$i+1];
+ print "<tr><td><img title='$away' alt='$away' src='$gfxpath/away.gif'></td>";
+ goto WEITER;
+ }
+ }
+ foreach(@besetzer) {
+ chomp;
+ if ($_ eq $online) {
+ print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>";
+ goto WEITER;
+ }
+ }
+ foreach(@wa) {
+ chomp;
+ if ($_ eq $online) {
+ print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>";
+ goto WEITER;
+ }
+ }
+ foreach(@ow) {
+ chomp;
+ if ($_ eq $online) {
+ print "<tr><td><img title='Oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>";
+ goto WEITER;
+ }
+ }
+ print "<tr><td></td>";
+WEITER:
+ print "<td><a href='main2.pl?var=alias_html&alias=$alias&tmp=$online&tmpid=$tmpid' target='$online'>$online</a></td></tr>";
+ }
+}
+
+print "</table>", $q->end_html;
diff --git a/0.6.0/ow.gif b/0.6.0/ow.gif Binary files differnew file mode 100644 index 0000000..c2a5c2a --- /dev/null +++ b/0.6.0/ow.gif diff --git a/0.6.0/push.pl b/0.6.0/push.pl new file mode 100644 index 0000000..ebff406 --- /dev/null +++ b/0.6.0/push.pl @@ -0,0 +1,120 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+#CGI->compile(':all');
+$q = new CGI;
+print $q->header;
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+
+{
+ open(IDENT,"<data/online/ident/$alias");
+ my @ident = <IDENT>;
+ close IDENT;
+ if ($ident[1] ne $tmpid) {
+ print $q->div( "Error: (Falsche TmpID in push.pl!)" ),
+ $q->end_html;
+ open(ERROR,">>data/error");
+ print ERROR "$alias $tmpid $$ ".time." (Falsche TmpID in push.pl!) \n";
+ close ERROR;
+ exit 0;
+ }
+}
+
+$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;
+moves_interval = 4;
+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>loading chat-engine @ PID: $pid...</font><br>
+END
+sleep 1;
+print "<font size=1 color=ffffff face=arial>loading in progress ...</font><br>";
+sleep 1;
+print "<font size=1 color=ffffff face=arial><b>$alias</b>, welcome to <b>yChat</b>! :-)</font><br>";
+
+
+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,@flood;
+OPENMSGFILE:
+$change_room = 0;
+$startime = time;
+
+if (-e "data/msgs/$room") {
+ open(MSGFILE,"<data/msgs/$room");
+ unless (-d "data/online/pids") {
+ mkdir "data/online/pids", 0777;
+ } unless (-d "data/online/pids/$room") {
+ mkdir "data/online/pids/$room", 0777;
+ }
+ open(PID,">data/online/pids/$room/$pid");
+ print PID time;
+ close PID;
+} else {
+ sleep 1;
+ goto OPENMSGFILE;
+}
+
+&sendmsgs;
+while (-f "data/online/users/$alias") {
+ local $SIG{USR1} = \&sendmsgs;
+ goto OPENMSGFILE if ($change_room == 1);
+ sleep 15;
+ print "\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") {
+ unlink("data/online/pids/$room/$pid");
+ $room = $action;
+ close MSGFILE;
+ $change_room = 1;
+ }
+ print "$message<br>\n" if ($change_room != 1);
+ push(@flood,$message);
+ if ($flood[0] eq $flood[1] && $flood[0] eq $flood[2] && $flood[0] eq $flood[3]) {
+ print "<i><font color=red> Jemand floodet den Chat !</font></i><br>\n";
+ }
+ shift(@flood) if ($#flood > 2);
+ }
+ }
+ }
+ seek(MSGFILE, $curpos, 0);
+}
+
+unlink("data/online/pids/$room/$pid");
\ No newline at end of file diff --git a/0.6.0/rb.gif b/0.6.0/rb.gif Binary files differnew file mode 100644 index 0000000..1187798 --- /dev/null +++ b/0.6.0/rb.gif diff --git a/0.6.0/setup.sh b/0.6.0/setup.sh new file mode 100644 index 0000000..6b3ef8a --- /dev/null +++ b/0.6.0/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.6.0/stat.pl b/0.6.0/stat.pl new file mode 100644 index 0000000..801f8b6 --- /dev/null +++ b/0.6.0/stat.pl @@ -0,0 +1,208 @@ +#!/usr/bin/perl -w
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+
+my $var = $q->param('var');
+my $alias = $q->param('alias');
+my $tmpid = $q->param('tmpid');
+
+print $q->header();
+&start_html("Statistiken");
+print $q->div("yChat Statistiken"), $q->hr,
+ $q->div( $q->a( { -href=>"stat.pl?var=ranking&alias=$alias&tmpid=$tmpid" }, "Rankings"), " | ",
+ $q->a( { -href=>"stat.pl?var=del&alias=$alias&tmpid=$tmpid" }, "Loginstatistiken"), " | ",
+ $q->a( { -href=>"stat.pl?var=stat&alias=$alias&tmpid=$tmpid" }, "DB-Statistik"), " | ",
+ $q->a( { -href=>"stat.pl?var=code&alias=$alias&tmpid=$tmpid" }, "Programmcode"), " | ",
+ $q->a( { -href=>"stat.pl?var=var&alias=$alias&tmpid=$tmpid" }, "Umgebungsvariablen"),), $q->hr;
+
+if ($var eq "ranking") {
+
+ opendir(COUNTS, "data/user/counts");
+ my @counts = readdir(COUNTS);
+ closedir(COUNTS);
+
+ print "<div>";
+
+ my $nr_start = $q->param('start');
+ my $nr_end = $q->param('end');
+ my %online;
+ my $rank;
+ my $nr;
+
+ foreach(@counts) {
+ if(-f "data/user/counts/$_" ) {
+ if (s#.online##g) {
+ open(TOTAL, "<data/user/counts/$_.online");
+ my $total = <TOTAL>;
+ close TOTAL;
+ $online{sprintf("%.2f",($total / 3600))} = $_;
+ }
+ }
+ }
+
+ print "<div>", $q->b("Rankings:"), $q->br,
+ "<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>";
+
+ if (!$nr_start) {
+ $nr_start = 1;
+ } if (!$nr_end) {
+ $nr_end = 20;
+ }
+
+ foreach $wert (reverse(sort { $a <=> $b } keys %online)) {
+ $nr++;
+ if ($online{$wert} eq $alias) {
+ $rank = $nr;
+ last if ($nr > $nr_end);
+ }
+ next if ($nr < $nr_start || $nr > $nr_end);
+ print "<tr><td><font color='ffffff' size='1' face='arial'>".$nr."</font></td><td><font color='ffffff' size='1' face='arial'> ".$wert."h </font></td><td> <a href='main2.pl?var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n";
+ }
+ print "</table>", $q->hr;
+ $nr_start -= 20; $nr_end -= 20;
+ print "Rankings von <a href='stat.pl?var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" if ($nr_start > 0);
+ $nr_start += 40; $nr_end += 40;
+ print "Rankings von <a href='stat.pl?var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...",
+ $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>");
+
+} elsif ($var eq "del") {
+
+ print "<div>", $q->b("Alte Benutzer löschen:"), $q->br,
+ "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gelöscht.", $q->br, $q->br;
+
+ opendir(USER, "data/user/options");
+ my @user = readdir(USER);
+ closedir(USER);
+ @user = sort(@user);
+
+ my $i = 0;
+ my $j;
+ my $k = 0;
+ my $l = 0;
+ my $full = $q->param('tmp');
+
+ foreach(@user) {
+ if (-f "data/user/lastlogin/$_") {
+ open(LOGIN,"<data/user/lastlogin/$_");
+ my $login = <LOGIN>;
+ close LOGIN;
+ $login = sprintf("%.2f",((time - $login) / 3600));
+ $j++;
+ if (999 < $login && $login < 1440) { # 1440 = 60 Tage
+ $k++;
+ print $q->font( { -color=>"ffa500" }, $q->b( "$j($k) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef);
+ } elsif ($login < 48) {
+ $l++;
+ print $q->font( { -color=>"ffffef" }, $q->b( "$j($l) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef);
+ } elsif ($login < 1440) {
+ print "$j $_ Letztes Login vor: ".$login."h", $q->br, "\n" if ($full ne undef);
+ } else {
+ $k++;
+ &kill($_,$i++,$login);
+ }
+ } elsif (-f "data/user/options/$_") {
+ &kill($_,$i++);
+ }
+ }
+ print $q->hr if ($full ne undef);
+ print "</div>", $q->div( $q->b(
+ "$j Benutzer befinden sich in der Datenbank!", $q->br,
+ $q->font( { -color=>"ffffef" }, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br,
+ $q->font( { -color=>"ffa500" }, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br,
+ $q->font( { -color=>"ff0000" }, "$i Benutzer wurden gerade eben gelöscht!") ), $q->br, $q->br,
+ "PS: Jeder registrierte Benutzername wird nur einmal gezählt!" );
+ print $q->br, $q->div( "(", $q->a( { -href=>"stat.pl?var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, "Vollständige Ansicht"), ")" ) if ($full eq undef);
+
+} elsif ($var eq "var") {
+
+ print "<div>", $q->b("Server Umgebungsvariablen:"), $q->br, $q->br,
+ "Die Serverumgebungsvariablen können nur von Oberwächtern eingesehen werden!", $q->br, $q->br;
+
+ if (&hierachie($alias) eq "ow") {
+ while(($key,$value) = each(%ENV)) {
+ print "$key = $value\n", $q->br;
+ }
+ }
+
+ print "</div>";
+
+} elsif ($var eq "stat") {
+
+ print $q->div( $q->b("yChat-DB Statistik:") ), $q->br;
+ $files = 0;
+ $size = 0;
+ $directorys = 1;
+ &zaehle("data");
+ $size = sprintf("%.2f", ($size/1048576));
+ print $q->div( "Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys");
+
+ } elsif ($var eq "code") {
+
+ print $q->div( $q->b("yChat Programmcode-Statistik:") ), $q->br;
+
+ my ($zeilen,$size,$bytes,$files);
+
+ opendir(DIR,".");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ $dir = sort(@dir);
+
+ foreach(@dir) {
+ if (/.+[pl]$/ || /.+[pm]$/) {
+ $bytes = (-s);
+ $size += $bytes;
+ open(PL, "<$_");
+ my @pl = <PL>;
+ close PL;
+ local $nr = $#pl+1;
+ $zeilen += $nr;
+ $files++;
+ print $q->div("Datei $files: $nr Zeilen, $bytes Bytes"), $q->br, "\n";
+ }
+ }
+print $q->div( $q->b("Programmcode: $files Dateien, $zeilen Zeilen", $q->br, "Größe: $size Bytes") );
+
+}
+
+print $q->end_html;
+
+sub zaehle {
+ local ($dir,$data) = @_;
+ $dir = "$dir/$data" if ($data ne undef);
+ opendir(DATA,$dir);
+ local @data = readdir(DATA);
+ closedir(DATA);
+ $files2 = 0;
+ foreach(@data) {
+ if (-f "$dir/$_") {
+ $files++;
+ $files2++;
+ $size += (-s "$dir/$_");
+ } elsif (-d "$dir/$_" && $_ ne "." && $_ ne "..") {
+ $directorys++;
+ &zaehle($dir,$_);
+ }
+ }
+}
+
+sub kill {
+ my ($rm,$nr,$login) = @_;
+ $login = "XXXXXX" if ($login eq undef);
+ print $q->font( { -color=>"ff0000" }, $q->b( "$j($nr) $rm Letztes Login vor: ".$login."h (wurde gelöscht)") ), $q->br, "\n";
+ print "<font size='1'>";
+ print "options " if unlink("data/user/options/$rm");
+ print "profiles " if unlink("data/user/profiles/$rm");
+ print "gbooks " if unlink("data/user/gbooks/$rm");
+ print "counts " if unlink("data/user/counts/$rm");
+ print "counts.online " if unlink("data/user/counts/".$rm.".online");
+ print "lastlogin " if unlink("data/user/lastlogin/$rm");
+ print "memos" if unlink("data/user/memos/$rm");
+ print "</font>", $q->hr, "\n";
+ &zeit;
+ open(DEL, ">>data/kill");
+ print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n";
+ close DEL;
+}
\ No newline at end of file diff --git a/0.6.0/wa.gif b/0.6.0/wa.gif Binary files differnew file mode 100644 index 0000000..2b1ba45 --- /dev/null +++ b/0.6.0/wa.gif diff --git a/0.6.0/y.gif b/0.6.0/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.6.0/y.gif diff --git a/0.6.0/yIntro.swf b/0.6.0/yIntro.swf Binary files differnew file mode 100644 index 0000000..d592826 --- /dev/null +++ b/0.6.0/yIntro.swf diff --git a/0.6.0/ySymbol.swf b/0.6.0/ySymbol.swf Binary files differnew file mode 100644 index 0000000..2b899bb --- /dev/null +++ b/0.6.0/ySymbol.swf diff --git a/0.6.0/y_.gif b/0.6.0/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.6.0/y_.gif diff --git a/0.6.1/CREDITS.txt b/0.6.1/CREDITS.txt new file mode 100644 index 0000000..84ec216 --- /dev/null +++ b/0.6.1/CREDITS.txt @@ -0,0 +1,33 @@ +########################### 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.
+ ... die Optimierung der Statusgrafiken in der Onlineliste.
+ ( 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.
+ ... die Erstellung der "Chatiquette".
+ ... einige Bugfixes in JavaScript-Codes.
+ ( maligree.yi.org )
+
+ - Dommi für die Erstellung der Away-Grafik. Diese wurde jedoch nachträglich
+ von mir verfärbt :-)
+
+ - Larry Wall, für die Erfindung von Perl !
\ No newline at end of file diff --git a/0.6.1/README.txt b/0.6.1/README.txt new file mode 100644 index 0000000..b67f15e --- /dev/null +++ b/0.6.1/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.6.1/SETUP.txt b/0.6.1/SETUP.txt new file mode 100644 index 0000000..c3c8f08 --- /dev/null +++ b/0.6.1/SETUP.txt @@ -0,0 +1,146 @@ +############################## 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
+stat.pl => Erstellt diverse Statistiken
+README.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+CREDITS.txt => Personen, die geolfen haben yChat zu proggen
+SETUP.txt => Dieses Dokument
+chatiq.sno => Datei beinhaltet die Chatiquette
+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/*
+
+- Verzeichnis für die Raumstatusdateien. Hier wird abgespeichert:
+ Raumbesetzer, Away (inkl. Away-Nachricht)und das Raumthema.
+ ./cgi-bin/yChat/data/online/rstat/*
+
+ - 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/*
+
+- 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 eingeloggten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+ - Hier befinden sichTempIDs der eingeloggten Chatter
+ ./cgi-bin/yChat/data/online/tmpid/*
+
+Alle Grafik- und Multimediadateien (*.gif, *.jpg, *.swf) 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.
+
+Jetzt einfach die Datei index.pl vom Browser ausführen lassen :-)
+
+
+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.6.1/TODO.txt b/0.6.1/TODO.txt new file mode 100644 index 0000000..4538bea --- /dev/null +++ b/0.6.1/TODO.txt @@ -0,0 +1,32 @@ +############################## yChat.de TODO ################################
+## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ##
+#############################################################################
+
+Folgende Funktionen werden demnächst evtl. in yChat integriert:
+
+ - OOP bei den HTML-Eingabeformularen und dem Menü.
+
+ - Kein CGI.pm im main.pl und config.pm.
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - 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 :-)
\ No newline at end of file diff --git a/0.6.1/UPDATES.txt b/0.6.1/UPDATES.txt new file mode 100644 index 0000000..ded826d --- /dev/null +++ b/0.6.1/UPDATES.txt @@ -0,0 +1,268 @@ +########################### 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.6.0 auf 0.6.1 (28.02.01)
+ - Alternativ zu "/msg Alias Nachricht" und "/ Nachricht" kann man
+ nun mit "/Alias Nachricht" auch nachrichten flüstern. Dies geht
+ allerdings nur dann, wenn Alias nicht gleich einem Chatbefehl ist!
+ - Wächter können keine verschlossenen Räume mehr betreten.
+ - Registriert sich ein neuer Chatter und hat noch keine feste Farbe
+ deffiniert, dann werden diese zufällig Generiert.
+ - Wird bei dem Befehl "/col" keine Farbe mit angegeben, dann werden
+ zufällige Chatfarben generiert!
+ - In der "config.pm" wurde die zusätliche Variable $admin
+ hinzugefügt. Sie beinhaltet den Alias vom Chatadministrator.
+ - Neue Administratorbefehle.
+ - Das Verzeichnis "data/online/tmpid" wurde angelegt. Hier befinden
+ sich alle aktuellen Temp-IDs. Die IDs werden nun schneller und
+ sicherer auf Richtigkeit überprüft.
+ - Temp-IDs können nun auch die Zeichen "." und "-" beinhalten.
+ - Raumnamen dürfen keine Spezialcharackter mehr beinhalten!
+
+
+Update von 0.4.9 auf 0.6.0 (22.02.01)
+ - Auf der Startseite wird angezeigt, wer alles eingeloggt ist.
+ - Das Skript 'online.pl' wurde komplett überarbeitet.
+ - Viele Programmteile des gesamten Systems wurden überarbeitet und
+ optimiert.
+ - Der Chat hat den neuen Menüpunkt "Chatiquette" bekommen, dort
+ stehen die wichtigsten Verhaltensregeln für Chatter.
+ - Oberwächter können in der "Statistik" die Serverumgebungsvariablen
+ einsehen.
+ - Erweiterung der Errorlogfunktion.
+ - Neue Befehle: mit "/banip Alias" wird ie IP-Nummer von Alias aus
+ dem Chat verbannt. Mit "/rbanip ip://x.x.x.x" wird diese IP-Nummer
+ entbannt. Mir "/rban ip://x.x.x.x" läßt sich eine verbannte
+ IP-Nummer zwar auch entbannen, diese wird jedoch allen Chattern
+ offen präsentiert. Die verbannten IP-Nummern sind mit dem bisher
+ bekannten Befehl "/ban" einzusehen. Die Liste der verbannten
+ IP-Nummern befindet sich in der Datei "data/ban".
+ - Die Liste der Chatbefehle wurde übersichtlicher gemacht.
+ - Noch zufälligere TempIDs.
+ - Bei "/kill Alias" wird Alias auch aus der Datei "data/ban"
+ entfernt.
+
+Update von 0.4.8 auf 0.4.9 (11.02.01)
+ - "/online Alias" zeigt die Onlinezeit in Stunden, nicht mehr in
+ Minuten an.
+ - Hinzufügung des Statistikskripts "stat.pl" unter dem Menüpunkt
+ "Statistik". Das Top 40 - PHP Skript wurde nicht mehr benötigt und
+ gelöscht.
+ - Neue Befehle: /me/ und /m/ (Müssen inmitten des Textes eingegeben
+ werden.)
+ - Wird ein Benutzer aus dem Chat gekillt, so wird dies in der Datei
+ "data/kill" protokolloert.
+ - In der main.pl wird die Datei "config.pm" per "require" nur noch
+ in das Dokument eingefügt, wenn es notwendig ist.
+ - In der Onlineliste neben dem Raumnamen steht nun, wieviele Benutzer
+ sich im aktuellen Raum befinden. Ausserdem wird in der Onlineliste
+ angezeigt, ob ein Benutzer abgemeldet ist oder nicht und welche
+ Rechte er hat. Die Onlineliste ist nun Alphabetisch sortiert.
+ - Wird das Profil geändert und das http:// bei der Homepage-Adresse
+ vergessen, so wird dies automatisch hinzugefügt.
+ - Viele Bugfixes.
+
+Update von 0.4.7 auf 0.4.8 (26.01.01)
+ - Top 20 Ranking Liste in PHP4.
+ - Überarbeitung des Flash-Intros.
+ - PIDs für die Signalhandler werden zuverlässiger abgespeichert und
+ ggf. wieder gelöscht.
+ - Das push.pl-Skript (endlosschleife) benötigt nun nurnoch halb so
+ viel Speicher beim Ausführen. Die Datei config.pm wird nicht mehr
+ mit "require config;" eingebunden.
+ - Benutzernamen dürfen maximal nurnoch 15 Zeichen lang sein.
+ - Chatnachrichten dürfen maximal nurnoch 300 Zeichen lang sein.
+ - Wenn ein Benutzer eine Nachricht textet, überprüft das System, ob
+ derjenige sich auch wirklich im jew. Raum befindet.
+ - In den Chatoptionen kann man zusätzliche Einstellungen vornehmen:
+ 1.) Anzahl der Nachrichten im Nachrichten-Verlauf
+ 2.) Anordnung der Nachrichten im Nachrichten-Verlauf.
+ Neueinstellungen dieser Optionen werden erst nach einem
+ Neueinloggen aktiv.
+ - Die Error-Logdatei "data/error" wurde erweitert.
+
+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.6.1/away.gif b/0.6.1/away.gif Binary files differnew file mode 100644 index 0000000..10d460b --- /dev/null +++ b/0.6.1/away.gif diff --git a/0.6.1/chatiq.sno b/0.6.1/chatiq.sno new file mode 100644 index 0000000..3360499 --- /dev/null +++ b/0.6.1/chatiq.sno @@ -0,0 +1 @@ +<div><h2>Chatiquette</h2></div>
<hr><div>
Hier einige Grundlagen ...</div>
<style type="text/css">
li { color: #ffffff }
</style>
<ul><li><div>
Vergiss nie, dass am anderen Ende auch nur Menschen sitzen. Diese mögen es gar nicht, angepöbelt, beleidigt oder in sonstiger Weise angegriffen zu werden.
</div></li>
<li><div>
Störend ist auch immer, wenn ein privater Streit im Chat ausgetragen wird. Tragt eure privaten Sachen ausserhalb des Chats aus.<br>Selbst wenn es nur Spass ist - weiss der Rest im Chat das?
</div></li>
<li><div>
Dauergeschrei fällt auch immer wieder störend auf. Was in Grossbuchstaben geschrieben wird, wird als Schreien bezeichnet.
</div></li>
<li><div>
Unsere ganz besonderen Spezialisten wollen auch immer wieder rausfliegen. Um das zu erreichen, senden sie die ganze Zeit Unsinn.
</div></li>
<li><div>
Diskussionen sind dagegen kein Problem. Dafür ist ein Chat ja da. Sobald allerdings das Thema der Diskussion zu sehr entgleist, sollte die Diskussion in einen etwas weniger öffentlichen Raum verlegt werden.
</div></li>
</ul><div>
Daraus ergeben sich folgende Regeln:
</div><ul>
<li><div>
keinen beleidigenden Wortschatz verwenden
</div></li>
<li><div>
obzöner und verfassungsfeindlicher Wortschatz fällt auch weg
</div></li>
<li><div>
streitet euch woanders oder in einem privaten Raum
</div></li>
<li><div>
schreit nich so viel
</div></li>
<li><div>
schreibt keinen Unsinn, der so aussieht, als ob eure Katze über die Tastatur gelaufen ist
</div></li>
<li><div>
schreibt nicht zu schnell hintereinander, besonders nicht dasselbe
</div></li>
<li><div>
verlagert die Diskussion, wenn sich jemand gestört fühlt
</div></li>
<li><div>
Diese Liste ist nicht vollständig. Mit dem gesunden Menschenverstand sollte es eigentlich möglich sein, sich die nicht aufgeführten Punkte zu denken.
</div></li>
</ul><div>
So - nach den ganzen "lass-es-bessers" noch ein paar Überlebenstips:
</div><ul>
<li><div>
beachte die oben stehenden Punkte ;-)
</div></li>
<li><div>
es macht sich immer gut, beim Reinkommen mal zu grüssen
</div></li>
<li><div>
warte nicht, bis man/frau dich anspricht - werde selbst aktiv und gib deinen Senf dazu
</div></li>
<li><div>
es gibt meist kein allgemein anerkanntes Gesprächsthema - lies dich einfach rein
</div></li>
<li><div>
die frage "wer will chatten" ist eigentlich überflüssig in einem Chat (wir warten doch alle nur aufs Ufo ;-)
</div></li>
<li><div>
fang nich sofort mit den W-Fragen (woher, wie alt, weiblich oder männlich?) an - es stört einige Leute
</div></li></ul>
<div>
Problematisch für die Wächter und Oberwächter ist:
</div><ul>
<li><div>
"der nervt mich - schmeiss den mal raus" ist oft nicht nachvollziehbar, weil der WÄ oder OW die Vorgeschichte - die vielleicht ausserhalb des yChat stattgefunden hat - nicht kennt oder keinen Beweis dafür hat.
</div></li></ul>
<hr>
<div><h2>
Richtlinien für den gestressten WÄ und OW:
</h2></div>
<ul><li><div>
Du hast die Macht - aber mißbrauche sie nicht!
</div></li>
<li><div>
Leute, die ganz offensichtlich stören wollen und dabei den Chatbetrieb massiv behindern, sofort rausschmeissen! Kriterien dazu:
</div>
<ul><li><div>
Fluten des Chats
</div></li><li><div>
Wiederholung von Parolen
</div></li><li><div>
Exzessive Nutzung von zufälligen Buchstaben-/Zeichenfolgen
</div></li>
<li><div>
usw...
</div></li></ul>
</li>
<li><div>
Bei den anderen vorher noch eine Warnung aussprechen...
</div></li>
<li><div>
Nicht vergessen: auch für euch gelten die oben aufgeführten Regeln!
</div></li>
<li><div>
Vergabe von Raumbesetzer- und Wächterrechten:<br>
(dies gilt für RB-Vergabe in der Cyberbar, WÄ allgemein)
</div>
<ul>
<li><div>
Um RB oder WÄ betteln wird schon mal gar nicht beachtet.
</div></li>
<li><div>
Wer WÄ wird, soll sichs verdienen - z.B. durch häufiges Helfen bei Neulingen.
</div></li>
<li><div>
Ein WÄ sollte schon öfter im Chat sein.
</div></li>
<li><div>
Oberwächter zu werden ist sehr schwierig. Frag gar nicht erst danach ;-)
</div></li>
</ul>
</ul><div>
Wer meint, von einem Wächter oder Oberwächter ungerecht behandelt worden zu sein (z.B. weil dieser wegen persönlichen Streitigkeiten rausschmeisst), richte seine Klage an einen Oberwächter oder direkt an den obersten Boss: Snooper (<a href="mailto:admin@ychat.de">admin@ychat.de</a>).
</div>
\ No newline at end of file diff --git a/0.6.1/colors.sno b/0.6.1/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.6.1/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.6.1/config.pm b/0.6.1/config.pm new file mode 100644 index 0000000..6a7662c --- /dev/null +++ b/0.6.1/config.pm @@ -0,0 +1,329 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$admin = "Snooper";
+$datum = "28.02.01";
+$version = "0.6.1";
+$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, geneva, verdana, helvetiva; font-size: 12px; color: #ffffff }
+ div.b { font-weight: bold; color: #ffa500 }
+ a { color: #ffffef; }
+ a:hover { color: #ffffff; }
+ p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; }
+</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; background-color: #ffffff; 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");
+ while(<FILE2PRINT>) {
+ print "$_\n";
+ }
+ close FILE2PRINT;
+}
+
+sub start_html { # Der HEADER einer HTML-Datei
+ print "<html><head><title>$title - $_[0]</title>$_[2]$style</head>";
+ 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 = $room;
+ @rooms = ($room,$secroom) if ($room ne $secroom);
+ foreach $raum (@rooms) {
+ open(MSGFILE,">>data/msgs/$raum");
+ print MSGFILE "!<;".time."<;!<;!<;$msg2post<;\n";
+ close MSGFILE;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ }
+ &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;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+ goto ENDPRV;
+ }
+ }
+ }
+ENDPRV:
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my $msg2log = $_[0];
+ my $js;
+ &zeit;
+ ($msg2log,$js) = split(/<script/, $msg2log);
+ 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 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");
+ flock(ERROR, 2);
+ print ERROR "Alias: $alias TempID: $tmpid File. $0 PID: $$ Time: ".time." Message: $error_msg \n";
+ close ERROR;
+ exit 0;
+}
+
+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);
+ } else {
+ unlink("data/online/rooms/$raum/$benutzer");
+ }
+ &zeit;
+ &post($raum,"<i><font color=ffffff>($hours:$min:$sec) $benutzer hat den Chat verlassen ... </font></i>");
+ }
+ }
+ }
+ }
+ opendir(PIDS,"data/online/pids/$raum");
+ my @pids = readdir(PIDS);
+ closedir(PIDS);
+ if ($raumleer == 1) { # Falls Raum leer ist => entf.
+ rmdir("data/online/rooms/$raum");
+ unlink("data/online/rstat/$raum");
+ unlink("data/online/rstat/$raum.away");
+ unlink("data/msgs/$raum");
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ unlink("data/online/pids/$raum/$_");
+ }
+ }
+ rmdir("data/online/pids/$raum");
+ } else {
+ foreach(@pids) {
+ unless (kill 0 => $_) {
+ unlink("data/online/pids/$room/$_");
+ }
+ }
+ }
+ }
+}
+
+sub rm_alias { # Falls Benutzer offline gegangen ist
+ my($benutzer,$raum) = @_;
+ unlink("data/online/rooms/$raum/$benutzer");
+ unlink("data/online/users/$benutzer");
+ opendir TMPID, "data/online/tmpid";
+ my @tmpid = readdir(TMPID);
+ close(TMPID);
+ foreach(@tmpid) {
+ unlink("data/online/tmpid/$_") if (/^$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++) {
+ chomp($rstat[$i]);
+ push(@rstat2,$rstat[$i]."\n") if ($rstat[$i] ne $r_alias);
+ }
+ open (RSTAT,">data/online/rstat/$rstatroom");
+ flock(RSTAT, 2);
+ print RSTAT @rstat2;
+ close RSTAT;
+}
+
+sub rm_away { # Benutzer als Raumbesetzer austragen
+ my ($a_alias,$rstatroom) = @_;
+ open (AWAY,"<data/online/rstat/$rstatroom.away");
+ my @away = <AWAY>;
+ close AWAY;
+ my @away2;
+ foreach (@away) {
+ my @split = split(/<;/);
+ push(@away2, $_) if ($a_alias ne $split[0]);
+ }
+ open (AWAY,">data/online/rstat/$rstatroom.away");
+ print AWAY @away2;
+ close AWAY;
+}
+
+sub secure_checkid { # TmpID überprüfen
+ my ($alias2check) = $_[0];
+ unless (-f "data/online/tmpid/$alias.$tmpid") {
+ &error("Falsche TempID!");
+ }
+}
+
+sub hierachie { # Chatter nach SU überprüfen.
+ open WA, "<data/wa";
+ my @was = <WA>;
+ close WA;
+ foreach(@was) {
+ chomp;
+ if ($_ eq $_[0]) {
+ return "wa";
+ }
+ }
+ open OW, "<data/ow";
+ my @ows = <OW>;
+ close OW;
+ foreach(@ows) {
+ chomp;
+ if ($_ eq $_[0]) {
+ return "ow";
+ }
+ }
+}
+
+sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat
+ my ($alias,$room,$method) = @_;
+ open DATEI,"<data/online/rstat/$room";
+ my @rstat = <DATEI>;
+ close DATEI;
+ if ($method eq "return_list") {
+ my @value;
+ for($i=2;$i<=$#rstat;$i++) {
+ push @value,$rstat[$i];
+ }
+ return @value;
+ }
+ for($i=2;$i<=$#rstat;$i++) {
+ chomp($rstat[$i]);
+ if ($rstat[$i] eq $alias) {
+ return 1;
+ }
+ }
+}
+
+sub prove_away { # Prüfen, ob Benutzer abgemeldet ist
+ my ($a_alias,$room,$method) = @_;
+ open(DATEI,"<data/online/rstat/$room.away");
+ @away = <DATEI>;
+ close DATEI;
+ if ($method eq "return_list") {
+ my $away2;
+ foreach(@away) {
+ push @away2,split(/<; /);
+ }
+ return @away2;
+ }
+ my $alias, $away;
+ foreach(@away) {
+ if (/^$a_alias.*/) {
+ ($alias,$away) = split(/<; /);
+ chomp($away);
+ return $away;
+ }
+ }
+}
+
+sub random_color {
+ my @digit = ("F","C","A","B",5..9);
+ my $dig1 = rand(@digit);
+ my $dig2 = rand(@digit);
+ my $dig3 = rand(@digit);
+ my $dig4 = rand(@digit);
+ my $dig5 = rand(@digit);
+ my $dig6 = rand(@digit);
+ return $digit[$dig1].$digit[$dig2].$digit[$dig3].$digit[$dig4].$digit[$dig5].$digit[$dig6];
+}
+
+# sub debug { open DEBUG,">data/debug"; while(@_) { chomp; print DEBUG "$_\n"; } close DEBUG;}
\ No newline at end of file diff --git a/0.6.1/help.sno b/0.6.1/help.sno new file mode 100644 index 0000000..9fd4250 --- /dev/null +++ b/0.6.1/help.sno @@ -0,0 +1,60 @@ +<div>
+ Alle Chat-Befehle:
+</div>
+<hr>
+<table border=1>
+<tr><th><div>SU</div></th><th><div>Befehl</div></th><th><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. Wird gar keine Farbe angegeben, dann wird eine zufällige generiert!</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>Chat 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>/sl <font color=red>Raum</font></div></td><td><div>Einen anderen <font color=ffa500>Raum</font> absperren</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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=ffa500>Raum</font> ein <font color=ffa500>Thema</font > geben</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/banip <font color=red>Alias</font></div></td><td><div>Die IP-Nummer von <font color=red>Alias</font> verbannen</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/rbanip ip://<font color=red>x.x.x.x</font></div></td><td><div>Die IP-Nummer <font color=red>x.x.x.x</font> "entbannen"</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 ledeglich 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><br>
+ Nur Oberwächer können Logdateien der Cyberbar lesen!<br><br>
+ Oberwächter ernennt nur der Systemadministrator!
+</div>
+</body>
+</html>
\ No newline at end of file diff --git a/0.6.1/htdocs.pl b/0.6.1/htdocs.pl new file mode 100644 index 0000000..b740331 --- /dev/null +++ b/0.6.1/htdocs.pl @@ -0,0 +1,246 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print $q->header;
+
+$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);
+ if (&hierachie($alias) eq "ow") {
+ &printfile($tmp,"Logdatei","blank");
+ }
+} elsif ($var eq "superuser_html") {
+ $alias = $q->param("alias");
+ $tmpid = $q->param("tmpid");
+ &secure_checkid($alias);
+ &superuser_html;
+} elsif ($var eq "chatiquette_html") {
+ &printfile("chatiq.sno","Chatiquette");
+ print $q->end_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=ffffff>$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")'>Optionen</a>
+ <a href='javascript:fenster("main2.pl?var=list_alias_html&alias=$alias&tmpid=$tmpid","Benutzerliste")'>Benutzer</a>
+ <a href='javascript:fenster("htdocs.pl?var=help_html&tmpid=$tmpid","Befehle")'>Befehle</a>
+ <a href='javascript:fenster("main2.pl?var=gb_html&alias=$alias&tmpid=$tmpid","Board")'>Board</a><br>
+ <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("stat.pl?&alias=$alias&tmpid=$tmpid","Statistik")'>Statistik</a>
+ <a href='javascript:fenster("htdocs.pl?var=chatiquette_html","Chatiquette")'>Chatiquette</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
+ if (&hierachie($alias) 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 ";
+ if (hierachie($alias) eq "ow") {
+ print
+ $q->b( "Oberwächter" ),
+ " (OW) eingetragen.</div>",
+ $q->hr;
+ } elsif (hierachie($alias) eq "wa") {
+ print
+ $q->b( "Wächter" ),
+ " (WÄ) eingetragen.</div>",
+ $q->hr;
+ } else {
+ print
+ $q->b( "normaler Chatter" ),
+ " (NC) eingetragen.</div>",
+ $q->hr;
+ }
+
+ open WA, "<data/wa";
+ my @was = <WA>;
+ close WA;
+ open OW, "<data/ow";
+ my @ows = <OW>;
+ close OW;
+
+ 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.6.1/index.pl b/0.6.1/index.pl new file mode 100644 index 0000000..4713008 --- /dev/null +++ b/0.6.1/index.pl @@ -0,0 +1,474 @@ +#!/usr/bin/perl
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+print $q->header;
+
+$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") {
+ &login_html;
+} elsif ($var eq "chatiquette_html") {
+ &chatiquette_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");
+ flock(COUNT, 2);
+ print COUNT $counter;
+close COUNT;
+opendir(USERS,"data/online/users");
+ my @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 "autologout") {
+print <<END;
+ <div>
+ Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.
+ <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>
+ Du wurdest aus dem Chat 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>
+END
+if ($logtin > 0) {
+ print "<div>Folgende Personen sind eingeloggt:<br><font size='1'>";
+ foreach(@users) {
+ print "$_ " if (-f "data/online/users/$_");
+ }
+ print "</font></div>";
+}
+print<<END;
+ </td>
+ </tr>
+ </table>
+ </center>
+</body>
+</html>
+END
+ if (-d "data/online/rooms") {
+ } else {
+ mkdir "data/online/rooms", 0777;
+ }
+}
+
+
+sub chatiquette_html {
+&start_html("Registration");
+print <<END;
+ <center>
+ <table width=500>
+ <tr>
+ <td>
+END
+open CHATIQ, "chatiq.sno";
+ foreach(<CHATIQ>) {
+ last if (/^\n+$/);
+ print $_;
+ }
+WEITER:
+close CHATIQ;
+print<<END;
+ </td>
+ </tr>
+ </table>
+ </center>
+</body>
+</html>
+END
+}
+
+sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers.
+my $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
+} elsif ($reload eq "alias_length") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Dein gewählter Benutername "$alias" enthält zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!
+ </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;
+ foreach(@options) {
+ chomp $_;
+ }
+ if ($options[0] eq $pw) {
+ open(BAN,"<data/ban");
+ my @ban = <BAN>;
+ close BAN;
+ foreach(@ban) {
+ chomp;
+ if ($_ eq "$alias" || $_ eq "ip://".$ENV{'REMOTE_ADDR'}) {
+ $tmp = "banned";
+ &login_html;
+ exit 0;
+ }
+ }
+ if ($options[1] eq undef) { $col = &random_color;}
+ else { $col = $options[1]; }
+ if ($options[2] eq undef) { $secol = &random_color;}
+ else { $secol = $options[2];}
+ if ($options[3] eq undef) { $maxVerlauf = "10";}
+ else { $maxVerlauf = $options[3];}
+ if ($options[4] eq undef) { $verlaufOrder = "1";}
+ else {$verlaufOrder = $options[4];}
+ my @digit = (A..Z, a..z, 0..9, "-", ".");
+ my $num1 = rand(@digit);
+ my $num2 = rand(@digit);
+ my $num3 = rand(@digit);
+ my $num4 = rand(@digit);
+ my $num5 = rand(@digit);
+ my $num6 = rand(@digit);
+ my $num7 = rand(@digit);
+ my $num8 = rand(@digit);
+ my $num9 = rand(@digit);
+ my $num10 = rand(@digit);
+ $tmpid = $digit[$num1].$digit[$num2].$digit[$num3].$digit[$num4].$digit[$num5].$digit[$num6].$digit[$num7].$digit[$num8].$digit[$num9].$digit[$num10];
+ open TMPID, ">data/online/tmpid/$alias.$tmpid";
+ print TMPID $alias;
+ close TMPID;
+ open IDENT, ">data/online/ident/$alias" ;
+ print IDENT "$ENV{'REMOTE_ADDR'}\n$tmpid\n$ENV{'HTTP_USER_AGENT'}";
+ close IDENT;
+ open LASTLOGIN, ">data/user/lastlogin/$alias";
+ print LASTLOGIN time;
+ close LASTLOGIN;
+ &frameset_html;
+ exit 0;
+ } 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 "") {
+ goto CREATE if ($alias =~ /[-]/ && $alias !~ /\W/);
+ &create_alias_html("alias_prohibited");;
+ exit 0;
+ } elsif ($pw ne $tmp) {
+ &create_alias_html("pw_wrong");
+ exit 0;
+ } elsif (length($alias) >= 15) {
+ &create_alias_html("alias_length");
+ exit 0;
+ }
+CREATE:
+ opendir(USERDIR,"data/user/options");
+ my @user = readdir(USERDIR);
+ close USERDIR;
+ foreach $user (@user) {
+ if ($user eq $alias) {
+ &create_alias_html("alias_exists");
+ 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=ffffff>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>");
+ &login_html;
+}
+
+sub frameset_html {
+print <<END;
+<html>
+ <head>
+ <title>
+ $title - Powered by CXG - Chatters of the next generation
+ </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&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" scrolling="no">
+ </frameset>
+</frameset>
+</html>
+END
+}
\ No newline at end of file diff --git a/0.6.1/input.pl b/0.6.1/input.pl new file mode 100644 index 0000000..55007eb --- /dev/null +++ b/0.6.1/input.pl @@ -0,0 +1,201 @@ +#!/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");
+$maxVerlauf = $q->param("maxVerlauf");
+$verlaufOrder = $q->param("verlaufOrder");
+
+if ($maxVerlauf eq undef) { $maxVerlauf = "10";}
+if ($verlaufOrder eq undef) { $verlaufOrder = "1";}
+
+if ($tmp eq "login") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat den Chat betreten ...</font></i>");
+}
+
+print <<END;
+<html>
+<head>
+<script language="JavaScript"><!--
+
+// Einstellungsvariablen
+maxVerlauf = $maxVerlauf; // Anzahl der Einträge des Verlaufs
+maxPreview = 20; // Zeichenlänge der Verlaufsvorschau
+verlaufOrder = $verlaufOrder; // 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.msg.focus(); // Fukus in das Eingabeform
+ document.inf.msg.select(); // Text im Eigabeform markieren
+ document.inf.submit(); // Formular absenden
+ 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" maxlength="300" 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
+
+&rm_away($alias,$room);
\ No newline at end of file diff --git a/0.6.1/main.pl b/0.6.1/main.pl new file mode 100644 index 0000000..09bdb06 --- /dev/null +++ b/0.6.1/main.pl @@ -0,0 +1,951 @@ +#!/usr/bin/perl
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+print $q->header();
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+
+{
+ unless (-f "data/online/tmpid/$alias.$tmpid") {
+ require config;
+ &error("Falsche TempID !");
+ }
+}
+
+$room = $q->param("room");
+$tmp = $q->param("tmp");
+
+#if ($room ne "Wired") {
+ $col = $q->param("col");
+ $secol = $q->param("secol");
+ $rmsg = \$q->param("msg");
+#} else {
+# require config;
+# $msg = $q->param("msg");
+# $rmsg = \$msg;
+# $col = &random_color;
+# $secol = &random_color;
+#}
+
+unless (-e "data/online/rooms/$room/$alias") {
+ require config;
+ &post_prv($alias,"<font color=ffffff>Du befindest Dich nicht im Raum \"<font color=ffa500>$room</font>\" und kannst dort auch keine Nachrichten posten!</font>");
+ &reload_html;
+} elsif (length($$rmsg) > 300) {
+ require config;
+ &post_prv($alias,"<font color=ffffff>Deine Nachricht enthält zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>");
+ &reload_html;
+}
+
+if ($tmp eq "away") {
+ require config;
+ &rm_away($alias,$room);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat sich zurück gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+}
+
+if ($q->param('var') eq "change_colors") {
+ &reload_html("change_colors")
+}
+
+$$rmsg =~ s#<#<\;#g;
+
+if (substr($$rmsg,0,1) ne "/") {
+ open MSGFILE,">>data/msgs/$room";
+ unless ($$rmsg =~ s#/me/#<i>$alias</i>#g || $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g) {
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b><;\n";
+ } else {
+ $$rmsg =~ s#/me/#<i>$alias</i>#g;
+ $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$secol>$$rmsg</font></font></b><;\n";
+ }
+ close MSGFILE;
+ opendir PID,"data/online/pids/$room";
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$room/$_") {
+ kill USR1 => $_;
+ }
+ }
+ require config;
+ &log("<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b>") if ($room eq "Cyberbar");
+ &reload_html;
+} else {
+ require config;
+ &cmd($$rmsg);
+}
+
+sub reload_html { # Wird neugeladen, wenn eine Nachricht getextet wird!
+ my ($action,$whisper) = @_;
+ 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" && $tmp eq "autologout") {
+ print "open('index.pl?tmp=autologout','_top');";
+ &rm_alias($alias,$room);
+ } elsif ($action eq "quit") {
+ print "open('index.pl?tmp=quit','_top');";
+ &rm_alias($alias,$room);
+ }
+ print "parent.input.document.inf.tmp.value = 'notaway';" if ($tmp eq "away");
+ print "</script></head><body bgcolor='$col'>";
+ print $q->end_html;
+ exit 0;
+}
+
+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") {
+ unless (&hierachie($alias) eq "ow") {
+ &post_prv($alias,"<font size=2 color=ffffff>Der Raum \"<font color=ffa500>$newroom</font>\" ist leider abgesperrt!</font>");
+ &reload_html;
+ }
+ }
+ 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) $alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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) 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) $alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ...</font></i>");
+ open(MSGFILE,">>data/msgs/$room");
+ flock(MSGFILE, 2);
+ print MSGFILE "$alias<;$tmpstamp<;!<;!<;<i><font color=ffffff>($hours:$min:$sec) Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i><;\n";
+ close MSGFILE;
+ }
+ unlink("data/online/rooms/$oldroom/$alias");
+ &rm_rstat($alias,$oldroom);
+ &check_online;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+}
+
+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 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. Bütow (2000 - 2001).</font>");
+ &reload_html;
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ my $js = "<script language='JavaScript'>parent.online.location.reload();</script>";
+ if ($tmp ne "autoaway") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias meldet sich ab (<font color=ffa500>$away_msg</font> ) ...</i></font>$js");
+ } else {
+ $away_msg = " $alias wurde vom System abgemeldet ...";
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)$away_msg</i></font>$js");
+ }
+ open AWAY,">>data/online/rstat/$room.away";
+ flock AWAY, 2;
+ print AWAY "$alias<;$away_msg\n";
+ close AWAY;
+ &reload_html("away");
+#############>- 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;
+#############>- FARBEN WECHSELN -<
+ } elsif ($cmd eq "col") {
+ if ($cmd[1] ne undef) {
+ $col = $cmd[1];
+ my $tmpsecol = $cmd[2];
+ if ($tmpsecol eq "") {
+ $secol = $col
+ } else {
+ $secol = $tmpsecol;
+ }
+ } else {
+ $col = &random_color;
+ $secol = &random_color;
+ }
+ open OPTIONS,"<data/user/options/$alias";
+ my @options = <OPTIONS>;
+ close OPTIONS;
+ open OPTIONS,">data/user/options/$alias";
+ print OPTIONS $options[0]."".$col."\n".$secol;
+ close OPTIONS;
+ &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("change_colors");
+#############>- AKTUELLES DATUM UND URZEIT AUSGEBEN -<
+ } elsif ($cmd eq "date") {
+ &zeit;
+ &post_prv("$alias","<font color=ffffff>Heute ist der $day.$month. Jahr $year. Es ist genau $hours:$min Uhr und $sec Sekunden.</font>");
+ &reload_html;
+#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
+ } elsif ($cmd eq "j") {
+ if ($cmd[1] =~ /\W/ || $cmd[1] eq "") {
+ &post_prv($alias,"<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> enthält illegale Zeichen!</font>");
+ &reload_html;
+ } else {
+ &change_room("j",$cmd[1],$room);
+ &reload_html("change_room");
+ }
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ my $me_msg;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ $me_msg =~ s#/me/#<i>$alias</i>#g;
+ $me_msg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if ($cmd eq "m") {
+ &post($room,"<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>");
+ } else {
+ &post($room,"<b><font color=$col><i>$alias</i> $me_msg</font></b>");
+ }
+ &reload_html;
+#############>- 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 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ open MEMO,">>data/user/memos/$alias2memo";
+ flock MEMO, 2;
+ print MEMO "<font 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;
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>");
+ &reload_html;
+#############>- 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 / 3600));
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &zeit;
+ if ($tmp ne "autologout") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias loggt sich aus dem Chat aus ... </font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias wurde vom System automatisch ausgeloggt ... </font></i>");
+ }
+ &reload_html("quit");
+#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -<
+ } elsif ($cmd eq "rmgb") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias löscht das eigene Gästebuch ...</font></i>");
+ unlink("data/user/gbooks/$alias");
+ &reload_html;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my $msg2scream;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ $msg2scream =~ s#ä#Ä#g; $msg2scream =~ s#ö#Ö#g; $msg2scream =~ s#ü#Ü#g; $msg2scream = "\U$msg2scream";
+ &post($room,"<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>");
+ &reload_html;
+#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGElOGGT 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";
+ my $lastlogin = <LASTLOGIN>;
+ close LASTLOGIN;
+ my $timestamp = sprintf("%.2f",((time() - $lastlogin) / 3600));
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> hat sich seit der Einführung dieses Befehls noch nie eingeloggt!</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+#############>- 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 color=ffffff>Der aktuelle Raum: $room $theme $door ($nr) : <font color=ffa500>$personen</font></font>");
+ &reload_html;
+#############>- 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 color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: <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 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 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+ &reload_html;
+#############>- 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" && $user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<font color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>");
+ } else {
+ &change_room("ju",$raum,$room,$alias2search);
+ }
+ &reload_html("change_room");
+ }
+ }
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2search <font color=ffffff> ist nicht eingeloggt !</font></font>");
+ &reload_html;
+#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -<
+ } elsif ($cmd eq "l") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") {
+ open RSTAT, "data/online/rstat/$room";
+ my @r_stat = <RSTAT>;
+ close RSTAT;
+ my $lock = "0\n";
+ &zeit;
+ if ($room eq "Cyberbar" || $room eq "Wired") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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) $alias sperrt den Raum ab ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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";
+ flock RSTAT, 2;
+ print RSTAT $lock;
+ close RSTAT;
+ }
+ &reload_html;
+ }
+#############>- RAUMBESETZER ERNENNEN -<
+ } elsif ($cmd eq "su") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $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;
+ if (prove_besetzer($alias2su,$room) == 1 || &hierachie($alias2su) eq "wa" || &hierachie($alias2su) eq "ow") {
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>");
+ &reload_html;
+ }
+ open RSTAT,">>data/online/rstat/$room";
+ flock(RSTAT, 2);
+ print RSTAT $alias2su."\n";
+ close RSTAT;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verleiht \"$alias2su\" Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ &reload_html;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>");
+ &reload_html;
+ }
+#############>- RAUMBESETZER ENTNENNEN -<
+ } elsif ($cmd eq "rsu") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2rsu = $cmd[1];
+ open(DATEI,"<data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ if (prove_besetzer($alias2rsu,$room) == 1) {
+ &rm_rstat($alias2rsu,$room);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2rsu <font color=ffffff>ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !</font></font>");
+ }
+ &reload_html;
+ }
+#############>- RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "t") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") {
+ open RSTAT, "data/online/rstat/$room";
+ my @r_stat = <RSTAT>;
+ close RSTAT;
+ &zeit;
+ my $theme;
+ if ($cmd[1] ne undef) {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $theme = $theme." ".$cmd[$i];
+ }
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias gibt dem Raum das Thema (<font color=ffa500> $theme </font>) ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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]."\n";
+ }
+ open RSTAT,">data/online/rstat/$room";
+ print RSTAT $theme;
+ close RSTAT;
+ &reload_html;
+ }
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN -<
+ } elsif ($cmd eq "ban" || $cmd eq "banip") {
+ my $hierachiealias = &hierachie($alias);
+ if ($hierachiealias eq "wa" || $hierachiealias eq "ow") {
+ my $alias2ban = $cmd[1];
+ my $hierachie = &hierachie($alias2ban);
+ open BAN,"<data/ban";
+ my @ban = <BAN>;
+ close BAN;
+ if ($cmd[1] eq undef) {
+ my $nr = @ban;
+ my $banned;
+ foreach(@ban) {
+ chomp($_);
+ $banned .= " $_";
+ }
+ &post_prv("$alias","<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$banned</font></font>");
+ &reload_html;
+ } elsif (-f "data/user/options/$alias2ban") {
+ if ($hierachie eq "wa") {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist Wächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ } elsif ($hierachie eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist Oberwächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ }
+ if ($cmd eq "ban") {
+ if (add_entry($alias2ban,"ban") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verbannt \"$alias2ban\" aus dem Chat ...</font></i>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>");
+ }
+ } elsif ($hierachiealias eq "ow" && $hierachie ne "ow") {
+ if (-f "data/online/ident/$alias2ban") {
+ open DATEI, "<data/online/ident/$alias2ban";
+ my $ipnr = <DATEI>;
+ close DATEI;
+ chomp($ipnr);
+ if (add_entry("ip://$ipnr","ban") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verbannt die IP-Nummer von \"$alias2ban\" aus dem Chat ...</font></i>");
+ } else {
+ &post_prv("$alias","<font color=ffffff>Die IP-Nummer <font color=ffa500>$ipnr</font> von $alias2ban ist bereits verbannt!</font></font>");
+ }
+ &reload_html;
+ } else {
+ &post_prv("$alias","<font color=ffffff>Die IP-Nummer von <font color=ffa500>$alias2ban </font>kann nicht verbannt werden, da Benutzer nicht eingeloggt ist!</font></font>");
+ &reload_html;
+ }
+ } else {
+ goto ENDCMD;
+ }
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2ban $ipnr<font color=ffffff>kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>");
+ &reload_html;
+ }
+#############>- ALIAS ENTBANNEN -<
+ } elsif ($cmd eq "rban" || $cmd eq "rbanip") {
+ my $hierachie = &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 (&rm_entry($alias2rban,"ban") == 1) {
+ if ($alias2rban =~ /ip:/) {
+ &post_prv($alias,"<font color=ffffff>Die IP-Nummer <font color=ffa500>$alias2rban </font>wurde aus der Banliste ausgetragen!</font></font>");
+ } else {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias entbannt \"$alias2rban\" ...</font></i>");
+ }
+ &reload_html;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2rban <font color=ffffff>ist nicht verbannt!</font></font>");
+ &reload_html;
+ }
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "ip") {
+ my $hierachie = &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";
+ my $ipnr = <DATEI>;
+ close DATEI;
+ chomp($ipnr);
+ &post_prv("$alias","<font color=ffa500>$_<font color=ffffff> hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ &reload_html;
+ }
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ my $hierachie= &hierachie($alias);
+ if ($hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ if (-f "data/online/users/$alias2kick") {
+ 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) {
+ my $hierachie = &hierachie($alias2kick);
+ if ($hierachie eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>");
+ } elsif ($hierachie eq "wa") {
+ &post_prv("$alias","<font 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>");
+ $_ = undef if ($room eq $raum);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$raum);
+ rm_alias($alias2kick,$raum);
+ check_online;
+ }
+ &reload_html;
+ }
+ }
+ }
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>");
+ &reload_html;
+ }
+#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
+ } elsif ($cmd eq "kill") {
+ if (hierachie($alias) eq "ow") {
+ my $alias2kill = $cmd[1];
+ if (-f "data/user/options/$alias2kill") {
+ my $hierachie = &hierachie($alias2kill);
+ if ($hierachie eq "ow") {
+ &post_prv($alias,"<font 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 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) $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");
+ &rm_entry($alias2kill,"ban");
+ open(DEL, ">>data/kill");
+ print DEL "($day.$month.$year $hours:$min:$sec) $alias2kill wurde von $alias gekillt\n";
+ close DEL;
+ }
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2kill <font color=ffffff> existiert nicht in der DB und kann nicht \"gekillt\" werden !</font></font>");
+ }
+ &reload_html;
+ }
+#############>- EINEN ANDEREN RAUM AUF-/ABSPERREN -<
+ } elsif ($cmd eq "sl") {
+ my $hierachie = &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) $alias sperrt den Raum \"$sl_room\" von aussen ab ...</font></i>",$sl_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 color=ffffff>Der Raum <font color=ffa500>$sl_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- IN EINEN ANDEREN RAUM HINEINRUFEN -<
+ } elsif ($cmd eq "ss") {
+ my $hierachie = &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) $alias ruft in den Raum \"$ss_room\" hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>",$ss_room);
+ &reload_html;
+ } else {
+ &post_prv($alias,"<font color=ffffff>Der Raum <font color=ffa500>$ss_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- EINEN ANDEREN RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "st") {
+ my $hierachie = &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) $alias gibt dem Raum \"$st_room\" das Thema (<font color=ffa500> $theme </font>) ...</font></i>",$st_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME &postEN -<
+ } elsif ($cmd eq "sys") {
+ my $hierachie = &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;
+ }
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN -<
+ } elsif ($cmd eq "wa") {
+ if (hierachie($alias) eq "ow") {
+ if (-f "data/user/options/$cmd[1]") {
+ if (hierachie($cmd[1]) eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$cmd[1] <font color=ffffff>ist bereits als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>");
+ } elsif (!add_entry($cmd[1],"wa")) {
+ &post_prv("$alias","<font color=ffa500>$cmd[1] <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>")
+ } else {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias ernennt \"$cmd[1]\" zum Wächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ }
+ &reload_html;
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2wa <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- ALIAS DIE WÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "rwa") {
+ if (hierachie($alias) eq "ow") {
+ if (&rm_entry($cmd[1],"wa") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat \"$cmd[1]\" vom Wächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$cmd[1] <font color=ffffff>ist kein Wächter und können die Wächterrechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- ADMINISTRATORBEFEHLE -<
+ } elsif ($alias eq $admin) {
+#############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -<
+ if ($cmd eq "ow") {
+ if (-f "data/user/options/$cmd[1]") {
+ if (add_entry($cmd[1],"ow") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias ernennt \"$cmd[1]\" zum Oberwächter ...</font></i>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$cmd[1] <font color=ffffff>ist bereits als Oberwächter eingetragen!</font></font>");
+ }
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2wa <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ }
+ &reload_html;
+#############>- ALIAS DIE OBERWÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "row") {
+ if (&rm_entry($cmd[1],"ow") ne undef) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat \"$cmd[1]\" vom Oberwächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$cmd[1] <font color=ffffff>ist kein Oberwächter und können die Rechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+#############>- PASSWORD EINES BENUTZERS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "pw") {
+ my $pw2show = $cmd[1];
+ if (-f "data/user/options/$pw2show") {
+ open PW,"<data/user/options/$pw2show";
+ my @pw = <PW>;
+ close PW;
+ chomp($pw[0]);
+ &post_prv($alias,"<font color=ffa500>$pw2show <font color=ffffff> hat das Passwort \"$pw[0]\" !</font></font>");
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$pw2show <font color=ffffff> existiert nicht in der Benutzerdatenbank !</font></font>");
+ &reload_html;
+#############>- IDENT-DATEI EINES BENUTZERS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "id" || $cmd eq "agent") {
+ my $id2show = $cmd[1];
+ if (-f "data/online/ident/$id2show") {
+ open ID,"<data/online/ident/$id2show";
+ my @id = <ID>;
+ close ID;
+ if ($cmd eq "id") {
+ chomp($id[1]);
+ &post_prv($alias,"<font color=ffa500>$id2show <font color=ffffff> hat die Temp-ID \"$id[1]\" !</font></font>");
+ } else {
+ chomp($id[2]);
+ &post_prv($alias,"<font color=ffa500>$id2show <font color=ffffff> verwendet \"$id[2]\" !</font></font>");
+ }
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$id2show <font color=ffffff> ist nicht eingeloggt !</font></font>");
+ &reload_html;
+#############>- SYSTEMMELDUNG posten -<
+ } elsif ($cmd eq "cool") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $msg2post</font></i>");
+ &reload_html;
+#############>- REVERSE -<
+ } elsif ($cmd eq "rev") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $msg2post = reverse($msg2post);
+ &post($room,"<b><font color=$col>$alias: <font color=$secol>$msg2post</font></font></b>");
+ &reload_html;
+ }
+ }
+ENDCMD:
+#############>- FLÜSTERN ( Auch mit '/' ) -<
+ my ($alias2post,$msg2post,$action);
+ if ($cmd eq "msg") {
+ $alias2post = $cmd[1];
+ for ($i=2; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $action = "whisper";
+ } elsif ($cmd eq "") {
+ $alias2post = $q->param('whisper');
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ } else {
+ $alias2post = $cmd;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $action = "whisper";
+ }
+ $msg2post =~ s#/me/#<i>$alias</i>#g;
+ $msg2post =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if (-f "data/online/users/$alias2post") {
+ &post_prv($alias,"<b><font color=$col><i>Zu $alias2post geflüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &post_prv($alias2post,"<b><font color=$col><i>$alias flüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &reload_html($action,$alias2post);
+ }
+ &post_prv($alias," <font color=ffffff>Benutzer oder Befehl <font color=ffa500>$alias2post</font> ist nicht anwesend/verfügbar!</font></font>");
+ &reload_html;
+}
+#############>- ENDE DER CHATBEFEHLE -<
+
+sub rm_entry {
+ my ($alias,$file) = @_;
+ open ENTRY, "<data/$file";
+ my @entry = <ENTRY>;
+ close ENTRY;
+ my @new;
+ foreach(@entry) {
+ push @new,$_ if ($alias."\n" ne $_);
+ }
+ if (@entry != @new) {
+ open ENTRY, ">data/$file";
+ flock ENTRY, 2;
+ print ENTRY @new;
+ close ENTRY;
+ return 1;
+ } else {
+ return;
+ }
+}
+
+sub add_entry {
+ my ($alias,$file) = @_;
+ open ENTRY, "<data/$file";
+ my @entry = <ENTRY>;
+ close ENTRY;
+ foreach(@entry) {
+ chomp;
+ if ($alias eq $_) {
+ return;
+ }
+ }
+ open ENTRY, ">>data/$file";
+ flock ENTRY, 2;
+ print ENTRY $alias."\n";
+ close ENTRY;
+ return 1;
+}
\ No newline at end of file diff --git a/0.6.1/main2.pl b/0.6.1/main2.pl new file mode 100644 index 0000000..812ac24 --- /dev/null +++ b/0.6.1/main2.pl @@ -0,0 +1,619 @@ +#!/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");
+ &secure_checkid($alias);
+ $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 color=ffffff><a href=\"main2.pl?alias=$tmp&var=alias_html&tmp=$alias&tmpid=$tmpid\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$tmp&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;
+ my $nr = 1;
+ if ($alias ne $tmp) {
+ foreach(@datei) {
+ print "<br>Eintrag # $nr: $_";
+ $nr++;
+ }
+ } 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>
+ <br>
+ Eintrag # $nr:
+ $datei[$i]
+ </div>
+ </td>
+ </tr>
+END
+$nr++;
+}
+print <<END;
+ </table>
+ <table>
+ <tr>
+ <td>
+ <font color=ffffff>
+ <input type="submit" value="Markierten Eintrag löschen">
+ </font>
+ </td>
+ <td>
+ <font color=ffffff>
+ <input type="reset" value="Markierung 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;
+ foreach(@data) {
+ chomp $_;
+ }
+ if ($method eq "edit_options_html") {
+ if ($message eq "edit_options_ok") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Chateinstellungen geändert ...</font></i>");
+print <<END;
+<script language="JavaScript">
+ open("main.pl?var=change_colors&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","reload");
+</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>
+ <hr>
+ <div>Einstellungen für den Nachrichten-Verlauf</div>
+ <table>
+ <tr>
+ <td>
+ <br>
+ <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div>
+ <font color=ffffff>
+ <select name="maxVerlauf" size="1">
+ <option value="$data[3]">$data[3]
+END
+for($i=1;$i<=50;$i++) {
+ print "<option value=\"$i\">$i";
+}
+print<<END;
+ </select>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <br>
+<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div>
+ <font color=ffffff>
+ <select name="verlaufOrder" size="1">
+ <option value="$data[4]">Bisherige Einstellung ($data[4])
+ <option value="0">Neue Verlaufnachrichten oben (0)
+ <option value="1">Neue Verlaufnachrichten unten (1)
+ </select>
+ </font>
+ </td>
+ </tr>
+ </table>
+<br>
+ <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div>
+ <hr>
+ <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 markieren 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") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat das Profil geändert ...</font></i>");
+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") {
+ my $url = $q->param('homepage');
+ $url =~ s#^[http://]*##g;
+ 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"."http://$url\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;
+ }
+ open(OPTIONS,">data/user/options/$alias");
+ print OPTIONS $id."\n".$col."\n".$secol."\n".$q->param("maxVerlauf")."\n".$q->param("verlaufOrder");
+ close OPTIONS;
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
\ No newline at end of file diff --git a/0.6.1/online.pl b/0.6.1/online.pl new file mode 100644 index 0000000..20a6ef8 --- /dev/null +++ b/0.6.1/online.pl @@ -0,0 +1,125 @@ +#!/usr/bin/perl
+
+# 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");
+
+my @away = &prove_away($alias,$room,"return_list");
+
+for ($i=0;$i<=$#away;$i+=2) {
+ goto DONOTCOUNT if ($away[$i] eq $alias);
+}
+
+open(DATEI,"<data/online/users/$alias");
+ my $oldstamp = <DATEI>;
+close DATEI;
+if ($oldstamp > (time - 40)) {
+ 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;
+}
+DONOTCOUNT:
+
+unless (-d "data/online/rooms/$room") {
+ mkdir "data/online/rooms/$room", 0777;
+}
+unless (-f "data/online/rstat/$room") {
+ open(DATEI,">data/online/rstat/$room"); # Raumbesetzerstatus setzen
+ print DATEI "0\n\n$alias\n";
+ close DATEI;
+}
+
+open(DATEI,">data/online/users/$alias");
+ print DATEI time;
+close DATEI;
+open(DATEI,">data/online/rooms/$room/$alias");
+ print DATEI time;
+close DATEI;
+
+open(DATEI,"<data/online/prove");
+ my $provetime = <DATEI>;
+close DATEI;
+&check_online if ($provetime < (time - 30));
+
+print<<HEADER;
+<html>
+ <head>
+ <meta http-equiv="refresh" content="20" URL="online.pl?room=$room&alias=$alias&tmpid=$tmpid">
+ <style type="text/css">
+ a { font-family: arial; font-size:11px; color: #ffffef; }
+ a:hover { color: #ffffff; }
+ </style>
+ <style type="text/css" media="all">
+ a { text-decoration: none; }
+ a:hover { text-decoration:underline; }
+ </style>
+ </head>
+ <body bgcolor="#000000">
+HEADER
+
+opendir(ROOM,"data/online/rooms/".$room);
+ my @room = sort(readdir(ROOM));
+closedir(ROOM);
+
+my $chatter = $#room-1;
+my @besetzer = &prove_besetzer(undef,$room,"return_list");
+
+open WA, "<data/wa";
+ my @wa = <WA>;
+close WA;
+open OW, "<data/ow";
+ my @ow = <OW>;
+close OW;
+
+print "<font size='1' color='ffffff' face='arial'>$room ($chatter):</font><table>";
+
+foreach $online (@room) {
+ if (-f "data/online/rooms/$room/$online") {
+ for ($i=0;$i<=$#away;$i+=2) {
+ chomp $away[$i+1];
+ if ($away[$i] eq $online) {
+ my $away = $away[$i+1];
+ print "<tr><td><img title='$away' alt='$away' src='$gfxpath/away.gif'></td>";
+ goto WEITER;
+ }
+ }
+ foreach(@ow) {
+ chomp;
+ if ($_ eq $online) {
+ print "<tr><td><img title='Oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>";
+ goto WEITER;
+ }
+ }
+ foreach(@wa) {
+ chomp;
+ if ($_ eq $online) {
+ print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>";
+ goto WEITER;
+ }
+ }
+ foreach(@besetzer) {
+ chomp;
+ if ($_ eq $online) {
+ print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>";
+ goto WEITER;
+ }
+ }
+ print "<tr><td></td>";
+WEITER:
+ print "<td><a href='main2.pl?var=alias_html&alias=$alias&tmp=$online&tmpid=$tmpid' target='$online'>$online</a></td></tr>";
+ }
+}
+
+print "</table>", $q->end_html;
\ No newline at end of file diff --git a/0.6.1/ow.gif b/0.6.1/ow.gif Binary files differnew file mode 100644 index 0000000..b30e8f9 --- /dev/null +++ b/0.6.1/ow.gif diff --git a/0.6.1/push.pl b/0.6.1/push.pl new file mode 100644 index 0000000..5ca59cd --- /dev/null +++ b/0.6.1/push.pl @@ -0,0 +1,112 @@ +#!/usr/bin/perl
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+print $q->header;
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+
+{
+ unless (-f "data/online/tmpid/$alias.$tmpid") {
+ require config;
+ &error("Falsche TempID !");
+ }
+}
+
+$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;
+moves_interval = 4;
+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>loading chat-engine ...</font><br>
+END
+sleep 1;
+print "<font size=1 color=ffffff face=arial>loading in progress ...</font><br>";
+sleep 1;
+print "<font size=1 color=ffffff face=arial><b>$alias</b>, welcome to <b>yChat</b>! :-)</font><br>";
+
+
+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,@flood;
+OPENMSGFILE:
+$change_room = 0;
+$startime = time;
+
+if (-e "data/msgs/$room") {
+ open(MSGFILE,"<data/msgs/$room");
+ unless (-d "data/online/pids") {
+ mkdir "data/online/pids", 0777;
+ } unless (-d "data/online/pids/$room") {
+ mkdir "data/online/pids/$room", 0777;
+ }
+ open(PID,">data/online/pids/$room/$pid");
+ print PID time;
+ close PID;
+} else {
+ sleep 1;
+ goto OPENMSGFILE;
+}
+
+&sendmsgs;
+while (-f "data/online/users/$alias") {
+ local $SIG{USR1} = \&sendmsgs;
+ goto OPENMSGFILE if ($change_room == 1);
+ sleep 15;
+ print "\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") {
+ unlink("data/online/pids/$room/$pid");
+ $room = $action;
+ close MSGFILE;
+ $change_room = 1;
+ }
+ print "$message<br>\n" if ($change_room != 1);
+ push(@flood,$message);
+ if ($flood[0] eq $flood[1] && $flood[0] eq $flood[2] && $flood[0] eq $flood[3]) {
+ print "<i><font color=red> Jemand floodet den Chat !</font></i><br>\n";
+ }
+ shift(@flood) if ($#flood > 2);
+ }
+ }
+ }
+ seek(MSGFILE, $curpos, 0);
+}
+
+unlink("data/online/pids/$room/$pid");
\ No newline at end of file diff --git a/0.6.1/rb.gif b/0.6.1/rb.gif Binary files differnew file mode 100644 index 0000000..321341c --- /dev/null +++ b/0.6.1/rb.gif diff --git a/0.6.1/setup.sh b/0.6.1/setup.sh new file mode 100644 index 0000000..cee5a24 --- /dev/null +++ b/0.6.1/setup.sh @@ -0,0 +1,51 @@ +#!/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
+mkdir data/online/tmpid
+chmod 777 data/online/tmpid
+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.6.1/stat.pl b/0.6.1/stat.pl new file mode 100644 index 0000000..229d1ff --- /dev/null +++ b/0.6.1/stat.pl @@ -0,0 +1,209 @@ +#!/usr/bin/perl -w
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+require config;
+
+my $var = $q->param('var');
+$alias = $q->param('alias');
+$tmpid = $q->param('tmpid');
+
+print $q->header();
+&start_html("Statistiken");
+print $q->div("yChat Statistiken"), $q->hr,
+ $q->div( $q->a( { -href=>"stat.pl?var=ranking&alias=$alias&tmpid=$tmpid" }, "Rankings"), " | ",
+ $q->a( { -href=>"stat.pl?var=del&alias=$alias&tmpid=$tmpid" }, "Loginstatistiken"), " | ",
+ $q->a( { -href=>"stat.pl?var=stat&alias=$alias&tmpid=$tmpid" }, "DB-Statistik"), " | ",
+ $q->a( { -href=>"stat.pl?var=code&alias=$alias&tmpid=$tmpid" }, "Programmcode"), " | ",
+ $q->a( { -href=>"stat.pl?var=var&alias=$alias&tmpid=$tmpid" }, "Umgebungsvariablen"),), $q->hr;
+
+if ($var eq "ranking") {
+
+ opendir(COUNTS, "data/user/counts");
+ my @counts = readdir(COUNTS);
+ closedir(COUNTS);
+
+ print "<div>";
+
+ my $nr_start = $q->param('start');
+ my $nr_end = $q->param('end');
+ my %online;
+ my $rank;
+ my $nr;
+
+ foreach(@counts) {
+ if(-f "data/user/counts/$_" ) {
+ if (s#.online##g) {
+ open(TOTAL, "<data/user/counts/$_.online");
+ my $total = <TOTAL>;
+ close TOTAL;
+ $online{sprintf("%.2f",($total / 3600))} = $_;
+ }
+ }
+ }
+
+ print "<div>", $q->b("Rankings:"), $q->br,
+ "<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>";
+
+ if (!$nr_start) {
+ $nr_start = 1;
+ } if (!$nr_end) {
+ $nr_end = 20;
+ }
+
+ foreach $wert (reverse(sort { $a <=> $b } keys %online)) {
+ $nr++;
+ if ($online{$wert} eq $alias) {
+ $rank = $nr;
+ last if ($nr > $nr_end);
+ }
+ next if ($nr < $nr_start || $nr > $nr_end);
+ print "<tr><td><font color='ffffff' size='1' face='arial'>".$nr."</font></td><td><font color='ffffff' size='1' face='arial'> ".$wert."h </font></td><td> <a href='main2.pl?var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n";
+ }
+ print "</table>", $q->hr;
+ $nr_start -= 20; $nr_end -= 20;
+ print "Rankings von <a href='stat.pl?var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" if ($nr_start > 0);
+ $nr_start += 40; $nr_end += 40;
+ print "Rankings von <a href='stat.pl?var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...",
+ $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>");
+
+} elsif ($var eq "del") {
+
+ print "<div>", $q->b("Alte Benutzer löschen:"), $q->br,
+ "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gelöscht.", $q->br, $q->br;
+
+ opendir(USER, "data/user/options");
+ my @user = readdir(USER);
+ closedir(USER);
+ @user = sort(@user);
+
+ my $i = 0;
+ my $j;
+ my $k = 0;
+ my $l = 0;
+ my $full = $q->param('tmp');
+
+ foreach(@user) {
+ if (-f "data/user/lastlogin/$_") {
+ open(LOGIN,"<data/user/lastlogin/$_");
+ my $login = <LOGIN>;
+ close LOGIN;
+ $login = sprintf("%.2f",((time - $login) / 3600));
+ $j++;
+ if (999 < $login && $login < 1440) { # 1440 = 60 Tage
+ $k++;
+ print $q->font( { -color=>"ffa500" }, $q->b( "$j($k) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef);
+ } elsif ($login < 48) {
+ $l++;
+ print $q->font( { -color=>"ffffef" }, $q->b( "$j($l) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef);
+ } elsif ($login < 1440) {
+ print "$j $_ Letztes Login vor: ".$login."h", $q->br, "\n" if ($full ne undef);
+ } else {
+ $k++;
+ &kill($_,$i++,$login);
+ }
+ } elsif (-f "data/user/options/$_") {
+ &kill($_,$i++);
+ }
+ }
+ print $q->hr if ($full ne undef);
+ print "</div>", $q->div( $q->b(
+ "$j Benutzer befinden sich in der Datenbank!", $q->br,
+ $q->font( { -color=>"ffffef" }, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br,
+ $q->font( { -color=>"ffa500" }, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br,
+ $q->font( { -color=>"ff0000" }, "$i Benutzer wurden gerade eben gelöscht!") ), $q->br, $q->br,
+ "PS: Jeder registrierte Benutzername wird nur einmal gezählt!" );
+ print $q->br, $q->div( "(", $q->a( { -href=>"stat.pl?var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, "Vollständige Ansicht"), ")" ) if ($full eq undef);
+
+} elsif ($var eq "var") {
+
+ print "<div>", $q->b("Server Umgebungsvariablen:"), $q->br, $q->br,
+ "Die Serverumgebungsvariablen können nur von Oberwächtern eingesehen werden!", $q->br, $q->br;
+
+ if (&hierachie($alias) eq "ow") {
+ &secure_checkid($alias);
+ while(($key,$value) = each(%ENV)) {
+ print "$key = $value\n", $q->br;
+ }
+ }
+
+ print "</div>";
+
+} elsif ($var eq "stat") {
+
+ print $q->div( $q->b("yChat-DB Statistik:") ), $q->br;
+ $files = 0;
+ $size = 0;
+ $directorys = 1;
+ &zaehle("data");
+ $size = sprintf("%.2f", ($size/1048576));
+ print $q->div( "Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys");
+
+ } elsif ($var eq "code") {
+
+ print $q->div( $q->b("yChat Programmcode-Statistik:") ), $q->br;
+
+ my ($zeilen,$size,$bytes,$files);
+
+ opendir(DIR,".");
+ my @dir = readdir(DIR);
+ closedir(DIR);
+ $dir = sort(@dir);
+
+ foreach(@dir) {
+ if (/.+[pl]$/ || /.+[pm]$/) {
+ $bytes = (-s);
+ $size += $bytes;
+ open(PL, "<$_");
+ my @pl = <PL>;
+ close PL;
+ local $nr = $#pl+1;
+ $zeilen += $nr;
+ $files++;
+ print $q->div("Datei $files: $nr Zeilen, $bytes Bytes"), $q->br, "\n";
+ }
+ }
+print $q->div( $q->b("Programmcode: $files Dateien, $zeilen Zeilen", $q->br, "Größe: $size Bytes") );
+
+}
+
+print $q->end_html;
+
+sub zaehle {
+ local ($dir,$data) = @_;
+ $dir = "$dir/$data" if ($data ne undef);
+ opendir(DATA,$dir);
+ local @data = readdir(DATA);
+ closedir(DATA);
+ $files2 = 0;
+ foreach(@data) {
+ if (-f "$dir/$_") {
+ $files++;
+ $files2++;
+ $size += (-s "$dir/$_");
+ } elsif (-d "$dir/$_" && $_ ne "." && $_ ne "..") {
+ $directorys++;
+ &zaehle($dir,$_);
+ }
+ }
+}
+
+sub kill {
+ my ($rm,$nr,$login) = @_;
+ $login = "XXXXXX" if ($login eq undef);
+ print $q->font( { -color=>"ff0000" }, $q->b( "$j($nr) $rm Letztes Login vor: ".$login."h (wurde gelöscht)") ), $q->br, "\n";
+ print "<font size='1'>";
+ print "options " if unlink("data/user/options/$rm");
+ print "profiles " if unlink("data/user/profiles/$rm");
+ print "gbooks " if unlink("data/user/gbooks/$rm");
+ print "counts " if unlink("data/user/counts/$rm");
+ print "counts.online " if unlink("data/user/counts/".$rm.".online");
+ print "lastlogin " if unlink("data/user/lastlogin/$rm");
+ print "memos" if unlink("data/user/memos/$rm");
+ print "</font>", $q->hr, "\n";
+ &zeit;
+ open(DEL, ">>data/kill");
+ print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n";
+ close DEL;
+}
\ No newline at end of file diff --git a/0.6.1/wa.gif b/0.6.1/wa.gif Binary files differnew file mode 100644 index 0000000..553984c --- /dev/null +++ b/0.6.1/wa.gif diff --git a/0.6.1/y.gif b/0.6.1/y.gif Binary files differnew file mode 100644 index 0000000..356175d --- /dev/null +++ b/0.6.1/y.gif diff --git a/0.6.1/yIntro.swf b/0.6.1/yIntro.swf Binary files differnew file mode 100644 index 0000000..d592826 --- /dev/null +++ b/0.6.1/yIntro.swf diff --git a/0.6.1/ySymbol.swf b/0.6.1/ySymbol.swf Binary files differnew file mode 100644 index 0000000..2b899bb --- /dev/null +++ b/0.6.1/ySymbol.swf diff --git a/0.6.1/y_.gif b/0.6.1/y_.gif Binary files differnew file mode 100644 index 0000000..f8b6ee5 --- /dev/null +++ b/0.6.1/y_.gif diff --git a/0.6.2/CREDITS.txt b/0.6.2/CREDITS.txt new file mode 100644 index 0000000..683e57e --- /dev/null +++ b/0.6.2/CREDITS.txt @@ -0,0 +1,33 @@ +########################### 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. + ... die Optimierung der Statusgrafiken in der Onlineliste. + ( 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. + ... die Erstellung der "Chatiquette". + ... einige Bugfixes in JavaScript-Codes. + ( maligree.yi.org ) + + - Dommi für die Erstellung der Away-Grafik. Diese wurde jedoch nachträglich + von mir verfärbt und für viele Bug-Reports :-) + + - Larry Wall, für die Erfindung von Perl !
\ No newline at end of file diff --git a/0.6.2/README.txt b/0.6.2/README.txt new file mode 100644 index 0000000..3adc006 --- /dev/null +++ b/0.6.2/README.txt @@ -0,0 +1,29 @@ +############################## yChat.de README ############################## +## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ## +############################################################################# + +Allgemeine Bedingungen bzgl. yChat: + + 1. Das yChat-System in den Versionen 0.6.X und früher ist Freeware und darf + kostenlos weitergeben und eingesetzt werden. + + 2. Ohne Einwilligung des Autors darf mit dem Skript auf irgend welche Art + kein Geld verdient werden. + + 3. Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit + die Copyright-Hinweise des Autors (/about) und die Versionsbezeichnung + auf der Startseite enthalten bleiben. + + 4. Wird das yChat-System 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. + + 5. Wird das yChat-System eingesetzt, so muß dem Autor die Location bzw. die + URL bekanntgegeben werden. Auf Wunsch wird dort eine Subdomain + DEINNAME.yChat.de gelinkt. + + 6. Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und + für andere, nicht von yChat abhängige Perl-Programme einzusetzen. + + 7. Der Autor übernimmt keine Haftung über das Skript oder die Folgen der + Einsetzung des Skripts und leistet keinen Installationssupport.
\ No newline at end of file diff --git a/0.6.2/SETUP.txt b/0.6.2/SETUP.txt new file mode 100644 index 0000000..1574fbd --- /dev/null +++ b/0.6.2/SETUP.txt @@ -0,0 +1,144 @@ +############################## 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 gar nicht 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 +stat.pl => Erstellt diverse Statistiken +README.txt => Beinhaltet wichtige Informationen +UPDATES.txt => Updateliste der verschiedenen Versionen +CREDITS.txt => Personen, die geolfen haben yChat zu proggen +SETUP.txt => Dieses Dokument +chatiq.sno => Datei beinhaltet die Chatiquette +colors.sno => Datei beinhaltet alle Farben in hex. für die Chatoptionen +help.sno => Datei beinhaltet alle Chatbefehle + + +- 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/* + +- Verzeichnis für die Raumstatusdateien. Hier wird abgespeichert: + Raumbesetzer, Away (inkl. Away-Nachricht)und das Raumthema. + ./cgi-bin/yChat/data/online/rstat/* + + - 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/* + +- 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 eingeloggten Chatter + ./cgi-bin/yChat/data/online/ident/* + + - Hier befinden sichTempIDs der eingeloggten Chatter + ./cgi-bin/yChat/data/online/tmpid/* + +Alle Grafik- und Multimediadateien (*.gif, *.jpg, *.swf) 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. + +Jetzt einfach die Datei index.pl vom Browser ausführen lassen :-) + + +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.6.2/UPDATES.txt b/0.6.2/UPDATES.txt new file mode 100644 index 0000000..eeac4dc --- /dev/null +++ b/0.6.2/UPDATES.txt @@ -0,0 +1,308 @@ +########################### yChat.de UPDATE LIST ########################### +## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ## +############################################################################# +Hier sind alle Erneuerungen der Versionen dokumentiert: + +In Planung für 0.8.0: + # Kompletter rewrite des Systems. + + Chatdaemon, kein CGI-Chat mehr! (Natürlich auch in Perl). Der + Chat beantsprucht dann seinen eigenen Port und ist gleichzeitig + auch HTTP-Server für die Chat-Seiten! + - Evtl MySQL-Datenbank. + + Design komplett Template-basierend. + + Schlicht und einfaches Design, gut individualisierbar. + + Objektorientierte Programmierung. + + Multiplex-Serversockets und Fork-Prozesse. + + Raumnamen dürfen Sonderzeichen enthalten. + + Sauschnell!!! + - Fast alle alten und viele viele neue Chat-Befehle! + - Das Online-Frame soll aus/anschaltbar sein und wird nicht mehr + per HTTP-Refresh-, sondern JavaScript frameübergreifend + aktualisiert. + (Das neue System wird dieses Jahr wohl noch erscheinen und auch + kostenlos sein. Eine 0.7.x-Beta existiert schon. Für weitere + Informationen bitte an die oben stehende Mail-Adresse wenden. + Die mit einem +-Zeichen gekennzeichneten Punkte sind bereits + erfolgreich implentiert worden.) + +U.A. in Planung für 0.6.3: + - Nach dem Login eine richtige Start-Seite, wo alle verfügbaren + Chat-Räume aufgelistet sind. Per Mausklick soll der/die Chatter/ + Chatterin in den gewünschten Raum gelangen. + +Update von 0.6.1 auf 0.6.2 (09.08.01) + - Wächter können nun auch IP# verbannen. + - Verbannte IP# können keine neuen Nicks mehr registrieren. + - Benutzerlimit wurde eingeführt. + - yChat aller 0.6.X Versionen und früher sind Freeware. + - Sonderchatter ohne Rechte: UvL (Unschuld vom Lande) + - In der config.pm kann man nun den Administrator und UvL bestimmen. + - Beseitigung vieler vieler Bugs. + - Neuer Befehl für Wa und Ow: mit /img kann das Superuser-Logo im + Online-Frame de/reaktiviert werden. Gleichzeitig wird auch die + Liste im Menüpunkt "Superuser" ergänzt. Wa und Ow können + allerdings auch Inkognito-Superuser in dieser Liste sehen. + +Update von 0.6.0 auf 0.6.1 (28.02.01) + - Alternativ zu "/msg Alias Nachricht" und "/ Nachricht" kann man + nun mit "/Alias Nachricht" auch nachrichten flüstern. Dies geht + allerdings nur dann, wenn Alias nicht gleich einem Chatbefehl ist! + - Wächter können keine verschlossenen Räume mehr betreten. + - Registriert sich ein neuer Chatter und hat noch keine feste Farbe + deffiniert, dann werden diese zufällig Generiert. + - Wird bei dem Befehl "/col" keine Farbe mit angegeben, dann werden + zufällige Chatfarben generiert! + - In der "config.pm" wurde die zusätliche Variable $admin + hinzugefügt. Sie beinhaltet den Alias vom Chatadministrator. + - Neue Administratorbefehle. + - Das Verzeichnis "data/online/tmpid" wurde angelegt. Hier befinden + sich alle aktuellen Temp-IDs. Die IDs werden nun schneller und + sicherer auf Richtigkeit überprüft. + - Temp-IDs können nun auch die Zeichen "." und "-" beinhalten. + - Raumnamen dürfen keine Spezialcharackter mehr beinhalten! + + +Update von 0.4.9 auf 0.6.0 (22.02.01) + - Auf der Startseite wird angezeigt, wer alles eingeloggt ist. + - Das Skript 'online.pl' wurde komplett überarbeitet. + - Viele Programmteile des gesamten Systems wurden überarbeitet und + optimiert. + - Der Chat hat den neuen Menüpunkt "Chatiquette" bekommen, dort + stehen die wichtigsten Verhaltensregeln für Chatter. + - Oberwächter können in der "Statistik" die Serverumgebungsvariablen + einsehen. + - Erweiterung der Errorlogfunktion. + - Neue Befehle: mit "/banip Alias" wird ie IP-Nummer von Alias aus + dem Chat verbannt. Mit "/rbanip ip://x.x.x.x" wird diese IP-Nummer + entbannt. Mir "/rban ip://x.x.x.x" läßt sich eine verbannte + IP-Nummer zwar auch entbannen, diese wird jedoch allen Chattern + offen präsentiert. Die verbannten IP-Nummern sind mit dem bisher + bekannten Befehl "/ban" einzusehen. Die Liste der verbannten + IP-Nummern befindet sich in der Datei "data/ban". + - Die Liste der Chatbefehle wurde übersichtlicher gemacht. + - Noch zufälligere TempIDs. + - Bei "/kill Alias" wird Alias auch aus der Datei "data/ban" + entfernt. + +Update von 0.4.8 auf 0.4.9 (11.02.01) + - "/online Alias" zeigt die Onlinezeit in Stunden, nicht mehr in + Minuten an. + - Hinzufügung des Statistikskripts "stat.pl" unter dem Menüpunkt + "Statistik". Das Top 40 - PHP Skript wurde nicht mehr benötigt und + gelöscht. + - Neue Befehle: /me/ und /m/ (Müssen inmitten des Textes eingegeben + werden.) + - Wird ein Benutzer aus dem Chat gekillt, so wird dies in der Datei + "data/kill" protokolloert. + - In der main.pl wird die Datei "config.pm" per "require" nur noch + in das Dokument eingefügt, wenn es notwendig ist. + - In der Onlineliste neben dem Raumnamen steht nun, wieviele Benutzer + sich im aktuellen Raum befinden. Ausserdem wird in der Onlineliste + angezeigt, ob ein Benutzer abgemeldet ist oder nicht und welche + Rechte er hat. Die Onlineliste ist nun Alphabetisch sortiert. + - Wird das Profil geändert und das http:// bei der Homepage-Adresse + vergessen, so wird dies automatisch hinzugefügt. + - Viele Bugfixes. + +Update von 0.4.7 auf 0.4.8 (26.01.01) + - Top 20 Ranking Liste in PHP4. + - Überarbeitung des Flash-Intros. + - PIDs für die Signalhandler werden zuverlässiger abgespeichert und + ggf. wieder gelöscht. + - Das push.pl-Skript (endlosschleife) benötigt nun nurnoch halb so + viel Speicher beim Ausführen. Die Datei config.pm wird nicht mehr + mit "require config;" eingebunden. + - Benutzernamen dürfen maximal nurnoch 15 Zeichen lang sein. + - Chatnachrichten dürfen maximal nurnoch 300 Zeichen lang sein. + - Wenn ein Benutzer eine Nachricht textet, überprüft das System, ob + derjenige sich auch wirklich im jew. Raum befindet. + - In den Chatoptionen kann man zusätzliche Einstellungen vornehmen: + 1.) Anzahl der Nachrichten im Nachrichten-Verlauf + 2.) Anordnung der Nachrichten im Nachrichten-Verlauf. + Neueinstellungen dieser Optionen werden erst nach einem + Neueinloggen aktiv. + - Die Error-Logdatei "data/error" wurde erweitert. + +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.6.2/adm.gif b/0.6.2/adm.gif Binary files differnew file mode 100644 index 0000000..d7b68d9 --- /dev/null +++ b/0.6.2/adm.gif diff --git a/0.6.2/away.gif b/0.6.2/away.gif Binary files differnew file mode 100644 index 0000000..c001883 --- /dev/null +++ b/0.6.2/away.gif diff --git a/0.6.2/chatiq.sno b/0.6.2/chatiq.sno new file mode 100644 index 0000000..2a024f5 --- /dev/null +++ b/0.6.2/chatiq.sno @@ -0,0 +1 @@ +<div><h2>Chatiquette</h2></div><hr><div>Hier einige Grundlagen ...</div><style type="text/css"> li { color: #ffffff }</style><ul><li><div>Vergiss nie, dass am anderen Ende auch nur Menschen sitzen. Diese mögen es gar nicht, angepöbelt, beleidigt oder in sonstiger Weise angegriffen zu werden.</div></li><li><div>Störend ist auch immer, wenn ein privater Streit im Chat ausgetragen wird. Tragt eure privaten Sachen ausserhalb des Chats aus.<br>Selbst wenn es nur Spass ist - weiss der Rest im Chat das?</div></li><li><div>Dauergeschrei fällt auch immer wieder störend auf. Was in Grossbuchstaben geschrieben wird, wird als Schreien bezeichnet.</div></li><li><div>Unsere ganz besonderen Spezialisten wollen auch immer wieder rausfliegen. Um das zu erreichen, senden sie die ganze Zeit Unsinn.</div></li><li><div>Diskussionen sind dagegen kein Problem. Dafür ist ein Chat ja da. Sobald allerdings das Thema der Diskussion zu sehr entgleist, sollte die Diskussion in einen etwas weniger öffentlichen Raum verlegt werden.</div></li></ul><div>Daraus ergeben sich folgende Regeln:</div><ul><li><div>keinen beleidigenden Wortschatz verwenden</div></li><li><div>obzöner und verfassungsfeindlicher Wortschatz fällt auch weg</div></li><li><div>streitet euch woanders oder in einem privaten Raum</div></li><li><div>schreit nich so viel</div></li><li><div>schreibt keinen Unsinn, der so aussieht, als ob eure Katze über die Tastatur gelaufen ist</div></li><li><div>schreibt nicht zu schnell hintereinander, besonders nicht dasselbe</div></li><li><div>verlagert die Diskussion, wenn sich jemand gestört fühlt</div></li><li><div>Diese Liste ist nicht vollständig. Mit dem gesunden Menschenverstand sollte es eigentlich möglich sein, sich die nicht aufgeführten Punkte zu denken.</div></li></ul><div>So - nach den ganzen "lass-es-bessers" noch ein paar Überlebenstips:</div><ul><li><div>beachte die oben stehenden Punkte ;-)</div></li><li><div>es macht sich immer gut, beim Reinkommen mal zu grüssen</div></li><li><div>warte nicht, bis man/frau dich anspricht - werde selbst aktiv und gib deinen Senf dazu</div></li><li><div>es gibt meist kein allgemein anerkanntes Gesprächsthema - lies dich einfach rein</div></li><li><div>die frage "wer will chatten" ist eigentlich überflüssig in einem Chat (wir warten doch alle nur aufs Ufo ;-)</div></li><li><div>fang nich sofort mit den W-Fragen (woher, wie alt, weiblich oder männlich?) an - es stört einige Leute</div></li></ul><div>Problematisch für die Wächter und Oberwächter ist:</div><ul><li><div>"der nervt mich - schmeiss den mal raus" ist oft nicht nachvollziehbar, weil der WÄ oder OW die Vorgeschichte - die vielleicht ausserhalb des yChat stattgefunden hat - nicht kennt oder keinen Beweis dafür hat.</div></li></ul><hr><div><h2>Richtlinien für den gestressten WÄ und OW:</h2></div><ul><li><div>Du hast die Macht - aber mißbrauche sie nicht!</div></li><li><div>Leute, die ganz offensichtlich stören wollen und dabei den Chatbetrieb massiv behindern, sofort rausschmeissen! Kriterien dazu:</div><ul><li><div>Fluten des Chats</div></li><li><div>Wiederholung von Parolen</div></li><li><div>Exzessive Nutzung von zufälligen Buchstaben-/Zeichenfolgen</div></li><li><div>usw...</div></li></ul></li><li><div>Bei den anderen vorher noch eine Warnung aussprechen...</div></li><li><div>Nicht vergessen: auch für euch gelten die oben aufgeführten Regeln!</div></li><li><div>Vergabe von Raumbesetzer- und Wächterrechten:<br>(dies gilt für RB-Vergabe in der Cyberbar, WÄ allgemein)</div><ul><li><div>Um RB oder WÄ betteln wird schon mal gar nicht beachtet.</div></li><li><div>Wer WÄ wird, soll sichs verdienen - z.B. durch häufiges Helfen bei Neulingen.</div></li><li><div>Ein WÄ sollte schon öfter im Chat sein.</div></li><li><div>Oberwächter zu werden ist sehr schwierig. Frag gar nicht erst danach ;-)</div></li></ul></ul><div>Wer meint, von einem Wächter oder Oberwächter ungerecht behandelt worden zu sein (z.B. weil dieser wegen persönlichen Streitigkeiten rausschmeisst), richte seine Klage an einen Oberwächter oder direkt an den obersten Boss: Snooper (<a href="mailto:admin@ychat.de">admin@ychat.de</a>).</div>
\ No newline at end of file diff --git a/0.6.2/colors.sno b/0.6.2/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.6.2/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.6.2/config.pm b/0.6.2/config.pm new file mode 100644 index 0000000..52bc89e --- /dev/null +++ b/0.6.2/config.pm @@ -0,0 +1,333 @@ +# yChat - Copyright by Paul C. Bütow + +########################### Dieser Teil bestimmt die Standart-Variabeln. +##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.) +########################### +$admin = "Snooper"; # Chatadministrator +$uvl = "red_pepper"; # Die Unschuld vom Land +$mogeladmin = "Coke"; # Geheimer Administrator +$limit = 55; # Benutzerlimit +$datum = "09.08.01"; # Datum der letzten Änderung (ändern erwünscht) +$version = "0.6.2"; # Bitte Hauptversionsnummer nicht ändern +$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, geneva, verdana, helvetiva; font-size: 12px; color: #ffffff } + div.b { font-weight: bold; color: #ffa500 } + a { color: #ffffef; } + a:hover { color: #ffffff; } + p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; } +</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; background-color: #ffffff; 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"); + while(<FILE2PRINT>) { + print "$_\n"; + } + close FILE2PRINT; +} + +sub start_html { # Der HEADER einer HTML-Datei + print "<html><head><title>$title - $_[0]</title>$_[2]$style</head>"; + 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 = $room; + @rooms = ($room,$secroom) if ($room ne $secroom); + foreach $raum (@rooms) { + open(MSGFILE,">>data/msgs/$raum"); + print MSGFILE "!<;".time."<;!<;!<;$msg2post<;\n"; + close MSGFILE; + opendir(PID,"data/online/pids/$raum"); + my @pids = readdir(PID); + closedir(PID); + foreach(@pids) { + if (-f "data/online/pids/$raum/$_") { + kill USR1 => $_; + } + } + } + &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; + opendir(PID,"data/online/pids/$raum"); + my @pids = readdir(PID); + closedir(PID); + foreach(@pids) { + if (-f "data/online/pids/$raum/$_") { + kill USR1 => $_; + } + } + goto ENDPRV; + } + } + } +ENDPRV: +} + +sub log { # Protokollieren der Nachrichten etc. + my $msg2log = $_[0]; + my $js; + &zeit; + ($msg2log,$js) = split(/<script/, $msg2log); + 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 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"); + flock(ERROR, 2); + print ERROR "Alias: $alias TempID: $tmpid File. $0 PID: $$ Time: ".time." Message: $error_msg \n"; + close ERROR; + exit 0; +} + +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); + } else { + unlink("data/online/rooms/$raum/$benutzer"); + } + &zeit; + &post($raum,"<i><font color=ffffff>($hours:$min:$sec) $benutzer hat den Chat verlassen ... </font></i>"); + } + } + } + } + opendir(PIDS,"data/online/pids/$raum"); + my @pids = readdir(PIDS); + closedir(PIDS); + if ($raumleer == 1) { # Falls Raum leer ist => entf. + rmdir("data/online/rooms/$raum"); + unlink("data/online/rstat/$raum"); + unlink("data/online/rstat/$raum.away"); + unlink("data/msgs/$raum"); + foreach(@pids) { + if (-f "data/online/pids/$raum/$_") { + unlink("data/online/pids/$raum/$_"); + } + } + rmdir("data/online/pids/$raum"); + } else { + foreach(@pids) { + unless (kill 0 => $_) { + unlink("data/online/pids/$room/$_"); + } + } + } + } +} + +sub rm_alias { # Falls Benutzer offline gegangen ist + my($benutzer,$raum) = @_; + unlink("data/online/rooms/$raum/$benutzer"); + unlink("data/online/users/$benutzer"); + opendir TMPID, "data/online/tmpid"; + my @tmpid = readdir(TMPID); + close(TMPID); + foreach(@tmpid) { + unlink("data/online/tmpid/$_") if (/^$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++) { + chomp($rstat[$i]); + push(@rstat2,$rstat[$i]."\n") if ($rstat[$i] ne $r_alias); + } + open (RSTAT,">data/online/rstat/$rstatroom"); + flock(RSTAT, 2); + print RSTAT @rstat2; + close RSTAT; +} + +sub rm_away { # Benutzer als Raumbesetzer austragen + my ($a_alias,$rstatroom) = @_; + open (AWAY,"<data/online/rstat/$rstatroom.away"); + my @away = <AWAY>; + close AWAY; + my @away2; + foreach (@away) { + my @split = split(/<;/); + push(@away2, $_) if ($a_alias ne $split[0]); + } + open (AWAY,">data/online/rstat/$rstatroom.away"); + print AWAY @away2; + close AWAY; +} + +sub secure_checkid { # TmpID überprüfen + my ($alias2check) = $_[0]; + unless (-f "data/online/tmpid/$alias.$tmpid") { + &error("Falsche TempID!"); + } +} + +sub hierachie { # Chatter nach SU überprüfen. + open WA, "<data/wa"; + my @was = <WA>; + close WA; + foreach(@was) { + chomp; + if ($_ eq $_[0]) { + return "wa"; + } + } + open OW, "<data/ow"; + my @ows = <OW>; + close OW; + foreach(@ows) { + chomp; + if ($_ eq $_[0]) { + return "ow"; + } + } +} + +sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat + my ($alias,$room,$method) = @_; + open DATEI,"<data/online/rstat/$room"; + my @rstat = <DATEI>; + close DATEI; + if ($method eq "return_list") { + my @value; + for($i=2;$i<=$#rstat;$i++) { + push @value,$rstat[$i]; + } + return @value; + } + for($i=2;$i<=$#rstat;$i++) { + chomp($rstat[$i]); + if ($rstat[$i] eq $alias) { + return 1; + } + } +} + +sub prove_away { # Prüfen, ob Benutzer abgemeldet ist + my ($a_alias,$room,$method) = @_; + open(DATEI,"<data/online/rstat/$room.away"); + @away = <DATEI>; + close DATEI; + if ($method eq "return_list") { + my $away2; + foreach(@away) { + push @away2,split(/<; /); + } + return @away2; + } + my $alias, $away; + foreach(@away) { + if (/^$a_alias.*/) { + ($alias,$away) = split(/<; /); + chomp($away); + return $away; + } + } +} + +sub random_color { + my @digit = ("F","C","A","B",5..9); + my $dig1 = rand(@digit); + my $dig2 = rand(@digit); + my $dig3 = rand(@digit); + my $dig4 = rand(@digit); + my $dig5 = rand(@digit); + my $dig6 = rand(@digit); + return $digit[$dig1].$digit[$dig2].$digit[$dig3].$digit[$dig4].$digit[$dig5].$digit[$dig6]; +} + + +# sub debug { open DEBUG,">data/debug"; while(@_) { chomp; print DEBUG "$_\n"; } close DEBUG;}
\ No newline at end of file diff --git a/0.6.2/help.sno b/0.6.2/help.sno new file mode 100644 index 0000000..2bffa92 --- /dev/null +++ b/0.6.2/help.sno @@ -0,0 +1,62 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table border=1> +<tr><th><div>SU</div></th><th><div>Befehl</div></th><th><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. Wird gar keine Farbe angegeben, dann wird eine zufällige generiert!</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>Chat 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>/banip <font color=red>Alias</font></div></td><td><div>Die IP-Nummer von <font color=red>Alias</font> verbannen</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/rbanip ip://<font color=red>x.x.x.x</font></div></td><td><div>Die IP-Nummer <font color=red>x.x.x.x</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>/img</div></td><td><div>Versteckt/reaktiviert das eigene Superuser-Logo im Online-Frame</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>/o <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird aus dem Chat ausgeloggt!</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/sl <font color=red>Raum</font></div></td><td><div>Einen anderen <font color=ffa500>Raum</font> absperren</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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=ffa500>Raum</font> ein <font color=ffa500>Thema</font > geben</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 ausgeführt 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 ledeglich 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><br> + Nur Oberwächer können Logdateien der Cyberbar lesen!<br><br> + Oberwächter ernennt nur der Systemadministrator! +</div> +</body> +</html>
\ No newline at end of file diff --git a/0.6.2/htdocs.pl b/0.6.2/htdocs.pl new file mode 100644 index 0000000..f23c8d6 --- /dev/null +++ b/0.6.2/htdocs.pl @@ -0,0 +1,258 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +require config; +print $q->header; + +$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); + if (&hierachie($alias) eq "ow") { + &printfile($tmp,"Logdatei","blank"); + } +} elsif ($var eq "superuser_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + &secure_checkid($alias); + &superuser_html; +} elsif ($var eq "chatiquette_html") { + &printfile("chatiq.sno","Chatiquette"); + print $q->end_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; + &secure_checkid($alias); + &zeit; + &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffffff>$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")'>Optionen</a> + <a href='javascript:fenster("main2.pl?var=list_alias_html&alias=$alias&tmpid=$tmpid","Benutzerliste")'>Benutzer</a> + <a href='javascript:fenster("htdocs.pl?var=help_html&tmpid=$tmpid","Befehle")'>Befehle</a> + <a href='javascript:fenster("main2.pl?var=gb_html&alias=$alias&tmpid=$tmpid","Board")'>Board</a><br> + <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("stat.pl?&alias=$alias&tmpid=$tmpid","Statistik")'>Statistik</a> + <a href='javascript:fenster("htdocs.pl?var=chatiquette_html","Chatiquette")'>Chatiquette</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 + if (&hierachie($alias) 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 "; + my $hierachie = &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 @was, @ows; +if (hierachie eq "wa" || $hierachie eq "ow") { + open WA, "<data/wa"; + @was = <WA>; + close WA; + open OW, "<data/ow"; + @ows = <OW>; + close OW; +} else { + open WA, "<data/wa2"; + @was = <WA>; + close WA; + open OW, "<data/ow2"; + @ows = <OW>; + close OW; +} + 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. Versteckte Superuser können nur von anderen Superusern auf +dieser Liste eingesehen werden! +</div> +</body> +</html> +END +}
\ No newline at end of file diff --git a/0.6.2/index.pl b/0.6.2/index.pl new file mode 100644 index 0000000..055b878 --- /dev/null +++ b/0.6.2/index.pl @@ -0,0 +1,526 @@ +#!/usr/bin/perl + +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +require config; +print $q->header; + +$var = $q->param("var"); +$alias = $q->param("alias"); +$pw = $q->param("pw"); +$tmp = $q->param("tmp"); + +#exit 0 if ($ENV{'HTTP_USER_AGENT'} eq "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)"); + +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($var eq "chatiquette_html") { + &chatiquette_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +&check_online; +local $counter = undef; +open(COUNT,"<data/count"); + $counter = <COUNT>; +close COUNT; +$counter++; +open(COUNT,">data/count"); + flock(COUNT, 2); + print COUNT $counter; +close COUNT; +opendir(USERS,"data/online/users"); + my @users = readdir(USERS); +closedir(USERS); +opendir(REGISTRED,"data/user/options"); + local @registred = readdir(REGISTRED); +closedir(REGISTRED); +my ($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> + Benutzerlimit: $limit + <br><br> + Webmaster: <a href="mailto:mail\@paulbuetow.de">Paul C. Bütow</a> + <br><br> + Page: <a href="http://www.PaulBuetow.de">www.PaulBuetow.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 "autologout") { +print <<END; + <div> + Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 10 Minuten inaktiv. + <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> + Du wurdest aus dem Chat 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 ($tmp eq "logout") { +print <<END; + <div class=b> + ACHTUNG! + </div> + <div> + Du wurdest soeben aus dem Chat ausgeloggt! + <br> + Ursache hierfür mag sein, daß der Chat voll war und Du Dich nicht am + Geschehen beteiligt- und unnötige Chatkapazitäten in Anspruch + genommen hast. + <br> + Sorry! + </div> +END + } elsif ($tmp eq "full") { + print "<div class=b>ACHTUNG!</div><div>Der Chat ist leider voll! Bitte versuch Dich später noch mal einzuloggen!</div>"; + } 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> +END +if ($logtin > 0) { + print "<div>Folgende Personen sind eingeloggt:<br><font size='1'>"; + foreach(@users) { + print "$_ " if (-f "data/online/users/$_"); + } + print "</font></div>"; +} +print<<END; + </td> + </tr> + </table> + </center> +</body> +</html> +END + if (-d "data/online/rooms") { + } else { + mkdir "data/online/rooms", 0777; + } +} + + +sub chatiquette_html { +&start_html("Registration"); +print <<END; + <center> + <table width=500> + <tr> + <td> +END +open CHATIQ, "chatiq.sno"; + foreach(<CHATIQ>) { + last if (/^\n+$/); + print $_; + } +WEITER: +close CHATIQ; +print<<END; + </td> + </tr> + </table> + </center> +</body> +</html> +END +} + +sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers. + open(BAN,"<data/ban"); + my @ban = <BAN>; + close BAN; + foreach(@ban) { + chomp; + if ($_ eq "ip://".$ENV{'REMOTE_ADDR'}) { + $tmp = "banned"; + &login_html; + exit 0; + } + } +my $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 +} elsif ($reload eq "alias_length") { +print <<END; + <div class=b> + ACHTUNG! + </div> + <div> + Dein gewählter Benutername "$alias" enthält zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!! + </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. +opendir(USERS,"data/online/users"); + my @users = readdir(USERS); +closedir(USERS); + my $users = $#users; + my $hierachie = &hierachie($alias); + if ($users > $limit && $hierachie ne "wa" && $hierachie ne "ow") { + $tmp = "full"; + &login_html; + exit 0; + } + my $lognotexists = "true"; + opendir(USERDIR,"data/user/options"); + my @userdir = readdir(USERDIR); + closedir(USERDIR); + foreach $user (@userdir) { + if ($user eq $alias) { + if ($alias eq "Swesda" || $alias eq "ErausNRW") { + open SWESDA, ">>data/$alias"; + print SWESDA $ENV{'HTTP_USER_AGENT'}."\n"; + close SWESDA; + } + open(OPTIONS,"<data/user/options/$alias"); + my @options = <OPTIONS>; + close OPTIONS; + foreach(@options) { + chomp $_; + } + if ($options[0] eq $pw) { + open(BAN,"<data/ban"); + my @ban = <BAN>; + close BAN; + foreach(@ban) { + chomp; + if ($_ eq $alias || $_ eq "ip://".$ENV{'REMOTE_ADDR'}) { + if (-f "data/online/users/$admin") { + &zeit; + &post_prv($admin,"<font color=ffffff><font color=ffa500>$_</font> kann sich nicht einloggen (Ist verbannt)!!</font>"); + } + $tmp = "banned"; + &login_html; + exit 0; + } + } + if ($options[1] eq undef) { $col = &random_color;} + else { $col = $options[1]; } + if ($options[2] eq undef) { $secol = &random_color;} + else { $secol = $options[2];} + if ($options[3] eq undef) { $maxVerlauf = "10";} + else { $maxVerlauf = $options[3];} + if ($options[4] eq undef) { $verlaufOrder = "1";} + else {$verlaufOrder = $options[4];} + my @digit = (A..Z, a..z, 0..9, "-", "."); + my $num1 = rand(@digit); + my $num2 = rand(@digit); + my $num3 = rand(@digit); + my $num4 = rand(@digit); + my $num5 = rand(@digit); + my $num6 = rand(@digit); + my $num7 = rand(@digit); + my $num8 = rand(@digit); + my $num9 = rand(@digit); + my $num10 = rand(@digit); + $tmpid = $digit[$num1].$digit[$num2].$digit[$num3].$digit[$num4].$digit[$num5].$digit[$num6].$digit[$num7].$digit[$num8].$digit[$num9].$digit[$num10]; + open TMPID, ">data/online/tmpid/$alias.$tmpid"; + print TMPID $alias; + close TMPID; + open IDENT, ">data/online/ident/$alias" ; + print IDENT "$ENV{'REMOTE_ADDR'}\n$tmpid\n$ENV{'HTTP_USER_AGENT'}"; + close IDENT; + open LASTLOGIN, ">data/user/lastlogin/$alias"; + print LASTLOGIN time; + close LASTLOGIN; + &frameset_html; + exit 0; + } 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 "") { + goto CREATE if ($alias =~ /[-]/ && $alias !~ /\W/); + &create_alias_html("alias_prohibited");; + exit 0; + } elsif ($pw ne $tmp) { + &create_alias_html("pw_wrong"); + exit 0; + } elsif (length($alias) >= 15) { + &create_alias_html("alias_length"); + exit 0; + } +CREATE: + opendir(USERDIR,"data/user/options"); + my @user = readdir(USERDIR); + close USERDIR; + foreach $user (@user) { + if ($user eq $alias) { + &create_alias_html("alias_exists"); + 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=ffffff>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>"); + &login_html; +} + +sub frameset_html { +print <<END; +<html> + <head> + <title> + $title - Powered by CXG - Chatters of the next generation + </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&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" scrolling="no"> + </frameset> +</frameset> +</html> +END +}
\ No newline at end of file diff --git a/0.6.2/input.pl b/0.6.2/input.pl new file mode 100644 index 0000000..3960501 --- /dev/null +++ b/0.6.2/input.pl @@ -0,0 +1,204 @@ +#!/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"); +$maxVerlauf = $q->param("maxVerlauf"); +$verlaufOrder = $q->param("verlaufOrder"); + +if ($maxVerlauf eq undef) { $maxVerlauf = "10";} +if ($verlaufOrder eq undef) { $verlaufOrder = "1";} + +if ($tmp eq "login") { + &zeit; + if ($alias ne 'Snooper'){ + &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat den Chat betreten ...</font></i>"); + } else { + &post($room,"<i><font color=ffffff>($hours:$min:$sec) Der Snooper hat den Chat betreten ...</font></i>"); + } +} + +print <<END; +<html> +<head> +<script language="JavaScript"><!-- + +// Einstellungsvariablen +maxVerlauf = $maxVerlauf; // Anzahl der Einträge des Verlaufs +maxPreview = 20; // Zeichenlänge der Verlaufsvorschau +verlaufOrder = $verlaufOrder; // 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.msg.focus(); // Fukus in das Eingabeform + document.inf.msg.select(); // Text im Eigabeform markieren + document.inf.submit(); // Formular absenden + 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 ("main.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 ("main.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" maxlength="300" 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 + +&rm_away($alias,$room);
\ No newline at end of file diff --git a/0.6.2/main.pl b/0.6.2/main.pl new file mode 100644 index 0000000..20a469e --- /dev/null +++ b/0.6.2/main.pl @@ -0,0 +1,985 @@ +#!/usr/bin/perl +# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+$q = new CGI;
+print $q->header();
+
+$alias = $q->param("alias");
+$tmpid = $q->param("tmpid");
+$mogeladmin ="Coke";
+
+{
+ unless (-f "data/online/tmpid/$alias.$tmpid") {
+ require config;
+ &error("Falsche TempID !");
+ }
+}
+
+$room = $q->param("room");
+$tmp = $q->param("tmp");
+
+
+ $col = $q->param("col");
+ $secol = $q->param("secol");
+ $rmsg = \$q->param("msg");
+ +unless (-e "data/online/rooms/$room/$alias") {
+ require config;
+ &post_prv($alias,"<font color=ffffff>Du befindest Dich nicht im Raum \"<font color=ffa500>$room</font>\" und kannst dort auch keine Nachrichten posten!</font>");
+ &reload_html;
+} elsif (length($$rmsg) > 300) {
+ require config;
+ &post_prv($alias,"<font color=ffffff>Deine Nachricht enthält zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>");
+ &reload_html;
+}
+
+if ($tmp eq "away") {
+ require config;
+ &rm_away($alias,$room);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat sich zurück gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+}
+
+if ($q->param('var') eq "change_colors") {
+ &reload_html("change_colors")
+}
+
+$$rmsg =~ s#<#<\;#g;
+
+if (substr($$rmsg,0,1) ne "/") {
+ &prove_color($alias,$col); &prove_color($alias,$secol);
+ open MSGFILE,">>data/msgs/$room";
+ unless ($$rmsg =~ s#/me/#<i>$alias</i>#g || $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g) {
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b><;\n";
+ } else {
+ $$rmsg =~ s#/me/#<i>$alias</i>#g;
+ $$rmsg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ print MSGFILE "!<;".time."<;!<;!<;<b><font color=$secol>$$rmsg</font></font></b><;\n";
+ }
+ close MSGFILE;
+ opendir PID,"data/online/pids/$room";
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$room/$_") {
+ kill USR1 => $_;
+ }
+ }
+ require config;
+ &log("<b><font color=$col>$alias: <font color=$secol>$$rmsg</font></font></b>") if ($room eq "Cyberbar");
+ &reload_html;
+} else {
+ require config;
+ &cmd($$rmsg);
+}
+
+sub reload_html { # Wird neugeladen, wenn eine Nachricht getextet wird!
+ my ($action,$whisper) = @_;
+ 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';";
+ if ($whisper eq "keep-alive") {
+ print "</script></body</html>";
+ goto KEEPALIVE;
+ }
+ 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" && $tmp eq "autologout") {
+ print "open('index.pl?tmp=autologout','_top');";
+ &rm_alias($alias,$room);
+ } elsif ($action eq "quit") {
+ print "open('index.pl?tmp=quit','_top');";
+ &rm_alias($alias,$room);
+ }
+ print "parent.input.document.inf.tmp.value = 'notaway';" if ($tmp eq "away");
+ print "</script></head><body bgcolor='$col'>";
+ print $q->end_html;
+ exit 0;
+}
+
+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") {
+ unless (&hierachie($alias) eq "ow") {
+ &post_prv($alias,"<font size=2 color=ffffff>Der Raum \"<font color=ffa500>$newroom</font>\" ist leider abgesperrt!</font>");
+ &reload_html;
+ }
+ }
+ 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) $alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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) 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) $alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ...</font></i>");
+ open(MSGFILE,">>data/msgs/$room");
+ flock(MSGFILE, 2);
+ print MSGFILE "$alias<;$tmpstamp<;!<;!<;<i><font color=ffffff>($hours:$min:$sec) Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i><;\n";
+ close MSGFILE;
+ }
+ unlink("data/online/rooms/$oldroom/$alias");
+ &rm_rstat($alias,$oldroom);
+ &check_online;
+ opendir(PID,"data/online/pids/$raum");
+ my @pids = readdir(PID);
+ closedir(PID);
+ foreach(@pids) {
+ if (-f "data/online/pids/$raum/$_") {
+ kill USR1 => $_;
+ }
+ }
+}
+
+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 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. Bütow (2000 - 2001).</font>");
+ &reload_html;
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $away_msg = $away_msg." ".$cmd[$i];
+ }
+ &zeit;
+ my $js = "<script language='JavaScript'>parent.online.location.reload();</script>";
+ if ($tmp ne "autoaway") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias meldet sich ab (<font color=ffa500>$away_msg</font> ) ...</i></font>$js");
+ } else {
+ $away_msg = " $alias wurde vom System abgemeldet ...";
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec)$away_msg</i></font>$js");
+ }
+ open AWAY,">>data/online/rstat/$room.away";
+ flock AWAY, 2;
+ print AWAY "$alias<;$away_msg\n";
+ close AWAY;
+ &reload_html("away");
+#############>- 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;
+#############>- FARBEN WECHSELN -<
+ } elsif ($cmd eq "col") {
+ if ($cmd[1] ne undef) {
+ &prove_color($alias,$cmd[1],1);
+ $col = $cmd[1];
+ my $tmpsecol = $cmd[2];
+ my $length = length($tmpsecol);
+ if ($tmpsecol eq "" || $length < 6 || $length > 6) {
+ $secol = $col
+ } else {
+ $secol = $tmpsecol;
+ }
+ } else {
+ $col = &random_color;
+ $secol = &random_color;
+ }
+ open OPTIONS,"<data/user/options/$alias";
+ my @options = <OPTIONS>;
+ close OPTIONS;
+ open OPTIONS,">data/user/options/$alias";
+ print OPTIONS $options[0]."".$col."\n".$secol;
+ close OPTIONS;
+ &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("change_colors");
+#############>- AKTUELLES DATUM UND URZEIT AUSGEBEN -<
+ } elsif ($cmd eq "date") {
+ &zeit;
+ &post_prv("$alias","<font color=ffffff>Heute ist der $day.$month. Jahr $year. Es ist genau $hours:$min Uhr und $sec Sekunden.</font>");
+ &reload_html;
+#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
+ } elsif ($cmd eq "j") {
+ if ($cmd[1] =~ /\W/ || $cmd[1] eq "") {
+ &post_prv($alias,"<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> enthält illegale Zeichen!</font>");
+ &reload_html;
+ } else {
+ &change_room("j",$cmd[1],$room);
+ &reload_html("change_room");
+ }
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ my $me_msg;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ $me_msg =~ s#/me/#<i>$alias</i>#g;
+ $me_msg =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if ($cmd eq "m") {
+ &post($room,"<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>");
+ } else {
+ &post($room,"<b><font color=$col><i>$alias</i> $me_msg</font></b>");
+ }
+ &reload_html;
+#############>- 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 color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>");
+ &zeit;
+ open MEMO,">>data/user/memos/$alias2memo";
+ print MEMO "<font 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;
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>");
+ &reload_html;
+#############>- 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 / 3600));
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &zeit;
+ if ($tmp ne "autologout") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias loggt sich aus dem Chat aus ... </font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias wurde vom System automatisch ausgeloggt ... </font></i>");
+ }
+ &reload_html("quit");
+#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -<
+ } elsif ($cmd eq "rmgb") {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias löscht das eigene Gästebuch ...</font></i>");
+ unlink("data/user/gbooks/$alias");
+ &reload_html;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my $msg2scream;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ $msg2scream =~ s#ä#Ä#g; $msg2scream =~ s#ö#Ö#g; $msg2scream =~ s#ü#Ü#g; $msg2scream = "\U$msg2scream";
+ &post($room,"<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>");
+ &reload_html;
+#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGElOGGT 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";
+ my $lastlogin = <LASTLOGIN>;
+ close LASTLOGIN;
+ my $timestamp = sprintf("%.2f",((time() - $lastlogin) / 3600));
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> hat sich seit der Einführung dieses Befehls noch nie eingeloggt!</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>");
+ }
+ &reload_html;
+#############>- 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 color=ffffff>Der aktuelle Raum: $room $theme $door ($nr) : <font color=ffa500>$personen</font></font>");
+ &reload_html;
+#############>- 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 color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: <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 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 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+ &reload_html;
+#############>- 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" && $user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<font color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>");
+ } else {
+ &change_room("ju",$raum,$room,$alias2search);
+ }
+ &reload_html("change_room");
+ }
+ }
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2search <font color=ffffff> ist nicht eingeloggt !</font></font>");
+ &reload_html;
+#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -<
+ } elsif ($cmd eq "l") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") {
+ open RSTAT, "data/online/rstat/$room";
+ my @r_stat = <RSTAT>;
+ close RSTAT;
+ my $lock = "0\n";
+ &zeit;
+ if ($room eq "Cyberbar" || $room eq "Wired") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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) $alias sperrt den Raum ab ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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";
+ flock RSTAT, 2;
+ print RSTAT $lock;
+ close RSTAT;
+ }
+ &reload_html;
+ }
+#############>- RAUMBESETZER ERNENNEN -<
+ } elsif ($cmd eq "su") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $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;
+ if (prove_besetzer($alias2su,$room) == 1 || &hierachie($alias2su) eq "wa" || &hierachie($alias2su) eq "ow") {
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>");
+ &reload_html;
+ }
+ open RSTAT,">>data/online/rstat/$room";
+ flock(RSTAT, 2);
+ print RSTAT $alias2su."\n";
+ close RSTAT;
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verleiht \"$alias2su\" Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ &reload_html;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>");
+ &reload_html;
+ }
+#############>- RAUMBESETZER ENTNENNEN -<
+ } elsif ($cmd eq "rsu") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2rsu = $cmd[1];
+ open(DATEI,"<data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ if (prove_besetzer($alias2rsu,$room) == 1) {
+ &rm_rstat($alias2rsu,$room);
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2rsu <font color=ffffff>ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !</font></font>");
+ }
+ &reload_html;
+ }
+#############>- RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "t") {
+ my $hierachie = &hierachie($alias);
+ if (prove_besetzer($alias,$room) == 1 || $hierachie eq "wa" || $hierachie eq "ow") {
+ open RSTAT, "data/online/rstat/$room";
+ my @r_stat = <RSTAT>;
+ close RSTAT;
+ &zeit;
+ my $theme;
+ if ($cmd[1] ne undef) {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $theme = $theme." ".$cmd[$i];
+ }
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias gibt dem Raum das Thema (<font color=ffa500> $theme </font>) ...</font></i>");
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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]."\n";
+ }
+ open RSTAT,">data/online/rstat/$room";
+ print RSTAT $theme;
+ close RSTAT;
+ &reload_html;
+ }
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN -<
+ } elsif ($cmd eq "ban" || $cmd eq "banip") {
+ my $hierachiealias = &hierachie($alias);
+ if ($hierachiealias eq "wa" || $hierachiealias eq "ow") {
+ my $alias2ban = $cmd[1];
+ my $hierachie = &hierachie($alias2ban);
+ open BAN,"<data/ban";
+ my @ban = <BAN>;
+ close BAN;
+ if ($cmd[1] eq undef) {
+ my $nr = @ban;
+ my $banned;
+ foreach(@ban) {
+ chomp($_);
+ $banned .= " $_";
+ }
+ &post_prv("$alias","<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$banned</font></font>");
+ &reload_html;
+ } elsif (-f "data/user/options/$alias2ban") {
+ if ($hierachie eq "wa") {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist Wächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ } elsif ($hierachie eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist Oberwächter und kann nicht verbannt werden!</font></font>");
+ &reload_html;
+ }
+ if ($cmd eq "ban") {
+ if (add_entry($alias2ban,"ban") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias verbannt \"$alias2ban\" aus dem Chat ...</font></i>");
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>");
+ }
+ } elsif ($hierachie ne "ow" && $hierachie ne "wa") {
+ if (-f "data/online/ident/$alias2ban") {
+ open DATEI, "<data/online/ident/$alias2ban";
+ my $ipnr = <DATEI>;
+ close DATEI;
+ chomp($ipnr);
+ if (add_entry("ip://$ipnr","ban") == 1) {
+ &zeit;
+ &post_prv($alias,"<font color=ffffff>IP-Nummer von <font color=ffa500>$alias2ban</font> ($ipnr) wurde verbannt! ...</font></i>");
+ } else {
+ &post_prv("$alias","<font color=ffffff>Die IP-Nummer <font color=ffa500>$ipnr</font> von $alias2ban ist bereits verbannt!</font></font>");
+ }
+ &reload_html;
+ } else {
+ &post_prv("$alias","<font color=ffffff>Die IP-Nummer von <font color=ffa500>$alias2ban </font>kann nicht verbannt werden, da Benutzer nicht eingeloggt ist!</font></font>");
+ &reload_html;
+ }
+ } else {
+ goto ENDCMD;
+ }
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2ban $ipnr<font color=ffffff>kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>");
+ &reload_html;
+ }
+#############>- ALIAS ENTBANNEN -<
+ } elsif ($cmd eq "rban" || $cmd eq "rbanip") {
+ my $hierachie = &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 (&rm_entry($alias2rban,"ban") == 1) {
+ if ($alias2rban =~ /ip:/) {
+ &post_prv($alias,"<font color=ffffff>Die IP-Nummer <font color=ffa500>$alias2rban</font> wurde aus der Banliste ausgetragen!</font></font>");
+ } else {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias entbannt \"$alias2rban\" ...</font></i>");
+ }
+ &reload_html;
+ }
+ }
+ &post_prv($alias,"<font color=ffa500>$alias2rban <font color=ffffff>ist nicht verbannt!</font></font>");
+ &reload_html;
+ }
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "ip") {
+ my $hierachie = &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";
+ my $ipnr = <DATEI>;
+ close DATEI;
+ chomp($ipnr);
+ &post_prv("$alias","<font color=ffa500>$_<font color=ffffff> hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ &reload_html;
+ }
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k" || $cmd eq "o") {
+ my $hierachie = &hierachie($alias);
+ if ($hierachie eq "wa" || $hierachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ if (-f "data/online/users/$alias2kick") {
+ 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) {
+ my $hierachie2 = &hierachie($alias2kick);
+ if ($hierachie2 eq "ow" && $alias ne $admin) {
+ &post_prv("$alias","<font color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt/ausgeloggt\" werden !</font></font>");
+ } elsif ($hierachie2 eq "wa" && $hierachie ne "ow") {
+ &post_prv("$alias","<font color=ffa500>$alias2kick <font color=ffffff> ist Wächter und kann nicht \"gekickt/ausgeloggt\" werden !</font></font>");
+ } else {
+ if ($cmd eq "k") {
+ &post_prv("$alias2kick","<script language=\"JavaScript\">window.open(\"index.pl?tmp=kick\",\"_top\");</script>");
+ } else {
+ &post_prv("$alias2kick","<script language=\"JavaScript\">window.open(\"index.pl?tmp=logout\",\"_top\");</script>");
+ }
+ $_ = undef if ($room eq $raum);
+ &zeit;
+ if ($cmd eq "k") {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$raum);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias loggt \"$alias2kick\" aus dem Chat aus ...</font></i>",$raum);
+ }
+ rm_alias($alias2kick,$raum);
+ check_online;
+ }
+ &reload_html;
+ }
+ }
+ }
+ }
+ &post_prv("$alias","<font color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>");
+ &reload_html;
+ }
+#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -<
+ } elsif ($cmd eq "kill") {
+ if (hierachie($alias) eq "ow") {
+ my $alias2kill = $cmd[1];
+ if (-f "data/user/options/$alias2kill") {
+ my $hierachie = &hierachie($alias2kill);
+ if ($hierachie eq "ow") {
+ &post_prv($alias,"<font 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 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) $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");
+ &rm_entry($alias2kill,"ban");
+ open(DEL, ">>data/kill");
+ print DEL "($day.$month.$year $hours:$min:$sec) $alias2kill wurde von $alias gekillt\n";
+ close DEL;
+ }
+ } else {
+ &post_prv("$alias","<font color=ffa500>$alias2kill <font color=ffffff> existiert nicht in der DB und kann nicht \"gekillt\" werden !</font></font>");
+ }
+ &reload_html;
+ }
+#############>- EINEN ANDEREN RAUM AUF-/ABSPERREN -<
+ } elsif ($cmd eq "sl") {
+ my $hierachie = &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) $alias sperrt den Raum \"$sl_room\" von aussen ab ...</font></i>",$sl_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 color=ffffff>Der Raum <font color=ffa500>$sl_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- IN EINEN ANDEREN RAUM HINEINRUFEN -<
+ } elsif ($cmd eq "ss") {
+ my $hierachie = &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) $alias ruft in den Raum \"$ss_room\" hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>",$ss_room);
+ &reload_html;
+ } else {
+ &post_prv($alias,"<font color=ffffff>Der Raum <font color=ffa500>$ss_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- EINEN ANDEREN RAUM EIN THEMA GEBEN -<
+ } elsif ($cmd eq "st") {
+ my $hierachie = &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) $alias gibt dem Raum \"$st_room\" das Thema (<font color=ffa500> $theme </font>) ...</font></i>",$st_room);
+ } else {
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $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 color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME &postEN -<
+ } elsif ($cmd eq "sys") {
+ my $hierachie = &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;
+ }
+#############>- EIGENES SUPERUSER-LOGO VERSCHWINDEN/AUFTAUCHEN LASSEN -<
+ } elsif ($cmd eq "img") {
+ my $hierachie = &hierachie($alias); + if ($hierachie eq "wa" || $hierachie eq "ow") {
+ if(&rm_entry($alias, $hierachie."2")) { + &post_prv("$alias","<font color=ffffff>Deine Superuserlogo wurde versteckt!</font></font>");
+ } else { + &post_prv("$alias","<font color=ffffff>Deine Superuserlogo wurde wieder sichtbar gemacht!</font></font>");
+ &add_entry($alias, $hierachie."2"); + } + &reload_html;
+ } +#############>- ALIAS ZUM WÄCHTER ERNNENNEN -<
+ } elsif ($cmd eq "wa") {
+ if (hierachie($alias) eq "ow") {
+ if (-f "data/user/options/$cmd[1]") {
+ if (hierachie($cmd[1]) eq "ow") {
+ &post_prv("$alias","<font color=ffa500>$cmd[1] <font color=ffffff>ist bereits als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>");
+ } elsif (!add_entry($cmd[1],"wa")) {
+ &post_prv("$alias","<font color=ffa500>$cmd[1] <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>")
+ } else {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias ernennt \"$cmd[1]\" zum Wächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ &add_entry($cmd[1],"wa2"); + }
+ &reload_html;
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2wa <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- ALIAS DIE WÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "rwa") {
+ if (hierachie($alias) eq "ow") {
+ if (&rm_entry($cmd[1],"wa") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat \"$cmd[1]\" vom Wächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ &rm_entry($cmd[1],"wa2"); + } else {
+ &post_prv($alias,"<font color=ffa500>$cmd[1] <font color=ffffff>ist kein Wächter und können die Wächterrechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+ }
+#############>- ADMINISTRATORBEFEHLE -<
+ } elsif ($alias eq $admin || $alias eq $mogeladmin) {
+#############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -<
+ if ($cmd eq "ow") {
+ if (-f "data/user/options/$cmd[1]") {
+ if (add_entry($cmd[1],"ow") == 1) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias ernennt \"$cmd[1]\" zum Oberwächter ...</font></i>");
+ &add_entry($cmd[1],"ow2"); + } else {
+ &post_prv("$alias","<font color=ffa500>$cmd[1] <font color=ffffff>ist bereits als Oberwächter eingetragen!</font></font>");
+ }
+ } else {
+ &post_prv($alias,"<font color=ffa500>$alias2wa <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ }
+ &reload_html;
+#############>- ALIAS DIE OBERWÄCHTERRECHTE ENTZIEHEN -<
+ } elsif ($cmd eq "row") {
+ if (&rm_entry($cmd[1],"ow") ne undef) {
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat \"$cmd[1]\" vom Oberwächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>");
+ &rm_entry($cmd[1],"ow2"); + } else {
+ &post_prv($alias,"<font color=ffa500>$cmd[1] <font color=ffffff>ist kein Oberwächter und können die Rechte nicht entzogen werden!</font></font>");
+ }
+ &reload_html;
+#############>- PASSWORD EINES BENUTZERS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "pw") {
+ my $pw2show = $cmd[1];
+ if (-f "data/user/options/$pw2show") {
+ open PW,"<data/user/options/$pw2show";
+ my @pw = <PW>;
+ close PW;
+ chomp($pw[0]);
+ &post_prv($alias,"<font color=ffa500>$pw2show <font color=ffffff> hat das Passwort \"$pw[0]\" !</font></font>");
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$pw2show <font color=ffffff> existiert nicht in der Benutzerdatenbank !</font></font>");
+ &reload_html;
+#############>- IDENT-DATEI EINES BENUTZERS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "id" || $cmd eq "agent") {
+ my $id2show = $cmd[1];
+ if (-f "data/online/ident/$id2show") {
+ open ID,"<data/online/ident/$id2show";
+ my @id = <ID>;
+ close ID;
+ if ($cmd eq "id") {
+ chomp($id[1]);
+ &post_prv($alias,"<font color=ffa500>$id2show <font color=ffffff> hat die Temp-ID \"$id[1]\" !</font></font>");
+ } else {
+ chomp($id[2]);
+ &post_prv($alias,"<font color=ffa500>$id2show <font color=ffffff> verwendet \"$id[2]\" !</font></font>");
+ }
+ &reload_html;
+ }
+ &post_prv($alias,"<font color=ffa500>$id2show <font color=ffffff> ist nicht eingeloggt !</font></font>");
+ &reload_html;
+#############>- SYSTEMMELDUNG posten -<
+ } elsif ($cmd eq "cool") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ &zeit;
+ &post($room,"<i><font color=ffffff>($hours:$min:$sec) $msg2post</font></i>");
+ &reload_html;
+#############>- REVERSE -<
+ } elsif ($cmd eq "rev") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $msg2post = reverse($msg2post);
+ &post($room,"<b><font color=$col>$alias: <font color=$secol>$msg2post</font></font></b>");
+ &reload_html;
+ }
+ }
+ENDCMD:
+#############>- FLÜSTERN ( Auch mit '/' ) -<
+ my ($alias2post,$msg2post,$action);
+ &prove_color($alias,$col,1); &prove_color($alias,$secol,1);
+ if ($cmd eq "msg") {
+ $alias2post = $cmd[1];
+ for ($i=2; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $action = "whisper";
+ } elsif ($cmd eq "") {
+ $alias2post = $q->param('whisper');
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ } else {
+ $alias2post = $cmd;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ $action = "whisper";
+ }
+ $msg2post =~ s#/me/#<i>$alias</i>#g;
+ $msg2post =~ s#/m/#<i><font color=$col>$alias</font></i>#g;
+ if (-f "data/online/users/$alias2post") {
+ &post_prv($alias,"<b><font color=$col><i>Zu $alias2post geflüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &post_prv($alias2post,"<b><font color=$col><i>$alias flüstert:</i> <font color=$secol>$msg2post</font></font></i></b>");
+ &reload_html($action,$alias2post);
+ }
+ &post_prv($alias," <font color=ffffff>Benutzer oder Befehl <font color=ffa500>$alias2post</font> ist nicht anwesend/verfügbar!</font></font>");
+ &reload_html;
+}
+#############>- ENDE DER CHATBEFEHLE -<
+
+sub rm_entry {
+ my ($alias,$file) = @_;
+ open ENTRY, "<data/$file";
+ my @entry = <ENTRY>;
+ close ENTRY;
+ my @new;
+ foreach(@entry) {
+ push @new,$_ if ($alias."\n" ne $_);
+ }
+ if (@entry != @new) {
+ open ENTRY, ">data/$file";
+ flock ENTRY, 2;
+ print ENTRY @new;
+ close ENTRY;
+ return 1;
+ } else {
+ return;
+ }
+}
+
+sub add_entry {
+ my ($alias,$file) = @_;
+ open ENTRY, "<data/$file";
+ my @entry = <ENTRY>;
+ close ENTRY;
+ foreach(@entry) {
+ chomp;
+ if ($alias eq $_) {
+ return;
+ }
+ }
+ open ENTRY, ">>data/$file";
+ flock ENTRY, 2;
+ print ENTRY $alias."\n";
+ close ENTRY;
+ return 1;
+}
+
+sub prove_color {
+ my ($alias,$color,$req) = @_;
+ my $length = length($color);
+ if ($length > 6 || $length < 6) {
+ require config if (req != 1);
+ &post_prv($alias,"<font color=ffffff>Ungültige Hexadezimalfarbe.</font>");
+ &reload_html;
+ }
+}
diff --git a/0.6.2/main2.pl b/0.6.2/main2.pl new file mode 100644 index 0000000..747291e --- /dev/null +++ b/0.6.2/main2.pl @@ -0,0 +1,624 @@ +#!/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"); + &secure_checkid($alias); + $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; + $msg =~ s#\n#<br>#g; + my $tmpath = ""; + if ($id eq "y") { + $tmpath = "data/guestbook"; + } else { + $tmpath = "data/user/gbooks/$tmp"; + } + open(GB,"$tmpath"); + my @gb = <GB>; + close GB; + pop(@gb) if ($#gb > 99); + my @newdatei = "<br><b>$alias schrieb am $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 color=ffffff>$alias hat soeben einen Pin in Dein Profil 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; + my $nr = 1; + if ($alias ne $tmp) { + foreach(@datei) { + print "<br>Eintrag # $nr: $_"; + $nr++; + } + } 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> + <br> + Eintrag # $nr: + $datei[$i] + </div> + </td> + </tr> +END +$nr++; +} +print <<END; + </table> + <table> + <tr> + <td> + <font color=ffffff> + <input type="submit" value="Markierten Eintrag löschen"> + </font> + </td> + <td> + <font color=ffffff> + <input type="reset" value="Markierung 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; + foreach(@data) { + chomp $_; + } + if ($method eq "edit_options_html") { + if ($message eq "edit_options_ok") { + &zeit; + &post($room,"<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Chateinstellungen geändert ...</font></i>"); +print <<END; +<script language="JavaScript"> + open("main.pl?var=change_colors&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","reload"); +</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> + <hr> + <div>Einstellungen für den Nachrichten-Verlauf</div> + <table> + <tr> + <td> + <br> + <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div> + <font color=ffffff> + <select name="maxVerlauf" size="1"> + <option value="$data[3]">$data[3] +END +for($i=1;$i<=50;$i++) { + print "<option value=\"$i\">$i"; +} +print<<END; + </select> + </font> + </td> + </tr> + <tr> + <td> + <br> +<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div> + <font color=ffffff> + <select name="verlaufOrder" size="1"> + <option value="$data[4]">Bisherige Einstellung ($data[4]) + <option value="0">Neue Verlaufnachrichten oben (0) + <option value="1">Neue Verlaufnachrichten unten (1) + </select> + </font> + </td> + </tr> + </table> +<br> + <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div> + <hr> + <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 markieren 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") { + &zeit; + &post($room,"<i><font color=ffffff>($hours:$min:$sec) $alias hat das Profil geändert ...</font></i>"); +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") { + my $url = $q->param('homepage'); + $url =~ s#^http://*##; + open(PROFILE,">data/user/profiles/$alias"); + my $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"."http://$url\n".$q->param('weiteres'); + $profile =~ s#<#<\;#g; + print PROFILE $profile; + close PROFILE; + &edit_html("edit_profile_html","edit_profile_ok"); + } elsif ($method eq "edit_options") { + if ($id ne $tmp) { + &edit_html("edit_options_html","edit_pw_wrong"); + exit; + } + open(OPTIONS,">data/user/options/$alias"); + my $options = $id."\n".$col."\n".$secol."\n".$q->param("maxVerlauf")."\n".$q->param("verlaufOrder"); + $options =~ s#<#<\;#g; + print OPTIONS $options; + close OPTIONS; + &edit_html("edit_options_html","edit_options_ok"); + } +}
\ No newline at end of file diff --git a/0.6.2/online.pl b/0.6.2/online.pl new file mode 100644 index 0000000..6d64f1b --- /dev/null +++ b/0.6.2/online.pl @@ -0,0 +1,133 @@ +#!/usr/bin/perl + +# 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"); + +my @away = &prove_away($alias,$room,"return_list"); + +for ($i=0;$i<=$#away;$i+=2) { + goto DONOTCOUNT if ($away[$i] eq $alias); +} + +open(DATEI,"<data/online/users/$alias"); + my $oldstamp = <DATEI>; +close DATEI; +if ($oldstamp > (time - 40)) { + 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; +} +DONOTCOUNT: + +unless (-d "data/online/rooms/$room") { + mkdir "data/online/rooms/$room", 0777; +} +unless (-f "data/online/rstat/$room") { + open(DATEI,">data/online/rstat/$room"); # Raumbesetzerstatus setzen + print DATEI "0\n\n$alias\n"; + close DATEI; +} + +open(DATEI,">data/online/users/$alias"); + print DATEI time; +close DATEI; +open(DATEI,">data/online/rooms/$room/$alias"); + print DATEI time; +close DATEI; + +open(DATEI,"<data/online/prove"); + my $provetime = <DATEI>; +close DATEI; +&check_online if ($provetime < (time - 30)); + +print<<HEADER; +<html> + <head> + <meta http-equiv="refresh" content="20" URL="online.pl?room=$room&alias=$alias&tmpid=$tmpid"> + <style type="text/css"> + a { font-family: arial; font-size:11px; color: #ffffef; } + a:hover { color: #ffffff; } + </style> + <style type="text/css" media="all"> + a { text-decoration: none; } + a:hover { text-decoration:underline; } + </style> + </head> + <body bgcolor="#000000"> +HEADER + +opendir(ROOM,"data/online/rooms/".$room); + my @room = sort(readdir(ROOM)); +closedir(ROOM); + +my $chatter = $#room-1; +my @besetzer = &prove_besetzer(undef,$room,"return_list"); + +open WA, "<data/wa2"; + my @wa = <WA>; +close WA; +open OW, "<data/ow2"; + my @ow = <OW>; +close OW; + +print "<font size='1' color='ffffff' face='arial'>$room ($chatter):</font><table>"; + +foreach $online (@room) { + if (-f "data/online/rooms/$room/$online") { + for ($i=0;$i<=$#away;$i+=2) { + chomp $away[$i+1]; + if ($away[$i] eq $online) { + my $away = $away[$i+1]; + print "<tr><td><img title='$away' alt='$away' src='$gfxpath/away.gif'></td>"; + goto WEITER; + } + } + if ($online eq "red_pepper") { + print "<tr><td><img title='Die Unschuld vom Land' alt='Die Unschuld vom Land' src='$gfxpath/uvl.gif'></td>"; + goto WEITER; + } + if ($online eq $admin) { + print "<tr><td><img title='Administrator' alt='Administrator' src='$gfxpath/adm.gif'></td>"; + goto WEITER; + } + foreach(@ow) { + chomp; + if ($_ eq $online) { + print "<tr><td><img title='Oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>"; + goto WEITER; + } + } + foreach(@wa) { + chomp; + if ($_ eq $online) { + print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>"; + goto WEITER; + } + } + foreach(@besetzer) { + chomp; + if ($_ eq $online) { + print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>"; + goto WEITER; + } + } + print "<tr><td></td>"; +WEITER: + print "<td><a href='main2.pl?var=alias_html&alias=$alias&tmp=$online&tmpid=$tmpid' target='$online'>$online</a></td></tr>"; + } +} + +print "</table>", $q->end_html;
\ No newline at end of file diff --git a/0.6.2/ow.gif b/0.6.2/ow.gif Binary files differnew file mode 100644 index 0000000..b30e8f9 --- /dev/null +++ b/0.6.2/ow.gif diff --git a/0.6.2/push.pl b/0.6.2/push.pl new file mode 100644 index 0000000..cc5a2aa --- /dev/null +++ b/0.6.2/push.pl @@ -0,0 +1,116 @@ +#!/usr/bin/perl + +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +print $q->header; + +$alias = $q->param("alias"); +$tmpid = $q->param("tmpid"); + +{ + unless (-f "data/online/tmpid/$alias.$tmpid") { + require config; + &error("Falsche TempID !"); + } +} + +$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; +moves_interval = 4; +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>loading chat-engine ...</font><br> +END +sleep 1; +print "<font size=1 color=ffffff face=arial>loading in progress ...</font><br>"; +sleep 1; +print "<font size=1 color=ffffff face=arial><b>$alias</b>, welcome to <b>yChat</b>! :-)</font><br>"; + + +if (-f "data/user/memos/$alias") { + open(MEMOS,"<data/user/memos/$alias"); + my @memos = <MEMOS>; + close MEMOS; + my $memos; + foreach (@memos) { + $memos .= $_; + } + print $memos; + unlink("data/user/memos/$alias"); +} + +my $startime,$change_room,@flood; +OPENMSGFILE: +$change_room = 0; +$startime = time; + +if (-e "data/msgs/$room") { + open(MSGFILE,"<data/msgs/$room"); + unless (-d "data/online/pids") { + mkdir "data/online/pids", 0777; + } unless (-d "data/online/pids/$room") { + mkdir "data/online/pids/$room", 0777; + } + open(PID,">data/online/pids/$room/$pid"); + print PID time; + close PID; +} else { + sleep 1; + goto OPENMSGFILE; +} + +&sendmsgs; +while (-f "data/online/users/$alias") { + local $SIG{USR1} = \&sendmsgs; + goto OPENMSGFILE if ($change_room == 1); + sleep 15; + print "\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") { + unlink("data/online/pids/$room/$pid"); + $room = $action; + close MSGFILE; + $change_room = 1; + } + print "$message<br>\n" if ($change_room != 1); + push(@flood,$message); + if ($flood[0] eq $flood[1] && $flood[0] eq $flood[2] && $flood[0] eq $flood[3]) { + print "<i><font color=red> Jemand floodet den Chat !</font></i><br>\n"; + } + shift(@flood) if ($#flood > 2); + } + } + } + seek(MSGFILE, $curpos, 0); +} + +unlink("data/online/pids/$room/$pid");
\ No newline at end of file diff --git a/0.6.2/rb.gif b/0.6.2/rb.gif Binary files differnew file mode 100644 index 0000000..321341c --- /dev/null +++ b/0.6.2/rb.gif diff --git a/0.6.2/stat.pl b/0.6.2/stat.pl new file mode 100644 index 0000000..0cddb6e --- /dev/null +++ b/0.6.2/stat.pl @@ -0,0 +1,209 @@ +#!/usr/bin/perl -w +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +require config; + +my $var = $q->param('var'); +$alias = $q->param('alias'); +$tmpid = $q->param('tmpid'); + +print $q->header(); +&start_html("Statistiken"); +print $q->div("yChat Statistiken"), $q->hr, + $q->div( $q->a( { -href=>"stat.pl?var=ranking&alias=$alias&tmpid=$tmpid" }, "Rankings"), " | ", + $q->a( { -href=>"stat.pl?var=del&alias=$alias&tmpid=$tmpid" }, "Loginstatistiken"), " | ", + $q->a( { -href=>"stat.pl?var=stat&alias=$alias&tmpid=$tmpid" }, "DB-Statistik"), " | ", + $q->a( { -href=>"stat.pl?var=code&alias=$alias&tmpid=$tmpid" }, "Programmcode"), " | ", + $q->a( { -href=>"stat.pl?var=var&alias=$alias&tmpid=$tmpid" }, "Umgebungsvariablen"),), $q->hr; + +if ($var eq "ranking") { + + opendir(COUNTS, "data/user/counts"); + my @counts = readdir(COUNTS); + closedir(COUNTS); + + print "<div>"; + + my $nr_start = $q->param('start'); + my $nr_end = $q->param('end'); + my %online; + my $rank; + my $nr; + + foreach(@counts) { + if(-f "data/user/counts/$_" ) { + if (s#.online##g) { + open(TOTAL, "<data/user/counts/$_.online"); + my $total = <TOTAL>; + close TOTAL; + $online{sprintf("%.2f",($total / 3600))} = $_; + } + } + } + + print "<div>", $q->b("Rankings:"), $q->br, + "<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>"; + + if (!$nr_start) { + $nr_start = 1; + } if (!$nr_end) { + $nr_end = 20; + } + + foreach $wert (reverse(sort { $a <=> $b } keys %online)) { + $nr++; + if ($online{$wert} eq $alias) { + $rank = $nr; + last if ($nr > $nr_end); + } + next if ($nr < $nr_start || $nr > $nr_end); + print "<tr><td><font color='ffffff' size='1' face='arial'>".$nr."</font></td><td><font color='ffffff' size='1' face='arial'> ".$wert."h </font></td><td> <a href='main2.pl?var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n"; + } + print "</table>", $q->hr; + $nr_start -= 20; $nr_end -= 20; + print "Rankings von <a href='stat.pl?var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" if ($nr_start > 0); + $nr_start += 40; $nr_end += 40; + print "Rankings von <a href='stat.pl?var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...", + $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>"); + +} elsif ($var eq "del") { + + print "<div>", $q->b("Alte Benutzer löschen:"), $q->br, + "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gelöscht.", $q->br, $q->br; + + opendir(USER, "data/user/options"); + my @user = readdir(USER); + closedir(USER); + @user = sort(@user); + + my $i = 0; + my $j; + my $k = 0; + my $l = 0; + my $full = $q->param('tmp'); + + foreach(@user) { + if (-f "data/user/lastlogin/$_") { + open(LOGIN,"<data/user/lastlogin/$_"); + my $login = <LOGIN>; + close LOGIN; + $login = sprintf("%.2f",((time - $login) / 3600)); + $j++; + if (999 < $login && $login < 1440) { # 1440 = 60 Tage + $k++; + print $q->font( { -color=>"ffa500" }, $q->b( "$j($k) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef); + } elsif ($login < 48) { + $l++; + print $q->font( { -color=>"ffffef" }, $q->b( "$j($l) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef); + } elsif ($login < 1440) { + print "$j $_ Letztes Login vor: ".$login."h", $q->br, "\n" if ($full ne undef); + } else { + $k++; + &kill($_,$i++,$login); + } + } elsif (-f "data/user/options/$_") { + &kill($_,$i++); + } + } + print $q->hr if ($full ne undef); + print "</div>", $q->div( $q->b( + "$j Benutzer befinden sich in der Datenbank!", $q->br, + $q->font( { -color=>"ffffef" }, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br, + $q->font( { -color=>"ffa500" }, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br, + $q->font( { -color=>"ff0000" }, "$i Benutzer wurden gerade eben gelöscht!") ), $q->br, $q->br, + "PS: Jeder registrierte Benutzername wird nur einmal gezählt!" ); + print $q->br, $q->div( "(", $q->a( { -href=>"stat.pl?var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, "Vollständige Ansicht"), ")" ) if ($full eq undef); + +} elsif ($var eq "var") { + + print "<div>", $q->b("Server Umgebungsvariablen:"), $q->br, $q->br, + "Die Serverumgebungsvariablen können nur von Oberwächtern eingesehen werden!", $q->br, $q->br; + + if (&hierachie($alias) eq "ow") { + &secure_checkid($alias); + while(($key,$value) = each(%ENV)) { + print "$key = $value\n", $q->br; + } + } + + print "</div>"; + +} elsif ($var eq "stat") { + + print $q->div( $q->b("yChat-DB Statistik:") ), $q->br; + $files = 0; + $size = 0; + $directorys = 1; + &zaehle("data"); + $size = sprintf("%.2f", ($size/1048576)); + print $q->div( "Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys"); + + } elsif ($var eq "code") { + + print $q->div( $q->b("yChat Programmcode-Statistik:") ), $q->br; + + my ($zeilen,$size,$bytes,$files); + + opendir(DIR,"."); + my @dir = readdir(DIR); + closedir(DIR); + $dir = sort(@dir); + + foreach(@dir) { + if (/.+[pl]$/ || /.+[pm]$/) { + $bytes = (-s); + $size += $bytes; + open(PL, "<$_"); + my @pl = <PL>; + close PL; + local $nr = $#pl+1; + $zeilen += $nr; + $files++; + print $q->div("Datei $files: $nr Zeilen, $bytes Bytes"), $q->br, "\n"; + } + } +print $q->div( $q->b("Programmcode: $files Dateien, $zeilen Zeilen", $q->br, "Größe: $size Bytes") ); + +} + +print $q->end_html; + +sub zaehle { + local ($dir,$data) = @_; + $dir = "$dir/$data" if ($data ne undef); + opendir(DATA,$dir); + local @data = readdir(DATA); + closedir(DATA); + $files2 = 0; + foreach(@data) { + if (-f "$dir/$_") { + $files++; + $files2++; + $size += (-s "$dir/$_"); + } elsif (-d "$dir/$_" && $_ ne "." && $_ ne "..") { + $directorys++; + &zaehle($dir,$_); + } + } +} + +sub kill { + my ($rm,$nr,$login) = @_; + $login = "XXXXXX" if ($login eq undef); + print $q->font( { -color=>"ff0000" }, $q->b( "$j($nr) $rm Letztes Login vor: ".$login."h (wurde gelöscht)") ), $q->br, "\n"; + print "<font size='1'>"; + print "options " if unlink("data/user/options/$rm"); + print "profiles " if unlink("data/user/profiles/$rm"); + print "gbooks " if unlink("data/user/gbooks/$rm"); + print "counts " if unlink("data/user/counts/$rm"); + print "counts.online " if unlink("data/user/counts/".$rm.".online"); + print "lastlogin " if unlink("data/user/lastlogin/$rm"); + print "memos" if unlink("data/user/memos/$rm"); + print "</font>", $q->hr, "\n"; + &zeit; + open(DEL, ">>data/kill"); + print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n"; + close DEL; +}
\ No newline at end of file diff --git a/0.6.2/uvl.gif b/0.6.2/uvl.gif Binary files differnew file mode 100644 index 0000000..b9208d6 --- /dev/null +++ b/0.6.2/uvl.gif diff --git a/0.6.2/wa.gif b/0.6.2/wa.gif Binary files differnew file mode 100644 index 0000000..553984c --- /dev/null +++ b/0.6.2/wa.gif diff --git a/0.6.2/yIntro.swf b/0.6.2/yIntro.swf Binary files differnew file mode 100644 index 0000000..81d9015 --- /dev/null +++ b/0.6.2/yIntro.swf diff --git a/0.6.2/ySymbol.swf b/0.6.2/ySymbol.swf Binary files differnew file mode 100644 index 0000000..2b899bb --- /dev/null +++ b/0.6.2/ySymbol.swf diff --git a/0.7.1/changeroom.pm b/0.7.1/changeroom.pm new file mode 100644 index 0000000..4961e01 --- /dev/null +++ b/0.7.1/changeroom.pm @@ -0,0 +1,81 @@ +sub change_room { # Den Chat-Raum wechseln + my ($method,$newroom,$oldroom,$alias2) = @_; + + if ($newroom eq $oldroom) { + &post_prv($alias,"<font color='ffffff'>Du befindest dich bereits im Raum <font color='ffa500'>$newroom</font>!</font>"); + &reload_html; + + } elsif ($newroom eq $loginplace) { + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> verlässt den Chat und geht in die <b>$loginplace</b> ... </font></i>", $alias); + &post_strmsg($alias,$room,'quit'); + + unlink("data/online/rooms/$room/$alias"); + + &rm_rstat($alias,$room); + &check_online; + &reload_html; + } + + open RSTAT, "<data/online/rstat/$newroom"; + my @rstat = <RSTAT>; + close RSTAT; + + #Überprüfen, ob Alias Raum betreten darf + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + &post_prv($alias,"<font color='ffffff'>Der Raum <font color='ffa500'>$newroom</font> ist leider abgesperrt!</font>"); + &reload_html; + } + } + + &private_javascript($alias, $room, "parent.input.document.inf.room.value = '$newroom';open('chat?request=online&room=$newroom&alias=$alias&tmpid=$tmpid','online');" ); + open MSGFILE,">>data/msgs/$newroom"; + print MSGFILE "$alias<;".time."<;!<;!<;<;\n"; + close MSGFILE; + + open MSGFILE,">>data/msgs/$room"; + if ($method eq "j") { + print MSGFILE "$alias<;".time."<;!<;!<;<i><font color='ffffff'>".×tring." Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + + } elsif ($method eq "ju") { + print MSGFILE "$alias<;".time."<;!<;!<;<i><font color='ffffff'>".×tring." Du folgst <b>$alias2</b> aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + + } elsif ($method eq "sep") { + print MSGFILE "$alias<;".time."<;!<;!<;<i><font color='ffffff'>".×tring." Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrst ab...</font></i><br><;\n"; + + } elsif ($method eq "beam") { + print MSGFILE "$alias<;".time."<;!<;!<;<i><font color='ffffff'>".×tring." Du wurdest von <b>$alias2</b> in den Raum <b>$newroom</b> gebeamt...</font></i><br><;\n"; + } + close MSGFILE; + + &post_strmsg($alias,$room,'cr',$newroom); + $room = $oldroom; + + my $tmpstamp = time; + if ($method eq "j") { + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i>", $alias); + + } elsif ($method eq "ju") { + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> folgt <b>$alias2</b> in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> und folgt <b>$alias2</b> herein nach <b>$newroom</b> ...</font></i>", $alias); + + } elsif ($method eq "sep") { + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> und sperrt ab...</font></i>", $alias); + $room = $newroom; + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrt ab...</font></i>", $alias); + + } elsif ($method eq "beam") { + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias2</font> beamt <b>$alias</b> in den Raum <b>$newroom</b>...</font></i>", $alias2); + $room = $newroom; + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias2</font> beamt <b>$alias</b> aus dem Raum <b>$oldroom</b> herein nach <b>$room</b>...</font></i>", $alias2); + } + + unlink("data/online/rooms/$oldroom/$alias"); + &rm_rstat($alias,$oldroom); + &check_online; +} + +1; diff --git a/0.7.1/chatiq.sno b/0.7.1/chatiq.sno new file mode 100644 index 0000000..2a024f5 --- /dev/null +++ b/0.7.1/chatiq.sno @@ -0,0 +1 @@ +<div><h2>Chatiquette</h2></div><hr><div>Hier einige Grundlagen ...</div><style type="text/css"> li { color: #ffffff }</style><ul><li><div>Vergiss nie, dass am anderen Ende auch nur Menschen sitzen. Diese mögen es gar nicht, angepöbelt, beleidigt oder in sonstiger Weise angegriffen zu werden.</div></li><li><div>Störend ist auch immer, wenn ein privater Streit im Chat ausgetragen wird. Tragt eure privaten Sachen ausserhalb des Chats aus.<br>Selbst wenn es nur Spass ist - weiss der Rest im Chat das?</div></li><li><div>Dauergeschrei fällt auch immer wieder störend auf. Was in Grossbuchstaben geschrieben wird, wird als Schreien bezeichnet.</div></li><li><div>Unsere ganz besonderen Spezialisten wollen auch immer wieder rausfliegen. Um das zu erreichen, senden sie die ganze Zeit Unsinn.</div></li><li><div>Diskussionen sind dagegen kein Problem. Dafür ist ein Chat ja da. Sobald allerdings das Thema der Diskussion zu sehr entgleist, sollte die Diskussion in einen etwas weniger öffentlichen Raum verlegt werden.</div></li></ul><div>Daraus ergeben sich folgende Regeln:</div><ul><li><div>keinen beleidigenden Wortschatz verwenden</div></li><li><div>obzöner und verfassungsfeindlicher Wortschatz fällt auch weg</div></li><li><div>streitet euch woanders oder in einem privaten Raum</div></li><li><div>schreit nich so viel</div></li><li><div>schreibt keinen Unsinn, der so aussieht, als ob eure Katze über die Tastatur gelaufen ist</div></li><li><div>schreibt nicht zu schnell hintereinander, besonders nicht dasselbe</div></li><li><div>verlagert die Diskussion, wenn sich jemand gestört fühlt</div></li><li><div>Diese Liste ist nicht vollständig. Mit dem gesunden Menschenverstand sollte es eigentlich möglich sein, sich die nicht aufgeführten Punkte zu denken.</div></li></ul><div>So - nach den ganzen "lass-es-bessers" noch ein paar Überlebenstips:</div><ul><li><div>beachte die oben stehenden Punkte ;-)</div></li><li><div>es macht sich immer gut, beim Reinkommen mal zu grüssen</div></li><li><div>warte nicht, bis man/frau dich anspricht - werde selbst aktiv und gib deinen Senf dazu</div></li><li><div>es gibt meist kein allgemein anerkanntes Gesprächsthema - lies dich einfach rein</div></li><li><div>die frage "wer will chatten" ist eigentlich überflüssig in einem Chat (wir warten doch alle nur aufs Ufo ;-)</div></li><li><div>fang nich sofort mit den W-Fragen (woher, wie alt, weiblich oder männlich?) an - es stört einige Leute</div></li></ul><div>Problematisch für die Wächter und Oberwächter ist:</div><ul><li><div>"der nervt mich - schmeiss den mal raus" ist oft nicht nachvollziehbar, weil der WÄ oder OW die Vorgeschichte - die vielleicht ausserhalb des yChat stattgefunden hat - nicht kennt oder keinen Beweis dafür hat.</div></li></ul><hr><div><h2>Richtlinien für den gestressten WÄ und OW:</h2></div><ul><li><div>Du hast die Macht - aber mißbrauche sie nicht!</div></li><li><div>Leute, die ganz offensichtlich stören wollen und dabei den Chatbetrieb massiv behindern, sofort rausschmeissen! Kriterien dazu:</div><ul><li><div>Fluten des Chats</div></li><li><div>Wiederholung von Parolen</div></li><li><div>Exzessive Nutzung von zufälligen Buchstaben-/Zeichenfolgen</div></li><li><div>usw...</div></li></ul></li><li><div>Bei den anderen vorher noch eine Warnung aussprechen...</div></li><li><div>Nicht vergessen: auch für euch gelten die oben aufgeführten Regeln!</div></li><li><div>Vergabe von Raumbesetzer- und Wächterrechten:<br>(dies gilt für RB-Vergabe in der Cyberbar, WÄ allgemein)</div><ul><li><div>Um RB oder WÄ betteln wird schon mal gar nicht beachtet.</div></li><li><div>Wer WÄ wird, soll sichs verdienen - z.B. durch häufiges Helfen bei Neulingen.</div></li><li><div>Ein WÄ sollte schon öfter im Chat sein.</div></li><li><div>Oberwächter zu werden ist sehr schwierig. Frag gar nicht erst danach ;-)</div></li></ul></ul><div>Wer meint, von einem Wächter oder Oberwächter ungerecht behandelt worden zu sein (z.B. weil dieser wegen persönlichen Streitigkeiten rausschmeisst), richte seine Klage an einen Oberwächter oder direkt an den obersten Boss: Snooper (<a href="mailto:admin@ychat.de">admin@ychat.de</a>).</div>
\ No newline at end of file diff --git a/0.7.1/colors.sno b/0.7.1/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.7.1/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.7.1/commands b/0.7.1/commands new file mode 100644 index 0000000..1d107bc --- /dev/null +++ b/0.7.1/commands @@ -0,0 +1,784 @@ +sub command { + $_[0] = $_[0] . ' '; + $_[0] = substr($_[0], 1, length($_[0]) - 1); + my(@cmd) = split(/ /, $_[0], 0); + my $cmd = substr($_[0], 0, index($_[0], ' ')); + my $tmp = $_[1]; + sub lock { + my $method = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $lock = "0\n"; + if ($room eq $standardroom) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ohne Erfolg ab ...</font></i>", $alias); + } + else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ab ...</font></i>", $alias) if $method ne 'separee'; + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum auf ...</font></i>", $alias) if $method ne 'separee'; + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $lock; + close RSTAT; + } + &reload_html; + } + if ($cmd eq 'about') { + &post_prv($alias, "<font color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. B\374tow (2000 - 2001).</font>"); + &reload_html; + } + elsif ($cmd eq 'away') { + for ($i = 1; $i <= $#cmd; ++$i) { + $away_msg = $away_msg . ' ' . $cmd[$i]; + } + my $room = &get_room($alias); + if ($tmp eq 'autoaway') { + $away_msg = "$alias wurde vom System agbemeldet ..."; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> meldet <b>$alias</b> wegen Inaktivität ab ...</i></font>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> meldet sich ab (<font color='$col'>$away_msg</font> ) ...</i></font>", $alias); + } + open AWAY, ">>data/online/rstat/$room.away"; + print AWAY "$alias<;$away_msg\n"; + close AWAY; + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'away'; parent.online.location.reload();]); + &reload_html; + } + elsif ($cmd eq 'clear') { + &post_prv($alias, "<script language='JavaScript'>window.open('chat?request=stream&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');</script>"); + &reload_html; + } + elsif ($cmd eq 'col') { + my $col, $secol; + if ($cmd[1] ne undef) { + $col = $cmd[1]; + &prove_color($alias, $col); + my $tmpsecol = $cmd[2]; + my $length = length $tmpsecol; + if ($tmpsecol eq '' or $length < 6 or $length > 6) { + $secol = $col; + } + else { + $secol = $tmpsecol; + } + } + else { + $col = &random_color; + $secol = &random_color; + } + open OPTIONS, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $options[0] . $col . "\n" . $secol; + close OPTIONS; + &post($room, '<i><font color=ffffff>' . ×tring . "</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt...</font></i>", $alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &reload_html; + } + elsif ($cmd eq 'date') { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + &post_prv($alias, "<font color=ffffff>Heute ist der $days.$months. Jahr $years. Es ist genau $hours:$mins Uhr und $secs Sekunden.</font>"); + &reload_html; + } + elsif ($cmd eq 'exit') { + my $room = &get_room($alias); + if ($tmp eq 'autologout') { + &private_javascript($alias, $room, q[open('chat?request=start&tmp=autologout','_top');]); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> loggt <b>$alias</b> wegen Inaktivität aus ... </font></i>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt sich ganz aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=quit','_top');]); + } + &rm_alias($alias, $room); + &rm_away($alias, $room); + &reload_html; + } + elsif ($cmd eq 'hits' or $cmd eq 'uptime') { + &post_prv($alias, "<font color=ffffff>Uptime: $startime " . &calculate_uptime_hours($STARTIME) . "h; $HITS Hits; " . &calculate_hpm($HITS, $STARTIME) . ' Hits pro Minute</font>'); + &reload_html; + } + elsif ($cmd eq 'ig') { + my $alias2ignore = $cmd[1]; + if ($alias2ignore) { + if (-f "data/user/options/$alias2ignore") { + &post_strmsg($alias, $room, 'ig', $alias2ignore); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'>existiert nicht in der Datenbank!</font>"); + } + } + else { + &post_strmsg($alias, $room, 'igl'); + } + &reload_html; + } + elsif ($cmd eq 'j' or $cmd eq 'sep') { + if ($cmd[1] =~ /\W/ or $cmd[1] eq '') { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> enth\344lt illegale Zeichen!</font>"); + &reload_html; + } + else { + if ($cmd eq 'j') { + &change_room('j', $cmd[1], $room); + &reload_html; + } + else { + if ($cmd[1] eq $standardroom) { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> ist ein Standardraum und kann nicht als Separee eröffnet werden!</font>"); + } + else { + &change_room('sep', $cmd[1], $room); + &lock('separee'); + } + &reload_html; + } + } + } + elsif ($cmd eq 'me' or $cmd eq 'm') { + my $me_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $me_msg = $me_msg . ' ' . $cmd[$i]; + } + $me_msg =~ s[/me/][<i>$alias</i>]g; + $me_msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if ($cmd eq 'm') { + &post($room, "<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>", $alias); + } + else { + &post($room, "<b><font color=$col><i>$alias</i> $me_msg</font></b>", $alias); + } + &reload_html; + } + elsif ($cmd eq 'memo') { + my $alias2memo = $cmd[1]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if (-f "data/user/options/$alias2memo") { + my $memo_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $memo_msg = $memo_msg . ' ' . $cmd[$i]; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>"); + open MEMO, ">>data/user/memos/$alias2memo"; + print MEMO "<font color=ffffff>($days.$months.$years - $hours:$mins:$secs) <font color=$col>$alias</font> hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>\n"; + close MEMO; + &reload_html; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'menu') { + &private_javascript($alias, $room, "window.open('chat?request=htdocs&alias=$alias&var=menu_html&room=$standardroom&col=$col&secol=$secol&tmpid=$tmpid','menuframe','width=500,height=500,screenX=100,screenY=100,scrollbars');"); + &reload_html; + } + elsif ($cmd eq 'online') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + open ONLINE, "<data/user/counts/$alias2prove.online"; + my $online = <ONLINE>; + close ONLINE; + my $totaltime = sprintf('%.2f', $online / 3600); + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>"); + } + else { + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'q') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verlässt den Chat ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &rm_away($alias, $room); + &check_online; + &reload_html; + } + elsif ($cmd eq 'rmgb') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das eigene G\344stebuch ...</font></i>", $alias); + unlink "data/user/gbooks/$alias"; + &reload_html; + } + elsif ($cmd eq 's') { + my $msg2scream; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2scream = $msg2scream . ' ' . $cmd[$i]; + } + $msg2scream =~ s/\344/\304/g; + $msg2scream =~ s/\366/\326/g; + $msg2scream =~ s/\374/\334/g; + $msg2scream = "\U$msg2scream\E"; + &post($room, "<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'seen') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + if (-f "data/user/lastlogin/$alias2prove") { + open LASTLOGIN, "<data/user/lastlogin/$alias2prove"; + my $lastlogin = <LASTLOGIN>; + close LASTLOGIN; + my $timestamp = sprintf('%.2f', (time - $lastlogin) / 3600); + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>"); + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich seit der Einf\374hrung dieses Befehls noch nie eingeloggt!</font></font>"); + } + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'selfkill') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> entfernt sich ganz und gar aus dem System und loggt sich aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=selfkill','_top');]); + &kill_alias($alias); + &reload_html; + } + elsif ($cmd eq 'w') { + my $theme = &get_theme($room); + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my($is, $nr) = ('t', 0); + my $persons; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-f "data/online/rooms/$room/$_") { + $persons = $persons . ' ' . $_; + ++$nr; + } + } + &post_prv($alias, "<font color=ffffff>Der aktuelle <b>Raum:</b> $room $theme $door ($nr): <font color='ffa500'>$persons</font></font>"); + &reload_html; + } + elsif ($cmd eq 'wc' or $cmd eq 'wc/') { + my $raum = $cmd[1]; + my $persons; + if ($raum eq '' and $cmd eq 'wc') { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + close USERS; + foreach $_ (@users) { + $persons = $persons . ' ' . $_ if -f "data/online/users/$_"; + } + my $nr = $#users - 1; + my($nrs, $is) = ('', 'ist'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'sind'; + } + &post_prv("$alias", "<font color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: <font color='ffa500'>$persons</font></font>"); + } + elsif ($raum eq '' and $cmd eq 'wc/') { + my $msg2post; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + opendir DIR, "data/online/rooms/$_"; + my(@dir2) = readdir DIR; + closedir DIR; + open RSTAT, "<data/online/rstat/$_"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my $nr = $#dir2 - 1; + $msg2post = $msg2post . "<tr><td><b><font size=2 color='ffffff'>$_ $door ($nr) [" . $rstat[1] . q(]: </font></b></td></tr><tr><td><font size=2 color='ffa500'>); + foreach $chatter (@dir2) { + $msg2post = $msg2post . "$chatter " if -f "data/online/rooms/$_/$chatter"; + } + print '</font></td>'; + } + } + &post_prv($alias, "<font color=ffffff>Folgende Räume sind offen:</font><table>$msg2post</table>"); + } + elsif ($raum ne '') { + my $persons; + opendir DIR, "data/online/rooms/$raum"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + $persons = $persons . ' ' . $_ if -f "data/online/rooms/$raum/$_"; + } + my($nr, $is) = ($#dir - 1, 't'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'n'; + } + &post_prv($alias, "<font color=ffffff> $nr Person$nrs befinde$is sich im Raum <b>$raum</b> <font color='ffa500'>$persons</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'wj' or $cmd eq 'ju') { + my $alias2search = $cmd[1]; + my $roomofalias = &get_room($alias2search); + if ($roomofalias) { + if ($cmd eq 'wj') { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff>befindet sich im Raum <b>$roomofalias</b> !</font></font>"); + } + else { + &change_room('ju', $roomofalias, $room, $alias2search); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff> ist nicht eingeloggt!</font></font>"); + } + &reload_html; + } + elsif (1 <= &hierachie($alias, $room)) { + if ($cmd eq 'l') { + &lock; + } + elsif ($cmd eq 'su') { + my $alias2su = $cmd[1]; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2su) { + open DATEI, "<data/online/rstat/$room"; + my(@rstat) = <DATEI>; + close DATEI; + if (1 <= hierachie($alias2su, $room)) { + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color='ffffff'> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, W\304 oder OW)</font>"); + &reload_html; + } + open RSTAT, ">>data/online/rstat/$room"; + print RSTAT "$alias2su<;1\n"; + close RSTAT; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verleiht <b>$alias2su</b> Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &reload_html; + } + } + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + &reload_html; + } + elsif ($cmd eq 'rsu') { + my $alias2rsu = $cmd[1]; + if (1 == hierachie($alias2rsu, $room)) { + &rm_rstat($alias2rsu, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entzieht <b>$alias2rsu</b> die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rsu <font color='ffffff'>ist gar kein Raumbesetzer!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 't') { + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $theme; + if ($cmd[1] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, q[<i><font color='ffffff'>] . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums ...</font></i>", $alias); + } + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i] . "\n"; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $theme; + close RSTAT; + &reload_html; + } + elsif (3 <= &hierachie($alias)) { + if ($cmd eq 'ban' or $cmd eq 'banip') { + my $alias2ban = $cmd[1]; + my $hierachie = &hierachie($alias2ban); + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + if ($cmd[1] eq undef) { + my $nr = @ban; + my $banned; + foreach $_ (@ban) { + chomp $_; + $banned .= " $_"; + } + &post_prv($alias, "<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color='ff0000'>$banned</font></font>"); + &reload_html; + } + elsif (-f "data/user/options/$alias2ban") { + if (3 <= $hierachie eq 'wa') { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color='ffffff'>kann nicht verbannt werden!</font></font>"); + &reload_html; + } + if ($cmd eq 'ban') { + if (&add_entry($alias2ban, 'ban') == 1) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verbannt <b>$alias2ban</b> aus dem Chat ...</font></i>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>"); + } + } + elsif ($cmd eq 'banip') { + open DATEI, "<data/online/ident/$alias2ban"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + if (add_entry("ip://$ipnr", 'ban') == 1) { + &post_prv($alias, "<font color='ffffff'>IP-Nummer von <font color='ffa500'>$alias2ban</font> (<font color='ff0000'>$ipnr</font>) wurde verbannt!</font></i>"); + } + else { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$ipnr</font> von <font color='ffa500'>$alias2ban</font> ist bereits verbannt!</font></font>"); + } + &reload_html; + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff> kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'rban' or $cmd eq 'rbanip') { + my $alias2rban = $cmd[1]; + open BAN, '<data/ban'; + @ban = <BAN>; + close BAN; + foreach $ban (@ban) { + if (&rm_entry($alias2rban, 'ban') == 1) { + if ($alias2rban =~ /ip:/) { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$alias2rban</font> wurde aus der Banliste ausgetragen!</font></font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entbannt <b>$alias2rban</b> ...</font></i>", $alias); + } + &reload_html; + } + } + &post_prv($alias, "<font color='ff0000'>$alias2rban <font color='ffffff'>ist nicht verbannt!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'img') { + my $hierachie = &hierachie($alias); + &hierachie_rm($alias); + if ($hierachie % 2 > 0) { + &post_prv($alias, q[<font color='ffffff'>Dein Superuserlogo wurde versteckt!</font>]); + &hierachie_add($alias, $hierachie + 1); + } + else { + &post_prv("$alias", q[<font color='ffffff'>Dein Superuserlogo wurde wieder sichtbar gemacht!</font></font>]); + &hierachie_add($alias, $hierachie - 1); + } + &reload_html; + } + elsif ($cmd eq 'ip') { + my $alias2prove = $cmd[1]; + opendir DIR, 'data/online/ident'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2prove) { + open DATEI, "<data/online/ident/$alias2prove"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + &post_prv($alias, "<font color='ffa500'>$_<font color='ffffff'> hat die IP-Nummer <font color='ff0000'>$ipnr</font> !</font></font>"); + } + } + &reload_html; + } + elsif ($cmd eq 'k' or $cmd eq 'o') { + my $alias2kick = $cmd[1]; + if (-f "data/online/users/$alias2kick") { + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $raum (@dir) { + opendir DIR, "data/online/rooms/$raum"; + my(@dir2) = readdir DIR; + closedir DIR; + foreach my $chatter (@dir2) { + if ($chatter eq $alias2kick) { + my $hierachie2 = &hierachie($alias2kick); + if (&hierachie($alias) <= &hierachie($alias2kick)) { + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> besitzt einen höheren oder gleichen Rang und kann nicht gekickt/ausgeloggt werden!</font></font>"); + } + else { + if ($cmd eq 'k') { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=kick","_top");</script>'); + } + else { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=logout","_top");</script>'); + } + $_ = undef if $room eq $raum; + if ($cmd eq 'k') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> katapultiert <b>$alias2kick</b> aus dem Chat ...</font></i>", $alias, $raum); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt <b>$alias2kick</b> aus dem Chat aus ...</font></i>", $alias, $alias); + } + rm_alias $alias2kick, $raum; + &check_online; + } + &reload_html; + } + } + } + } + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> ist nicht anwesend und kann nicht aus dem System katapultiert werden werden!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'sl') { + my $sl_room = $cmd[1]; + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + open RSTAT, "<data/online/rstat/$sl_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen ab ...</font></i>", $alias, $sl_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen auf ...</font></i>", $alias, $sl_room); + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$sl_room"; + print RSTAT $lock; + close RSTAT; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$sl_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'ss') { + my $ss_room = $cmd[1]; + if (-e "data/online/rooms/$ss_room") { + my $ss_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $ss_msg = $ss_msg . ' ' . $cmd[$i]; + } + my $msg2scream = "\U$ss_msg\E"; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> ruft in den Raum <b>$ss_room</b> hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>", $alias, $ss_room); + &reload_html; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$ss_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'st') { + my $st_room = $cmd[1]; + if (-e "data/online/rooms/$st_room") { + my $theme; + if ($cmd[2] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum <b>$st_room</b> das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias, $st_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums <b>$st_room</b> ...</font></i>", $alias, $st_room); + } + open RSTAT, "<data/online/rstat/$st_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$st_room"; + print RSTAT $theme; + close RSTAT; + } + else { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif (5 <= &hierachie($alias)) { + if ($cmd eq 'kill') { + my $alias2kill = $cmd[1]; + if (-f "data/user/options/$alias2kill") { + if (5 <= &hierachie($alias2kill)) { + &post_prv($alias, "<font color='ffa500'>$alias2kill</font> <font color='ffffff'>hat einen höheren Rang und kann nicht aus dem System entfernt werden !</font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col>$alias</font> killt <b>$alias2kill</b> ganz und gar aus dem System ...</font></i>", $alias); + &kill_alias($alias2kill, $alias); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2kill <font color='ffffff'> existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'sys') { + my $sys_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $sys_msg = $sys_msg . ' ' . $cmd[$i]; + } + $sys_msg = q[<i><font color='ffffff'>] . ×tring . " </font></i> <b><font size=2 color='red'>SYSTEMNACHRICHT</font></b><i><font color='ffffff'>: $sys_msg ...</font></i>"; + opendir ROOMS, 'data/msgs'; + my(@rooms) = readdir ROOMS; + close ROOMS; + foreach $_ (@rooms) { + &post($_, $sys_msg, $alias) unless /\./; + } + &log($sys_msg); + &reload_html; + } + elsif ($cmd eq 'wa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + if (3 <= &hierachie($alias2wa)) { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2wa, 3); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <b>$alias2wa</b> zum W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'rwa') { + my $alias2rwa = $cmd[1]; + my $hierachie = &hierachie($alias2rwa); + if (3 == $hierachie or 4 == $hierachie) { + &hierachie_rm($alias2rwa); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <b>$alias2rwa</b> vom W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif (7 <= &hierachie($alias)) { + if ($cmd eq 'ow') { + my $alias2ow = $cmd[1]; + if (-f "data/user/options/$alias2ow") { + if (5 <= &hierachie($alias2ow)) { + &post_prv($alias, "<font color='ffa500'>$alias2ow <font color='ffffff'>kann nicht zum Oberwächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2ow, 5); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <b>$alias2ow</b> zum Oberwächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'row') { + my $alias2row = $cmd[1]; + my $hierachie = &hierachie($alias2row); + if (5 == $hierachie or 6 == $hierachie) { + &hierachie_rm($alias2row); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <b>$alias2row</b> vom Oberw\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2row <font color=ffffff>ist kein Oberw\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'pw') { + my $pw2show = $cmd[1]; + if (-f "data/user/options/$pw2show") { + open PW, "<data/user/options/$pw2show"; + my(@pw) = <PW>; + close PW; + chomp $pw[0]; + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> hat das Passwort <font color='ff0000'>$pw[0]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'id' or $cmd eq 'agent') { + my $id2show = $cmd[1]; + if (-f "data/online/ident/$id2show") { + open ID, "<data/online/ident/$id2show"; + my(@id) = <ID>; + close ID; + if ($cmd eq 'id') { + chomp $id[1]; + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> hat die Temp-ID <font color='ff0000'>$id[1]</font> !</font></font>"); + } + else { + chomp $id[2]; + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> verwendet <font color='ff0000'>$id[2]</font> !</font></font>"); + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> ist nicht eingeloggt !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'cool') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . " $msg2post</font></i>", $alias); + &reload_html; + } + elsif ($cmd eq 'rev') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post = reverse($msg2post); + &post($room, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $alias); + &reload_html; + } + } + } + } + } + my($alias2post, $msg2post, $action); + if ($cmd eq 'msg') { + $alias2post = $cmd[1]; + for ($i = 2; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + elsif ($cmd eq '') { + $alias2post = $whisper; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + else { + $alias2post = $cmd; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + $msg2post =~ s[/me/][<i>$alias</i>]g; + $msg2post =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if (-f "data/online/users/$alias2post" and not -f "data/online/rooms/$loginplace/$alias2post") { + &post_prv($alias, "<b><font color=$col><i>Zu $alias2post gefl\374stert:</i> <font color=$secol>$msg2post</font></font></i></b>"); + &post_prv($alias2post, "<b><font color=$col><i>$alias fl\374stert:</i> <font color=$secol>$msg2post</font></font></i></b>"); + &private_javascript($alias, $room, "parent.input.document.inf.whisper.value = '$alias2post';"); + &reload_html; + } + &post_prv($alias, qq[ <font color=ffffff>Benutzer oder Befehl <font color=ffa500>$alias2post</font> ist nicht anwesend/verf\374gbar! Bitte den Befehl "/menu" eingeben, um das Chat-Menü zu öffnen.</font></font>]); + &reload_html; +} +1; diff --git a/0.7.1/commands.pm b/0.7.1/commands.pm new file mode 100644 index 0000000..cf42001 --- /dev/null +++ b/0.7.1/commands.pm @@ -0,0 +1,1016 @@ +sub command { # Alle Chatbefehle, die über input_html eingegeben werden können. + $_[0] = $_[0]." "; + $_[0] = substr($_[0], 1, length($_[0])-1); + my @cmd = split(/ /, $_[0]); + my $cmd = substr($_[0],0 , index($_[0], " ")); + my $tmp = $_[1]; +#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< + +#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< + if ($cmd eq "about") { + &post_prv($alias,"<font color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. Bütow (2000 - 2001).</font>"); + &reload_html; + +#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< + } elsif ($cmd eq "away") { + for ($i=1; $i <= $#cmd; $i++) { + $away_msg = $away_msg." ".$cmd[$i]; + } + + my $room = &get_room($alias); + if ($tmp eq "autoaway") { + $away_msg = "$alias wurde vom System agbemeldet ..."; + &post($room,"<i><font color=ffffff>".×tring." <font color='ffa500'><b>Das System</b></font> meldet <b>$alias</b> wegen Inaktivität ab ...</i></font>", $alias); + + } else { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> meldet sich ab (<font color='$col'>$away_msg</font> ) ...</i></font>", $alias); + } + + open AWAY,">>data/online/rstat/$room.away"; + print AWAY "$alias<;$away_msg\n"; + close AWAY; + + &private_javascript($alias, $room, "parent.input.document.inf.tmp.value = 'away'; parent.online.location.reload();" ); + &reload_html; + +#############>- EIGENEN CHATBILDSCHIRM LÖSCHEN -< + } elsif ($cmd eq "clear") { + &post_prv($alias,"<script language='JavaScript'>window.open('chat?request=stream&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');</script>"); + &reload_html; + +#############>- FARBEN WECHSELN -< + } elsif ($cmd eq "col") { + my $col, $secol; + + if ($cmd[1] ne undef) { + + $col = $cmd[1]; + &prove_color($alias,$col); + + my $tmpsecol = $cmd[2]; + my $length = length($tmpsecol); + + if ($tmpsecol eq "" || $length < 6 || $length > 6) { + $secol = $col + } else { + $secol = $tmpsecol; + } + + } else { + $col = &random_color; + $secol = &random_color; + } + + open OPTIONS,"<data/user/options/$alias"; + my @options = <OPTIONS>; + close OPTIONS; + + open OPTIONS,">data/user/options/$alias"; + print OPTIONS $options[0].$col."\n".$secol; + close OPTIONS; + + &post($room,"<i><font color=ffffff>".×tring."</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt...</font></i>",$alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';" ); + &post_strmsg($alias,$room,'col',"$col;$secol"); + + &reload_html; + +#############>- AKTUELLES DATUM UND URZEIT AUSGEBEN -< + } elsif ($cmd eq "date") { + my ($secs, $mins, $hours, $days, $months, $years) = &timearray; + &post_prv($alias,"<font color=ffffff>Heute ist der $days.$months. Jahr $years. Es ist genau $hours:$mins Uhr und $secs Sekunden.</font>"); + &reload_html; + +#############>- DAS SYSETM VERLASSEN -< + } elsif ($cmd eq "exit") { + + my $room = &get_room($alias); + + if ($tmp eq "autologout") { + &private_javascript($alias, $room, "open('chat?request=start&tmp=autologout','_top');" ); + &post($room,"<i><font color=ffffff>".×tring." <font color='ffa500'><b>Das System</b></font> loggt <b>$alias</b> wegen Inaktivität aus ... </font></i>", $alias); + + } else { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> loggt sich ganz aus ... </font></i>", $alias); + &private_javascript($alias, $room, "open('chat?request=start&tmp=quit','_top');" ); + } + + &rm_alias($alias,$room); + &rm_away($alias,$room); + &reload_html; + +#############>- SERVER HITS & UPTIME ANZEIGEN LASSEN -< + } elsif ($cmd eq "hits" || $cmd eq "uptime" ) { + &post_prv($alias,"<font color=ffffff>Uptime: $startime ".&calculate_uptime_hours($STARTIME)."h; $HITS Hits; ".&calculate_hpm($HITS, $STARTIME)." Hits pro Minute</font>"); + &reload_html; + +#############>- EINEN BENUTZER AUF DIE IGNORELISTE SETZEN/ENTFERNEN BZW. IGNORELISTE ANZEIGENLASSEN -< + } elsif ($cmd eq "ig") { + my $alias2ignore = $cmd[1]; + + if ($alias2ignore) { + + if (-f "data/user/options/$alias2ignore") { + # Auf die Ignore-Liste setzen/entfernen + &post_strmsg($alias,$room,'ig',$alias2ignore); + + } else { + &post_prv($alias,"<font color='ffa500'>$alias2ignore</font> <font color='ffffff'>existiert nicht in der Datenbank!</font>"); + } + + } else { + # Ignoreliste anzeigen + &post_strmsg($alias,$room,'igl'); + } + + &reload_html; + +#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN BZW. SEPAREE ERÖFFNEN-< + } elsif ($cmd eq "j" || $cmd eq "sep") { + if ($cmd[1] =~ /\W/ || $cmd[1] eq "") { + &post_prv($alias,"<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> enthält illegale Zeichen!</font>"); + &reload_html; + + } else { + if ($cmd eq "j") { + &change_room("j",$cmd[1],$room); + &reload_html; + + } else { + if ($cmd[1] eq $standardroom) { + &post_prv($alias,"<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> ist ein Standardraum und kann nicht als Separee eröffnet werden!</font>"); + + } else { + &change_room("sep",$cmd[1],$room); + &lock("separee"); + } + + &reload_html; + } + } + +#############>- HANDELN -< + } elsif ($cmd eq "me" || $cmd eq "m") { + my $me_msg; + + for ($i=1; $i <= $#cmd; $i++) { + $me_msg = $me_msg." ".$cmd[$i]; + } + + $me_msg =~ s#/me/#<i>$alias</i>#g; + $me_msg =~ s#/m/#<i><font color=$col>$alias</font></i>#g; + + if ($cmd eq "m") { + &post($room,"<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>", $alias); + + } else { + &post($room,"<b><font color=$col><i>$alias</i> $me_msg</font></b>", $alias); + } + + &reload_html; + +#############>- MEMO SCHREIBEN -< + } elsif ($cmd eq "memo") { + my $alias2memo = $cmd[1]; + my ($secs, $mins, $hours, $days, $months, $years) = &timearray; + + if(-f "data/user/options/$alias2memo") { + my $memo_msg; + + for ($i=2; $i <= $#cmd; $i++) { + $memo_msg = $memo_msg." ".$cmd[$i]; + } + + &post_prv($alias,"<font color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>"); + + open MEMO,">>data/user/memos/$alias2memo"; + print MEMO "<font color=ffffff>($days.$months.$years - $hours:$mins:$secs) <font color=$col>$alias</font> hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>\n"; + close MEMO; + + &reload_html; + } + + &post_prv($alias,"<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>"); + &reload_html; + +#############>- CHAT-MENÜ ÖFFNEN/AKTUALISIEREN -< + } elsif ($cmd eq "menu") { + &private_javascript($alias, $room, "window.open('chat?request=htdocs&alias=$alias&var=menu_html&room=$standardroom&col=$col&secol=$secol&tmpid=$tmpid','menuframe','width=500,height=500,screenX=100,screenY=100,scrollbars');" ); + &reload_html; + +#############>- 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 / 3600)); + &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>"); + + } else { + &post_prv("$alias","<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>"); + } + + &reload_html; + +#############>- DEN CHAT VERLASSEN -< + } elsif ($cmd eq "q") { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> verlässt den Chat ... </font></i>", $alias); + &post_strmsg($alias,$room,'quit'); + + unlink("data/online/rooms/$room/$alias"); + + &rm_rstat($alias,$room); + &rm_away($alias,$room); + &check_online; + &reload_html; + +#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -< + } elsif ($cmd eq "rmgb") { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> löscht das eigene Gästebuch ...</font></i>", $alias); + unlink("data/user/gbooks/$alias"); + &reload_html; + +#############>- SCHREIEN -< + } elsif ($cmd eq "s") { + my $msg2scream; + + for ($i=1; $i <= $#cmd; $i++) { + $msg2scream = $msg2scream." ".$cmd[$i]; + } + + $msg2scream =~ s#ä#Ä#g; $msg2scream =~ s#ö#Ö#g; + $msg2scream =~ s#ü#Ü#g; $msg2scream = "\U$msg2scream"; + + &post($room,"<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>", $alias); + &reload_html; + +#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGElOGGT 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"; + my $lastlogin = <LASTLOGIN>; + close LASTLOGIN; + + my $timestamp = sprintf("%.2f",((time() - $lastlogin) / 3600)); + &post_prv("$alias","<font color='ffa500'>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>"); + + } else { + &post_prv("$alias","<font color='ffa500'>$alias2prove <font color=ffffff> hat sich seit der Einführung dieses Befehls noch nie eingeloggt!</font></font>"); + } + + } else { + &post_prv("$alias","<font color='ffa500'>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>"); + } + + &reload_html; + +#############>- SICH SELBST AUS DEM SYSETM GANZ UND GAR ENTFERNEN -< + } elsif ($cmd eq "selfkill") { + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> entfernt sich ganz und gar aus dem System und loggt sich aus ... </font></i>", $alias); + &private_javascript($alias, $room, "open('chat?request=start&tmp=selfkill','_top');" ); + &kill_alias($alias); + &reload_html; + +#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< + } elsif ($cmd eq "w") { + my $theme = &get_theme($room); + my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n"); + my ($is,$nr) = ("t",0); + my $persons; + + opendir DIR,"data/online/rooms/$room"; + my @dir = readdir(DIR); + closedir(DIR); + + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $persons = $persons." ".$_; + $nr++; + } + } + + &post_prv($alias,"<font color=ffffff>Der aktuelle <b>Raum:</b> $room $theme $door ($nr): <font color='ffa500'>$persons</font></font>"); + &reload_html; + +#############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< + } elsif ($cmd eq "wc" || $cmd eq "wc/") { + my $raum = $cmd[1]; + my $persons; + + if ($raum eq "" && $cmd eq "wc") { + opendir USERS,"data/online/users"; + my @users = readdir(USERS); + close USERS; + + foreach(@users) { + $persons = $persons." ".$_ + if (-f "data/online/users/$_"); + } + + my $nr = ($#users-1); + my ($nrs,$is) = ("","ist"); + + if ($nr != 1) { + $nrs = "en"; + $is = "sind"; + } + + &post_prv("$alias","<font color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: <font color='ffa500'>$persons</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) { + $msg2post = $msg2post."$chatter " + if (-f "data/online/rooms/$_/$chatter"); + } + + print "</font></td>"; + } + } + + &post_prv($alias,"<font color=ffffff>Folgende Räume sind offen:</font><table>$msg2post</table>"); + + } elsif ($raum ne "") { + my $persons; + + opendir(DIR,"data/online/rooms/$raum"); + my @dir = readdir(DIR); + closedir(DIR); + + foreach(@dir) { + $persons = $persons." ".$_ + if (-f "data/online/rooms/$raum/$_"); + } + + my ($nr,$is) = (($#dir-1),"t"); + + if ($nr != 1) { + $nrs = "en"; + $is = "n"; + } + + &post_prv($alias,"<font color=ffffff> $nr Person$nrs befinde$is sich im Raum <b>$raum</b> <font color='ffa500'>$persons</font></font>"); + } + + &reload_html; + +#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN-< + } elsif ($cmd eq "wj" || $cmd eq "ju") { + my $alias2search = $cmd[1]; + my $roomofalias = &get_room($alias2search); + + if ($roomofalias) { + if ($cmd eq "wj") { + &post_prv($alias,"<font color='ffa500'>$alias2search <font color=ffffff>befindet sich im Raum <b>$roomofalias</b> !</font></font>"); + + } else { + &change_room("ju",$roomofalias,$room,$alias2search); + } + + } else { + &post_prv($alias,"<font color='ffa500'>$alias2search <font color=ffffff> ist nicht eingeloggt!</font></font>"); + } + + &reload_html; + +#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -< + } elsif ( 1 <= &hierachie($alias,$room)) { + +#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -< + if ($cmd eq "l") { + &lock; + sub lock { + my $method = shift; + + open RSTAT, "data/online/rstat/$room"; + my @r_stat = <RSTAT>; + close RSTAT; + + my $lock = "0\n"; + + if ($room eq $standardroom) { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> sperrt den Raum ohne Erfolg ab ...</font></i>", $alias); + } else { + + if ($r_stat[0] == 0) { + $lock = "1\n"; + + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> sperrt den Raum ab ...</font></i>", $alias) + if ($method ne "separee"); + + } else { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> sperrt den Raum auf ...</font></i>", $alias) + if ($method ne "separee"); + } + + for ($i=1;$i<=$#r_stat;$i++) { + $lock = $lock.$r_stat[$i]; + } + + open RSTAT,">data/online/rstat/$room"; + print RSTAT $lock; + close RSTAT; + } + &reload_html; + } + +#############>- ZUM RAUMBESETZER ERNENNEN -< + } elsif ($cmd eq "su") { + my $alias2su = $cmd[1]; + + opendir DIR,"data/online/rooms/$room"; + my @dir = readdir(DIR); + closedir(DIR); + + foreach(@dir) { + if ($_ eq $alias2su) { + + open(DATEI,"<data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + + if (1 <= hierachie($alias2su,$room)) { + &post_prv($alias,"<font color='ffa500'>$alias2su</font> <font color='ffffff'> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>"); + &reload_html; + } + + open RSTAT,">>data/online/rstat/$room"; + print RSTAT "$alias2su<;1\n"; + close RSTAT; + + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> verleiht <b>$alias2su</b> Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &reload_html; + } + } + + &post_prv($alias,"<font color='ffa500'>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + &reload_html; + +#############>- RAUMBESETZER ENTNENNEN -< + } elsif ($cmd eq "rsu") { + my $alias2rsu = $cmd[1]; + + if (1 == hierachie($alias2rsu,$room)) { + &rm_rstat($alias2rsu,$room); + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> entzieht <b>$alias2rsu</b> die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + + } else { + &post_prv($alias,"<font color='ffa500'>$alias2rsu <font color='ffffff'>ist gar kein Raumbesetzer!</font></font>"); + } + + &reload_html; + +#############>- RAUM EIN THEMA GEBEN -< + } elsif ($cmd eq "t") { + open RSTAT, "data/online/rstat/$room"; + my @r_stat = <RSTAT>; + close RSTAT; + + my $theme; + if ($cmd[1] ne undef) { + + for ($i=1; $i <= $#cmd; $i++) { + $theme = $theme." ".$cmd[$i]; + } + + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> gibt dem Raum das Thema \"<font color='$col'>$theme</font>\" ...</font></i>", $alias); + + } else { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> löscht das Thema des Raums ...</font></i>", $alias); + } + + $theme = $r_stat[0].$theme."\n"; + + for ($i=2;$i<=$#r_stat;$i++) { + $theme = $theme.$r_stat[$i]."\n"; + } + + open RSTAT,">data/online/rstat/$room"; + print RSTAT $theme; + close RSTAT; + &reload_html; + +#############>- WÄCHTERBEFEHLE ( Alphabetisch sortiert ) -< + } elsif (3 <= &hierachie($alias)) { + +#############>- ALIAS VERBANNEN -< + if ($cmd eq "ban" || $cmd eq "banip") { + my $alias2ban = $cmd[1]; + my $hierachie = &hierachie($alias2ban); + + open BAN,"<data/ban"; + my @ban = <BAN>; + close BAN; + + if ($cmd[1] eq undef) { + my $nr = @ban; + my $banned; + + foreach(@ban) { + chomp($_); + $banned .= " $_"; + } + + &post_prv($alias,"<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color='ff0000'>$banned</font></font>"); + &reload_html; + + } elsif (-f "data/user/options/$alias2ban") { + if (3 <= $hierachie eq "wa") { + &post_prv($alias,"<font color='ffa500'>$alias2ban <font color='ffffff'>kann nicht verbannt werden!</font></font>"); + &reload_html; + } + + if ($cmd eq "ban") { + if (&add_entry($alias2ban,"ban") == 1) { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> verbannt <b>$alias2ban</b> aus dem Chat ...</font></i>", $alias); + + } else { + &post_prv($alias,"<font color='ffa500'>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>"); + } + + } elsif ($cmd eq "banip") { + open DATEI, "<data/online/ident/$alias2ban"; + my $ipnr = <DATEI>; + close DATEI; + + chomp($ipnr); + + if (add_entry("ip://$ipnr","ban") == 1) { + &post_prv($alias,"<font color='ffffff'>IP-Nummer von <font color='ffa500'>$alias2ban</font> (<font color='ff0000'>$ipnr</font>) wurde verbannt!</font></i>"); + + } else { + &post_prv($alias,"<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$ipnr</font> von <font color='ffa500'>$alias2ban</font> ist bereits verbannt!</font></font>"); + } + &reload_html; + + } + &reload_html; + } + &post_prv($alias,"<font color='ffa500'>$alias2ban <font color=ffffff> kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>"); + &reload_html; + +#############>- ALIAS ENTBANNEN -< + } elsif ($cmd eq "rban" || $cmd eq "rbanip") { + my $alias2rban = $cmd[1]; + + open(BAN,"<data/ban"); + @ban = <BAN>; + close BAN; + + foreach $ban (@ban) { + if (&rm_entry($alias2rban,"ban") == 1) { + + if ($alias2rban =~ /ip:/) { + &post_prv($alias,"<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$alias2rban</font> wurde aus der Banliste ausgetragen!</font></font>"); + + } else { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> entbannt <b>$alias2rban</b> ...</font></i>", $alias); + + } + &reload_html; + } + } + + &post_prv($alias,"<font color='ff0000'>$alias2rban <font color='ffffff'>ist nicht verbannt!</font></font>"); + &reload_html; + +#############>- EIGENES SUPERUSER-LOGO VERSCHWINDEN/AUFTAUCHEN LASSEN -< + } elsif ($cmd eq "img") { + my $hierachie = &hierachie($alias); + &hierachie_rm($alias); + + if (($hierachie % 2) > 0) { + &post_prv($alias,"<font color='ffffff'>Dein Superuserlogo wurde versteckt!</font>"); + &hierachie_add($alias,$hierachie+1); + + } else { + &post_prv("$alias","<font color='ffffff'>Dein Superuserlogo wurde wieder sichtbar gemacht!</font></font>"); + &hierachie_add($alias,$hierachie-1); + } + + &reload_html; + +#############>- IP # VON ALIAS ANZEIGEN LASSEN -< + } elsif ($cmd eq "ip") { + my $alias2prove = $cmd[1]; + + opendir DIR,"data/online/ident"; + my @dir = readdir(DIR); + closedir(DIR); + + foreach(@dir) { + if ($_ eq $alias2prove) { + open DATEI, "<data/online/ident/$alias2prove"; + my $ipnr = <DATEI>; + close DATEI; + + chomp $ipnr; + &post_prv($alias,"<font color='ffa500'>$_<font color='ffffff'> hat die IP-Nummer <font color='ff0000'>$ipnr</font> !</font></font>"); + } + } + + &reload_html; + +#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< + } elsif ($cmd eq "k" || $cmd eq "o") { + my $alias2kick = $cmd[1]; + + if (-f "data/online/users/$alias2kick") { + opendir DIR,"data/online/rooms"; + my @dir = readdir(DIR); + closedir(DIR); + + foreach my $raum (@dir) { + opendir DIR, "data/online/rooms/$raum"; + my @dir2 = readdir(DIR); + closedir(DIR); + + foreach my $chatter (@dir2) { + if ($chatter eq $alias2kick) { + + my $hierachie2 = &hierachie($alias2kick); + + if (&hierachie($alias) <= &hierachie($alias2kick)) { + &post_prv($alias,"<font color='ffa500'>$alias2kick <font color='ffffff'> besitzt einen höheren oder gleichen Rang und kann nicht gekickt/ausgeloggt werden!</font></font>"); + + } else { + if ($cmd eq "k") { + &post_prv($alias2kick,"<script language=\"JavaScript\">window.open(\"chat?request=start&tmp=kick\",\"_top\");</script>"); + + } else { + &post_prv($alias2kick,"<script language=\"JavaScript\">window.open(\"chat?request=start&tmp=logout\",\"_top\");</script>"); + } + + $_ = undef + if ($room eq $raum); + + if ($cmd eq "k") { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> katapultiert <b>$alias2kick</b> aus dem Chat ...</font></i>",$alias, $raum); + } else { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> loggt <b>$alias2kick</b> aus dem Chat aus ...</font></i>",$alias, $alias); + } + + rm_alias($alias2kick,$raum); + &check_online; + + } + &reload_html; + } + } + } + } + + &post_prv($alias,"<font color='ffa500'>$alias2kick <font color='ffffff'> ist nicht anwesend und kann nicht aus dem System katapultiert werden werden!</font></font>"); + &reload_html; + +#############>- EINEN ANDEREN RAUM AUF-/ABSPERREN -< + } elsif ($cmd eq "sl") { + my $sl_room = $cmd[1]; + + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + + open RSTAT,"<data/online/rstat/$sl_room"; + my @r_stat = <RSTAT>; + close RSTAT; + + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen ab ...</font></i>", $alias,$sl_room); + + } else { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen auf ...</font></i>", $alias,$sl_room); + } + + for ($i=1;$i<=$#r_stat;$i++) { + $lock = $lock.$r_stat[$i]; + } + + open RSTAT,">data/online/rstat/$sl_room"; + print RSTAT $lock; + close RSTAT; + + } else { + &post_prv($alias,"<font color='ffffff'>Der Raum <font color='ffa500'>$sl_room</font> existiert nicht!</font></font>"); + } + + &reload_html; + +#############>- IN EINEN ANDEREN RAUM HINEINRUFEN -< + } elsif ($cmd eq "ss") { + my $ss_room = $cmd[1]; + + if (-e "data/online/rooms/$ss_room") { + my $ss_msg; + + for ($i=2; $i <= $#cmd; $i++) { + $ss_msg = $ss_msg." ".$cmd[$i]; + } + + my $msg2scream = "\U$ss_msg"; + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> ruft in den Raum <b>$ss_room</b> hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>",$alias, $ss_room); + &reload_html; + + } else { + &post_prv($alias,"<font color='ffffff'>Der Raum <font color='ffa500'>$ss_room</font> existiert nicht!</font></font>"); + } + + &reload_html; + +#############>- EINEN ANDEREN RAUM EIN THEMA GEBEN -< + } elsif ($cmd eq "st") { + my $st_room = $cmd[1]; + if (-e "data/online/rooms/$st_room") { + my $theme; + + if ($cmd[2] ne undef) { + + for ($i=1; $i <= $#cmd; $i++) { + $theme = $theme." ".$cmd[$i]; + } + + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> gibt dem Raum <b>$st_room</b> das Thema \"<font color='$col'>$theme</font>\" ...</font></i>",$alias,$st_room); + + } else { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> löscht das Thema des Raums <b>$st_room</b> ...</font></i>",$alias,$st_room); + } + + open RSTAT,"<data/online/rstat/$st_room"; + my @r_stat = <RSTAT>; + close RSTAT; + + $theme = $r_stat[0].$theme."\n"; + + for ($i=2;$i<=$#r_stat;$i++) { + $theme = $theme.$r_stat[$i]; + } + + open RSTAT,">data/online/rstat/$st_room"; + print RSTAT $theme; + close RSTAT; + + } else { + &post_prv($alias,"<font color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>"); + } + + &reload_html; + +#############>- OBERWÄCHTERBEFEHLE -< + } elsif (5 <= &hierachie($alias)) { + +#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -< + if ($cmd eq "kill") { + my $alias2kill = $cmd[1]; + + if (-f "data/user/options/$alias2kill") { + + if (5 <= &hierachie($alias2kill)) { + &post_prv($alias,"<font color='ffa500'>$alias2kill</font> <font color='ffffff'>hat einen höheren Rang und kann nicht aus dem System entfernt werden !</font>"); + + } else { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col>$alias</font> killt <b>$alias2kill</b> ganz und gar aus dem System ...</font></i>", $alias); + &kill_alias($alias2kill,$alias); + } + + } else { + &post_prv($alias,"<font color='ffa500'>$alias2kill <font color='ffffff'> existiert nicht in der Datenbank!</font></font>"); + } + + &reload_html; + +#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME &postEN -< + } elsif ($cmd eq "sys") { + my $sys_msg; + + for ($i=1; $i <= $#cmd; $i++) { + $sys_msg = $sys_msg." ".$cmd[$i]; + } + + $sys_msg = "<i><font color='ffffff'>".×tring." </font></i> <b><font size=2 color='red'>SYSTEMNACHRICHT</font></b><i><font color='ffffff'>: $sys_msg ...</font></i>"; + + opendir ROOMS,"data/msgs"; + my @rooms = readdir(ROOMS); + close(ROOMS); + + foreach (@rooms) { + &post($_,$sys_msg,$alias) + unless(/\./); + } + + &log($sys_msg); + &reload_html; + +#############>- ALIAS ZUM WÄCHTER ERNNENNEN -< + } elsif ($cmd eq "wa") { + + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + + if (3 <= &hierachie($alias2wa)) { + &post_prv($alias,"<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum Wächter ernannt werden!</font></font>"); + + } else { + &hierachie_add($alias2wa,3); + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> ernennt <b>$alias2wa</b> zum Wächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + + &reload_html; + + } else { + &post_prv($alias,"<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + + &reload_html; + +#############>- ALIAS DIE WÄCHTERRECHTE ENTZIEHEN -< + } elsif ($cmd eq "rwa") { + my $alias2rwa = $cmd[1]; + my $hierachie = &hierachie($alias2rwa); + + if (3 == $hierachie || 4 == $hierachie) { + &hierachie_rm($alias2rwa); + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> hat <b>$alias2rwa</b> vom Wächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + + } else { + &post_prv($alias,"<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein Wächter und können diese Rechte nicht entzogen werden!</font></font>"); + } + + &reload_html; + +#############>- ADMINISTRATORBEFEHLE -< + } elsif (7 <= &hierachie($alias)) { +#############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -< + if ($cmd eq "ow") { + + my $alias2ow = $cmd[1]; + if (-f "data/user/options/$alias2ow") { + + if (5 <= &hierachie($alias2ow)) { + &post_prv($alias,"<font color='ffa500'>$alias2ow <font color='ffffff'>kann nicht zum Oberwächter ernannt werden!</font></font>"); + + } else { + &hierachie_add($alias2ow,5); + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> ernennt <b>$alias2ow</b> zum Oberwächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + + &reload_html; + + } else { + &post_prv($alias,"<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + + &reload_html; + +#############>- ALIAS DIE OBERWÄCHTERRECHTE ENTZIEHEN -< + } elsif ($cmd eq "row") { + my $alias2row = $cmd[1]; + my $hierachie = &hierachie($alias2row); + + if (5 == $hierachie || 6 == $hierachie) { + &hierachie_rm($alias2row); + &post($room,"<i><font color='ffffff'>".×tring." <font color='$col'>$alias</font> hat <b>$alias2row</b> vom Oberwächter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + + } else { + &post_prv($alias,"<font color='ffa500'>$alias2row <font color=ffffff>ist kein Oberwächter und können diese Rechte nicht entzogen werden!</font></font>"); + } + + &reload_html; + +#############>- PASSWORD EINES BENUTZERS ANZEIGEN LASSEN -< + } elsif ($cmd eq "pw") { + my $pw2show = $cmd[1]; + + if (-f "data/user/options/$pw2show") { + + open PW,"<data/user/options/$pw2show"; + my @pw = <PW>; + close PW; + + chomp($pw[0]); + + &post_prv($alias,"<font color='ffa500'>$pw2show <font color='ffffff'> hat das Passwort <font color='ff0000'>$pw[0]</font> !</font></font>"); + &reload_html; + } + + &post_prv($alias,"<font color='ffa500'>$pw2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + +#############>- IDENT-DATEI EINES BENUTZERS ANZEIGEN LASSEN -< + } elsif ($cmd eq "id" || $cmd eq "agent") { + my $id2show = $cmd[1]; + + if (-f "data/online/ident/$id2show") { + open ID,"<data/online/ident/$id2show"; + my @id = <ID>; + close ID; + + if ($cmd eq "id") { + chomp($id[1]); + + &post_prv($alias,"<font color='ffa500'>$id2show <font color='ffffff'> hat die Temp-ID <font color='ff0000'>$id[1]</font> !</font></font>"); + + } else { + chomp($id[2]); + &post_prv($alias,"<font color='ffa500'>$id2show <font color='ffffff'> verwendet <font color='ff0000'>$id[2]</font> !</font></font>"); + + } + &reload_html; + } + + &post_prv($alias,"<font color='ffa500'>$id2show <font color='ffffff'> ist nicht eingeloggt !</font></font>"); + &reload_html; + +#############>- SYSTEMMELDUNG posten -< + } elsif ($cmd eq "cool") { + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + + &post($room,"<i><font color=ffffff>".×tring." $msg2post</font></i>", $alias); + &reload_html; + +#############>- REVERSE -< + } elsif ($cmd eq "rev") { + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + $msg2post = reverse($msg2post); + + &post($room,"<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $alias); + &reload_html; + } + } + } + } + } +#############>- FLÜSTERN ( Auch mit '/' ) -< + my ($alias2post,$msg2post,$action); + + if ($cmd eq "msg") { + $alias2post = $cmd[1]; + + for ($i=2; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + + } elsif ($cmd eq "") { + $alias2post = $whisper; + + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + + } else { + $alias2post = $cmd; + + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + + } + $msg2post =~ s#/me/#<i>$alias</i>#g; + $msg2post =~ s#/m/#<i><font color=$col>$alias</font></i>#g; + + if (-f "data/online/users/$alias2post" && !-f "data/online/rooms/$loginplace/$alias2post") { + &post_prv($alias,"<b><font color='$col'><i>Zu $alias2post geflüstert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &post_prv($alias2post,"<b><font color='$col'><i>$alias flüstert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &private_javascript($alias, $room, "parent.input.document.inf.whisper.value = '$alias2post';" ); + &reload_html; + } + + &post_prv($alias," <font color=ffffff>Benutzer oder Befehl <font color=ffa500>$alias2post</font> ist nicht anwesend/verfügbar! Bitte den Befehl \"/menu\" eingeben, um das Chat-Menü zu öffnen.</font></font>"); + &reload_html; +} + +1; diff --git a/0.7.1/config.pm b/0.7.1/config.pm new file mode 100644 index 0000000..3f379ff --- /dev/null +++ b/0.7.1/config.pm @@ -0,0 +1,44 @@ +# yChat - Copyright by Paul C. Bütow + +########################### Dieser Teil bestimmt die Standart-Variabeln. +##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.) +########################### +$limit = 50; # Benutzerlimit +$datum = "25.12.01"; # Datum der letzten Änderung (ändern erwünscht) +$version = "0.7.0.1"; # Bitte Hauptversionsnummer nicht ändern +$title = "yChat [$version]"; # Erscheint in der Browser-Leiste oben +$standardroom = "Cyberbar"; # Standardchatraum +$loginplace = "Lounge"; # Bezeichnung der Startseite nach dem Login +$localhost = "212.202.190.233"; # Host oder IP# des Chat-Servers +$localport = 2000; # Port über den fer Chat-Server läuft +$gfxpath = "http://$localhost/yChat"; # URL der Binärdaten (Grafiken etc.) +$bgcolor = "#3E535B"; # Hintergrundfarbe der HTML-Seiten +$chatbg = "#000000"; # Hintergrundfarbe des Chat-Frames + +# PS: Um einen Chat-Administrator anzulegen, dann die Datei data/hierachie +# anlegen, in eine Zeile muß folgendes eingetragen werden: "Nickname<;7" +# (Natürlich ohne Anführungsstriche) Nickname ist somit Chat-Administrator +# und kann Oberwächter und Wächter bestimmen! + +sub style { +print <<ENDCSS; +<style type="text/css"> + body { background-color: $bgcolor } + body.blank { background-color: $chatbg } + body.online { background-color: $chatbg } + div { font-family: arial, geneva, verdana, helvetiva; font-size: 12px; color: #ffffff } + div.b { font-weight: bold; color: #ffa500 } + a { color: #ffffef; } + a:hover { color: #ffffff; } + p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; } +</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; background-color: #ffffff; 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 +} + +1; diff --git a/0.7.1/help.sno b/0.7.1/help.sno new file mode 100644 index 0000000..2239eac --- /dev/null +++ b/0.7.1/help.sno @@ -0,0 +1,75 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table border=1> +<tr><th><div>SU</div></th><th><div>Befehl</div></th><th><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. Wird gar keine Farbe angegeben, dann wird eine zufällige generiert!</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>/exit</div></td><td><div>Komplett aus dem System ausloggen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/hits</div></td><td><div>Zeigt an vor wieviel Stunden der Chat-Server neugestartet wurde und die Hits und Hits per Minute seit dieser Zeit</div></td></tr> +<tr><td><div>NC</div></td><td><div>/ig <font color=red>Alias</font></div></td><td><div>Setzt/entfernt <font color=red>Alias</font> auf/aus die/der Ignorierliste. Wird das Argument weggelassen, so wird die Liste aller ignorierten Personen angezeigt</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>Chat 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>/selfkill</div></td><td><div>Sich selbst ganz und gar aus dem System entfernen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/sep <font color=red>Raumname</font></div></td><td><div>In den Raum <font color=red>Raumnamen</font> wechseln und gleichzeitig absperren</div></td></tr> +<tr><td><div>NC</div></td><td><div>/uptime</div></td><td><div>Siehe Befehl "/hits"</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>/banip <font color=red>Alias</font></div></td><td><div>Die IP-Nummer von <font color=red>Alias</font> verbannen</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/rbanip ip://<font color=red>x.x.x.x</font></div></td><td><div>Die IP-Nummer <font color=red>x.x.x.x</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>/img</div></td><td><div>Versteckt/reaktiviert das eigene Superuser-Logo im Online-Frame</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>/o <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird aus dem Chat ausgeloggt!</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/sl <font color=red>Raum</font></div></td><td><div>Einen anderen <font color=ffa500>Raum</font> absperren</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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=ffa500>Raum</font> ein <font color=ffa500>Thema</font > geben</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> +<tr><td><div><font color=red>AD</font></div></td><td><div>/cool <font color=red>Nachricht</font></div></td><td><div>Gibt für den aktuellen Raum eine Systemmeldung aus</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/id <font color=red>Alias</font></div></td><td><div>Zeigt TempID von <font color=red>Alias</font> an</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/ow <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Oberwächter ernennen</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/row <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom Oberwächter zum normalen Chatter degradieren</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/pw <font color=red>Alias</font></div></td><td><div>Zeigt das Passwort von <font color=red>Alias</font> an</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 ausgeführt 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 ledeglich 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><br> + Nur Oberwächer können Logdateien der Cyberbar lesen!<br><br> + Oberwächter ernennt nur der Systemadministrator! Dieser wiederum hat weitere spezielle Befehle die geheim sind und die nur ihm + vorbehalten sind und ihm das Administrieren erleichtert. +</div> +</body> +</html> diff --git a/0.7.1/hierachie.pm b/0.7.1/hierachie.pm new file mode 100644 index 0000000..f4b0f3c --- /dev/null +++ b/0.7.1/hierachie.pm @@ -0,0 +1,101 @@ +sub hierachie { + my ($alias,$room) = @_; + + open FILE, "<data/online/rstat/$room"; + my @rstat = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + + open FILE, "<data/hierachie"; + my @hierachie = <FILE>; + close FILE; + + my @userlevels = (@hierachie,@rstat); + foreach (@userlevels) { + my ($name, $level) = split "<;"; + + if ($name eq $alias) { + chomp $level; + return $level; + } + } +} + +sub hierachie_rm { + my $alias = shift; + my @return; + + open FILE, "<data/hierachie"; + my @hierachie = <FILE>; + close FILE; + + foreach (@hierachie) { + push @return, $_ + unless (/^$alias<;/); + } + + open FILE, ">data/hierachie"; + print FILE @return; + close FILE; +} + +sub hierachie_rm_rstat { + my ($alias,$room) = @_; + my @return; + + open FILE, "<data/online/rstat/$room" or return; + my @hierachie = <FILE>; + close FILE; + + foreach (@hierachie) { + push @return, $_ + unless (/^$alias<;/); + } + + open FILE, ">data/online/rstat/$room"; + print FILE @return; + close FILE; +} + + +sub hierachie_add { + my ($alias,$level) = @_; + + &hierachie_rm($alias); + + open FILE, ">>data/hierachie"; + print FILE "$alias<;$level\n"; + close FILE; +} + +sub hierachie_add_rstat { + my ($alias,$level,$room) = @_; + + &hierachie_rm_rstat($alias,$room); + + open FILE, ">>data/online/rstat/$room" or return; + print FILE "$alias<;$level\n"; + close FILE; +} + +sub prove_away { # Prüfen, ob Benutzer abgemeldet ist + my ($alias,$room) = @_; + + open AWAY,"<data/online/rstat/$room.away" or return; + @away = <AWAY>; + close AWAY; + + my $name, $away; + foreach(@away) { + + if (/^$alias.*/) { + ($name,$away) = split(/<; /); + chomp($away); + return $away; + } + } +} + + +1; diff --git a/0.7.1/htdocs.pm b/0.7.1/htdocs.pm new file mode 100644 index 0000000..0fd23d9 --- /dev/null +++ b/0.7.1/htdocs.pm @@ -0,0 +1,220 @@ + +sub htdocs { + + if ($var eq "help_html") { + &printfile("help.sno","Alle Chatbefehle"); + + } elsif ($var eq "logo_html") { + &start_html("Logo"); + &logo_html; + + } elsif ($var eq "menu_html") { + &menu_html; + + } elsif ($var eq "logs_html") { + &logs_html; + + } elsif ($var eq "view_logs_html") { + &secure_checkid($alias,$tmpid); + &printfile("data/logs/$tmp","Logdatei","blank") + if (5 <= &hierachie($alias)); + + } elsif ($var eq "superuser_html") { + &secure_checkid($alias,$tmpid); + &superuser_html; + + } elsif ($var eq "chatiquette_html") { + &printfile("chatiq.sno","Chatiquette"); + print $q->end_html; + + } else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; + } +} + +sub menu_html { + &start_html("Menü"); +print <<END; +<div> + Von hier aus kannst du alle Untermenüpunkte des Systems erreichen: +</div> +<hr> +END +&menu(); +print "</body>\n</html>"; +} + +sub logo_html { +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=$bgcolor> + <EMBED src="$gfxpath/ySymbol.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=48 HEIGHT=48 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED> + </OBJECT> + </div></layer> +END + print $q->end_html; +} + + + +sub logs_html { + &start_html("Logdateien"); + &menu; + print <<END; +<div> + Hier befinden sich alle Logdateien +</div> +<hr> +END + if (5 <= &hierachie($alias)) { + print $q->div( "Folgende Logdateien des Raumes \"$standardroom\" können nur von Oberwächtern oder höher gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + + opendir(LOGS,"data/logs"); + my @logs = readdir(LOGS); + closedir(LOGS); + + my @sortedir = sort(@logs); + + foreach(@sortedir) { + + if (-f "data/logs/$_") { + print $q->a( { -href=>"chat?request=htdocs&alias=$alias&var=view_logs_html&tmp=$_&tmpid=$tmpid", + -target=>"_new" }, + "$_" ), + " "; + } + } + } else { + print $q->div( "Logdateien kö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; + } + print + $q->end_html; +} + +sub superuser_html { # Zeigt an, wer Superuser ist + start_html("Superuser"); + &menu; + + print "<div>Hallo $alias. Du bist als "; + my $hierachie = &hierachie($alias); + if (7 <= $hierachie) { + print + $q->b( "Administrator" ), + " (AD) eingetragen.</div><br>", + $q->br; + } elsif (5 <= $hierachie) { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.</div><br>", + $q->br; + } elsif (3 <= $hierachie) { + print + $q->b( "Wächter" ), + " (WÄ) eingetragen.</div><br>", + $q->br; + } else { + print + $q->b( "normaler Chatter" ), + " (NC) eingetragen.</div><br>", + $q->br; + } + +open FILE, "data/hierachie"; + my @hierachie = <FILE>; +close FILE; + +my @ows, @was, @ads; +foreach (@hierachie) { + my ($name,$level) = split "<;"; + chomp $level; + + if ($level == 3) { + push @was, $name; + + } elsif ($level == 5) { + push @ows, $name; + + } elsif ($level == 7) { + push @ads, $name; + } + + + if (3 <= $hierachie) { + if ($level == 4) { + push @was, "$name!"; + + } elsif ($level == 6) { + push @ows, "$name!"; + + } elsif ($level == 8) { + push @ads, "$name!" ; + } + } +} + + my $nads = $#ads+1; + print "<div>", $q->b( "AD" ), "s ($nads Stück)"; + + foreach(@ads) { + print $q->font( { -color=>"ffa500" }, " ".$_); + } + + my $nrow = $#ows+1; + print "</div><br><br><div>", $q->b( "OW" ), "s ($nrow Stück)"; + + foreach(@ows) { + print $q->font( { -color=>"ffa500" }," ".$_); + } + + my $nrwa = $#was+1; + print "</div><br>", $q->br, "<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="chat?request=htdocs&var=help_html">Chat-Befehle</a>" + dokumentiert. Versteckte Superuser können nur von anderen Superusern auf +dieser Liste eingesehen werden! +</div> +</body> +</html> +END +} + +sub menu { +print <<MENUEND; +<div> + <a href='chat?request=main2&var=edit_profile_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Profil ändern</a> + <a href='chat?request=main2&var=edit_options_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Optionen</a> + <a href='chat?request=main2&var=list_alias_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Benutzer</a> + <a href='chat?request=htdocs&var=help_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Befehle</a> + <a href='chat?request=main2&var=gb_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Board</a> + <a href='chat?request=htdocs&var=superuser_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Superuser</a> + <a href='chat?request=htdocs&var=logs_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Logs</a> + <a href='chat?request=stat&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Statistik</a> + <a href='chat?request=htdocs&var=chatiquette_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Chatiquette</a> +</div> +<hr> +MENUEND +} + + +1; diff --git a/0.7.1/input.pm b/0.7.1/input.pm new file mode 100644 index 0000000..a659a50 --- /dev/null +++ b/0.7.1/input.pm @@ -0,0 +1,195 @@ +sub input { + + &rm_away($alias,$room); + + $maxVerlauf = "10" + if ($maxVerlauf eq undef); + + $verlaufOrder = "1" + if ($verlaufOrder eq undef); + + if ($tmp eq "login") { + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> hat den Chat im Raum <b>$room</b> betreten ...</font></i>"); + } + +print <<END; +<html> +<head> +<script language="JavaScript"><!-- + +// Einstellungsvariablen +maxVerlauf = $maxVerlauf; // Anzahl der Einträge des Verlaufs +maxPreview = 20; // Zeichenlänge der Verlaufsvorschau +verlaufOrder = $verlaufOrder; // Neue Nachrichten von: 0=oben, 1=unten +//autoAwayTimeout = 5; // Sekunden, nach denen der User 'Away' gesetzt wird +//autoQuitTimeout = 10; // 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.msg.focus(); // Fukus in das Eingabeform + document.inf.msg.select(); // Text im Eigabeform markieren + document.inf.submit(); // Formular absenden + 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 ("chat?request=main1&alias=$alias&tmpid=$tmpid&msg=%2faway&tmp=autoaway","reload"); // 'Away' setzen + userAway = true; + } + } + else + { + if (autoQuitTimeout < userAwayTime) // Falls Zeit abgelaufen + { + open ("chat?request=main1&alias=$alias&tmpid=$tmpid&msg=%2fexit&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> +END + +&style; + +print <<END; +</head> +<body class="blank" onload="initFrame();"> + <div align="left"> + <table border="0" cellpadding="0" cellspacing="0"> + <tr> + <td> + <form name="inf" target="reload" action="chat" onsubmit="return delout();"> + <input type="hidden" name="request" value="main1"> + <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="40" maxlength="300" 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>- 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 + +$client->$shutdown(2); +exit 0; +} + +1; diff --git a/0.7.1/loggedin.pm b/0.7.1/loggedin.pm new file mode 100644 index 0000000..8899a29 --- /dev/null +++ b/0.7.1/loggedin.pm @@ -0,0 +1,89 @@ +sub loggedin { # Startseite nach dem Login + &start_html($loginplace,'blank'); + + print <<END; +<div> + <font color='$col'>$alias</font>, schön daß Du hier bist :-) +</div> +<hr> +<div> +<a href="chat?request=stream&alias=$alias&room=$standardroom&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder">Hier</a> +kannst du den Standardraum $standardroom betreten. <br><br> +END +# <form action="chat"> +# <div> +# Raum der betreten werden soll:<br> +# <input name="room" value="Cyberbar"> +# <input type="hidden" name="request" value="stream"> +# <input type="hidden" name="alias" value="$alias"> +# <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="maxVerlauf" value="$maxVerlauf"> +# <input type="hidden" name="verlaufOrder" value="$verlaufOrder"> +# <input type="submit" value="Betreten"> +# </div> +# </form> +# <br> +#<div> +# Folgende Personen sind anwesend: +#</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); + + my $nr = $#roomdir-1; + + if ($door || $_ eq $loginplace) { + print $q->b( $_ )," $door ($nr) "; + + } else { + print + $q->b( $q->a( { -href=>"chat?request=stream&alias=$alias&room=$_&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" }, "$_") ), " ($nr)"; + } + + print " Raumthema: $rstat[1]" if ($rstat[1] ne "\n"); + print $q->br; + + foreach(@roomdir) { + if ($_ ne ".." && $_ ne ".") { + print $q->a( { -href=>"chat?request=main2&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid" }, "$_"), " "; + } + } + + print $q->br, $q->br; + } + } + + print + $q->br, $q->br, + $q->b( $q->font( { -color=>"ffa500" }, "Aktuelles:" ) ), + $q->br, + "Wie ihr seht, ist der neue yChat da. Allerdings ist es gut Möglich, daß diese Version einige Bugs beinhaltet! ", + "Solltest du welche entdecken, dann schick doch bitte eine Mail an <a href='mailto:snooper\@ychat.de'>snooper\@ychat.de</a>.", + "<br><br>Leider konnten noch nicht alle geplanten Features eingebaut werden. Dazu fehlte leider die Zeit.", + " Denn mit steigendem Sourcecode leidet leider auch das schnelle Anpassungsvermögen neuer Ideen.<br><br>", + "Aber egal, hauptsache der Chat läuft wieder :-) Mfg, Snooper ...</div>", + $q->end_html; +} + +1; diff --git a/0.7.1/main1.pm b/0.7.1/main1.pm new file mode 100644 index 0000000..34720b6 --- /dev/null +++ b/0.7.1/main1.pm @@ -0,0 +1,57 @@ +sub main1 { + + if (!-e "data/online/rooms/$room/$alias" && $tmp ne "autoaway" && $tmp ne "autologout") { + &post_prv($alias,"<font color=ffffff>Du befindest Dich nicht im Raum <font color=ffa500>$room</font> und kannst dort auch keine Nachrichten posten!</font>"); + &reload_html; + + } elsif (length($msg) > 300) { + &post_prv($alias,"<font color=ffffff>Deine Nachricht enthält zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>"); + &reload_html; + } + + if ($tmp eq "away") { + &rm_away($alias,$room); + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> hat sich zurück gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &private_javascript($alias, $room, "parent.input.document.inf.tmp.value = 'notaway';"); + } + + $msg =~ s#<#<\;#g; + + if (substr($msg,0,1) ne "/") { + + unless ($tmp eq "autoaway") { + &prove_color($alias,$_) + foreach($col, $secol); + } + + open MSGFILE,">>data/msgs/$room"; + unless ($msg =~ s#/me/#<i>$alias</i>#g || $msg =~ s#/m/#<i><font color=$col>$alias</font></i>#g) { + print MSGFILE "!<;".time."<;!<;!<;<b><font color='$col'>$alias: <font color='$secol'>$msg<br></font></font></b><;$alias<;\n"; + + } else { + $msg =~ s#/me/#<i>$alias</i>#g; + $msg =~ s#/m/#<i><font color=$col>$alias</font></i>#g; + print MSGFILE "!<;".time."<;!<;!<;<b><font color=$secol>$msg</font></font></b><br><;$alias<;\n"; + } + close MSGFILE; + + opendir PID,"data/online/pids/$room"; + my @pids = readdir(PID); + closedir(PID); + + foreach(@pids) { + kill USR1 => $_ + if (-f "data/online/pids/$room/$_"); + } + + &log("<b><font color=$col>$alias: <font color=$secol>$msg</font></font></b>") + if ($room eq $standardroom); + + &reload_html; + + } else { + &command($msg,$tmp); + } +} + +1; diff --git a/0.7.1/main2.pm b/0.7.1/main2.pm new file mode 100644 index 0000000..3165c16 --- /dev/null +++ b/0.7.1/main2.pm @@ -0,0 +1,626 @@ +sub main2 { + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### + +if ($var eq "list_alias_html") { + &list_alias_html; + +} elsif ($var eq "alias_html") { + &alias_html; + +} elsif ($var eq "edit_profile_html") { + &secure_checkid($alias,$tmpid); + &edit_html("edit_profile_html"); + +} elsif ($var eq "edit_options_html") { + &secure_checkid($alias,$tmpid); + &edit_html("edit_options_html"); + +} elsif ($var eq "gb_html") { + &gb_html; + +} elsif ($var eq "post_gb") { + &secure_checkid($alias,$tmpid); + &post_gb; + +} elsif ($var eq "edit_profile") { + &secure_checkid($alias,$tmpid); + &edit("edit_profile"); + +} elsif ($var eq "edit_options") { + &secure_checkid($alias,$tmpid); + &edit("edit_options"); + +} elsif ($var eq "rm_gb_alias") { + &secure_checkid($alias,$tmpid); + &rm_gb; + +} else { + &error("Parameter fehlt"); +} +} +########################### +##HAUPTTEIL DIESER DATEI:## +########################### + +sub gb_html { # Das Benutzerboard/Gästebuch. + my $message = $_[0]; + &start_html("Benutzerboard"); +&menu(); +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="chat"> + <input type="hidden" name="request" value="main2"> + <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 + my ($secs, $mins, $hours, $days, $months, $years) = &timearray; + + if ($msg eq "") { + if ($id eq "y") { # Überprüfen, ob Benutzerboard- oder Privatgästebuch + &gb_html("post_empty"); + + } else { + &alias_html("post_empty"); + } + + $client->shutdown(2); + exit 0; + } + + $msg =~ s#<#<\;#g; + $msg =~ s#\n#<br>#g; + + my $tmpath = ""; + + if ($id eq "y") { + $tmpath = "data/guestbook"; + + } else { + $tmpath = "data/user/gbooks/$tmp"; + } + + open(GB,"$tmpath"); + my @gb = <GB>; + close GB; + + pop(@gb) if ($#gb > 99); + my @newdatei = "<br><b>$alias schrieb am $days.$months.$years um $hours:$mins:$secs ...</b><br>$msg<br>\n"; + push(@newdatei,@gb); + + open(GB,">$tmpath"); + print GB @newdatei; + close GB; + + if ($id eq "y") { + &gb_html("post_ok"); + $client->shutdown(2); + exit 0; + + } else { + post_prv($tmp,"<font color=ffffff>$alias hat soeben einen Pin in Dein Profil gehängt ... </font>"); + &alias_html; + $client->shutdown(2); + exit 0; + } +} + +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; +&menu(); +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=>"chat?request=main2&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); + &menu(); +print <<END; +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="chat"> + <input type="hidden" name="request" value="main2"> + <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; + my $nr = 1; + if ($alias ne $tmp) { + foreach(@datei) { + print "<br>Eintrag # $nr: $_"; + $nr++; + } + } else { +print <<END; + <table> + <form action="chat"> + <input type="hidden" name="request" value="main2"> + <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> + <br> + Eintrag # $nr: + $datei[$i] + </div> + </td> + </tr> +END +$nr++; +} +print <<END; + </table> + <table> + <tr> + <td> + <font color=ffffff> + <input type="submit" value="Markierten Eintrag löschen"> + </font> + </td> + <td> + <font color=ffffff> + <input type="reset" value="Markierung 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; + + foreach(@data) { + chomp $_; + } + + &menu(); + + if ($method eq "edit_options_html") { + if ($message eq "edit_options_ok") { +# &private_javascript($alias, &get_room($alias), "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';" ); + +print <<END; +<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="chat"> + <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> + <hr> + <div>Einstellungen für den Nachrichten-Verlauf</div> + <table> + <tr> + <td> + <br> + <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div> + <font color=ffffff> + <select name="maxVerlauf" size="1"> + <option value="$data[3]">$data[3] +END +for($i=1;$i<=50;$i++) { + print "<option value=\"$i\">$i"; +} +print<<END; + </select> + </font> + </td> + </tr> + <tr> + <td> + <br> +<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div> + <font color=ffffff> + <select name="verlaufOrder" size="1"> + <option value="$data[4]">Bisherige Einstellung ($data[4]) + <option value="0">Neue Verlaufnachrichten oben (0) + <option value="1">Neue Verlaufnachrichten unten (1) + </select> + </font> + </td> + </tr> + </table> +<br> + <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div> + <hr> + <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 markieren 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="chat"> + <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="request" value="main2"> + <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]; + + if ($method eq "edit_profile") { + my $url = $homepage; + $url =~ s#^http://*##; + + open(PROFILE,">data/user/profiles/$alias"); + my $profile = "$nachname\n$vorname\n$alter\n$wohnort\n$email\n$icq\nhttp://$url\n$weiteres"; + $profile =~ s#<#<\;#g; + print PROFILE $profile; + + close PROFILE; + &edit_html("edit_profile_html","edit_profile_ok"); + + } elsif ($method eq "edit_options") { + if ($id ne $tmp) { + &edit_html("edit_options_html","edit_pw_wrong"); + $client->shutdown(2); + exit 0; + } + + open(OPTIONS,">data/user/options/$alias"); + my $options = "$id\n$col\n$secol\n$maxVerlauf\n$verlaufOrder"; + $options =~ s#<#<\;#g; + print OPTIONS $options; + close OPTIONS; + + my $room = &get_room($alias); + + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';" ); + &post($room,"<i><font color=ffffff>".×tring." <font color='$col'>$alias</font> <font color='$secol'>hat seine Chat-Einstellungen geändert</font> ...</font></i>", $alias); + &post_strmsg($alias,$room,'col',"$col;$secol"); + + &edit_html("edit_options_html","edit_options_ok"); + } +} + + +1; diff --git a/0.7.1/online.pm b/0.7.1/online.pm new file mode 100644 index 0000000..de7e08b --- /dev/null +++ b/0.7.1/online.pm @@ -0,0 +1,151 @@ + +sub online { + + &secure_checkid($alias,$tmpid); + + my @away = &prove_away($alias,$room,"return_list"); + + while (true) { + for ($i=0;$i<=$#away;$i+=2) { + last + if ($away[$i] eq $alias || $room eq $loginplace); + } + + open(DATEI,"<data/online/users/$alias"); + my $oldstamp = <DATEI>; + close DATEI; + + if ($oldstamp > (time - 100)) { + open(DATEI,"<data/user/counts/$alias.online"); + my $online = <DATEI>; + close DATEI; + + my $total = (time-$oldstamp+$online); + open DATEI,">data/user/counts/$alias.online"; + print DATEI $total; + close DATEI; + } + + last; + } + +unless (-d "data/online/rooms/$room") { + mkdir "data/online/rooms/$room", 0777; +} + + open(DATEI,">data/online/users/$alias"); + print DATEI time; + close DATEI; + + open(DATEI,">data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + + open(DATEI,"<data/online/prove"); + my $provetime = <DATEI>; + close DATEI; + + &check_online + if ($provetime < (time - 40)); + +print<<HEADER; +<html> + <head> + <meta http-equiv="refresh" content="20" URL="chat?request=online&room=$room&alias=$alias&tmpid=$tmpid"> + <style type="text/css"> + a { font-family: arial; font-size:11px; color: #ffffef; } + a:hover { color: #ffffff; } + </style> + <style type="text/css" media="all"> + a { text-decoration: none; } + a:hover { text-decoration:underline; } + </style> + </head> + <body bgcolor="$chatbg"> +HEADER + + opendir(ROOM,"data/online/rooms/".$room); + my @room = sort(readdir(ROOM)); + closedir(ROOM); + + my $chatter = $#room-1; + + print "<font size='1' color='ffffff' face='arial'>$room ($chatter):</font><table>\n"; + + open FILE, "<data/online/rstat/$room"; + my @rstat = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + + open FILE, "<data/hierachie"; + my @userlevels = (<FILE>,@rstat); + close FILE; + + open FILE, "<data/online/rstat/$room.away"; + my @away = <FILE>; + close FILE; + + foreach my $nick (@room) { + if (-f "data/online/rooms/$room/$nick") { + + my $inside = 0; + foreach (@away) { + my ($name,$awaymessage) = split "<;"; + + if ($name eq $nick) { + chomp $awaymessage; + print "<tr><td><img title='$awaymessage' alt='$awaymessage' src='$gfxpath/away.gif'></td>"; + $inside = 2; + } + } + + if ($inside == 0) { + foreach (@userlevels) { + my ($name,$level) = split "<;"; + + if ($nick eq $name) { + chomp $level; + $inside = 1; + + if ($level == 1) { + print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>"; + last; + + } elsif ($level == 2) { + print "<tr><td><img title='Die Unschuld vom Land' alt='Die Unschuld vom Land' src='$gfxpath/uvl.gif'></td>"; + last; + + } elsif ($level == 3) { + print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>"; + last; + + } elsif ($level == 5) { + print "<tr><td><img title='oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>"; + last; + + } elsif ($level == 7) { + print "<tr><td><img title='Administrator' alt='Administrator' src='$gfxpath/adm.gif'></td>"; + last; + + } else { + print "<tr><td></td>"; + last; + } + } + } + } + + if ($inside == 0) { + print "<tr><td></td>"; + } + + print "<td><a href='chat?request=main2&var=alias_html&alias=$alias&tmp=$nick&tmpid=$tmpid' target='$nick'>$nick</a></td></tr>\n"; + } + } + + print "</table></body></html>"; + +} + +1; diff --git a/0.7.1/setup.sh b/0.7.1/setup.sh new file mode 100644 index 0000000..342e9c7 --- /dev/null +++ b/0.7.1/setup.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +mke2fs /dev/ram0 +mke2fs /dev/ram1 + +mkdir data +cd data +mkdir {logs,msgs,user,online} +mount /dev/ram0 msgs +mount /dev/ram1 online +cd user +mkdir {counts,memos,options,profiles,gbooks,lastlogin} +cd ../online +mkdir {rstat,rooms,pids,users,ident,tmpid} +cd .. +cdhmod 777 * -R +chown paul * -R + diff --git a/0.7.1/shared.pm b/0.7.1/shared.pm new file mode 100644 index 0000000..2d712aa --- /dev/null +++ b/0.7.1/shared.pm @@ -0,0 +1,478 @@ +############### Dieser TeFil enthält Programmcode, der an verschiedenen +##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur +############### Verfügung steht. + +sub reload_html { + print "<html><body bgcolor='$chatbg'></body></html>"; + $client->shutdown(2); + exit 0; +} + +sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus + my ($file2print,$pagetitle,$bodyclass) = @_; + + &start_html($pagetitle,$bodyclass) + if ($pagetitle ne ""); + + &menu + unless ($bodyclass eq "blank"); + + open(FILE2PRINT,"<$file2print"); + + print "$_\n" + while(<FILE2PRINT>); + + close FILE2PRINT; +} + +sub start_html { # Der HEADER einer HTML-Datei + print "<html><head><title>$title - $_[0]</title>$_[2]"; + &style; + print "</head>"; + + if ($_[1] eq "start") { + print "<body onload=\"document.login.alias.focus();\">"; + + } elsif ($_[1] ne "") { + print "<body class=$_[1]>"; + + } else { + print "<body>"; + } +} + +sub post { # Öffentliche Nachricht posten. + my ($room,$msg2post,$alias,$secroom) = @_; + my @rooms = $room; + + @rooms = ($room,$secroom) + if ($room ne $secroom); + + foreach my $theroom (@rooms) { + open(MSGFILE,">>data/msgs/$theroom"); + print MSGFILE "!<;".time."<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + + opendir(PID,"data/online/pids/$theroom"); + my @pids = readdir(PID); + closedir(PID); + + foreach(@pids) { + kill USR1 => $_ + if (-f "data/online/pids/$theroom/$_"); + } + } + + &log($msg2post) + if ($room eq $standardroom); +} + +sub post_prv { # Private Nachricht posten (flüstern). + my ($alias2post,$msg2post) = @_; + my $roomofalias = &get_room($alias2post); + + return false + if (!$roomofalias); + + open(MSGFILE,">>data/msgs/$roomofalias"); + print MSGFILE "$alias2post<;".time."<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + + opendir(PID,"data/online/pids/$roomofalias"); + my @pids = readdir(PID); + closedir(PID); + + foreach(@pids) { + kill USR1 => $_ + if (-f "data/online/pids/$roomofalias/$_"); + } + + return true; +} + +sub post_strmsg { # Einen Befehl an den Chat-Stream-Prozess senden + my ($alias,$room, $command,$action) = @_; + + open MSGFILE,">>data/msgs/$room"; + print MSGFILE "$alias<;".time."<;$command<;$action<;!<;!<;\n"; + close MSGFILE; + + opendir(PID,"data/online/pids/$room"); + my @pids = readdir(PID); + closedir(PID); + + foreach(@pids) { + kill USR1 => $_ + if (-f "data/online/pids/$room/$_"); + } +} + + +sub log { # Protokollieren der Nachrichten etc. + my $msg2log = $_[0]; + my ($secs, $mins, $hours, $days, $months, $years) = &timearray; + + my $js; + + ($msg2log,$js) = split(/<script/, $msg2log); + + open(LOG,">>data/logs/$days.$months.$years"); + print LOG "<br><font color=ffffef><i>($hours:$mins:$secs)</i></font> $msg2log\n"; + close LOG; +} + +sub timestring { # Aktuelles Datum und Uhrzeit bestimmen. + my ($mins, $hours) = (localtime)[1,2]; + + $hours = "0".$hours + if ($hours < 10); + + $mins = "0".$mins + if ($mins < 10); + + + return "$hours:$mins"; +} + +sub timearray { + my ($secs, $mins, $hours, $days, $months, $years) = (localtime)[0..5]; + + $months += 1; + + $hours = "0".$hours + if ($hours < 10); + + $mins = "0".$mins + if ($mins < 10); + + $secs = "0".$secs + if ($secs < 10); + + $days = "0".$days + if ($days < 10); + + $months = "0".$months + if ($months < 10); + + $years = $years - 100; + + if ($years < 10) { + $years = "200".$years; + + } else { + $years = "20".$years; + } + + return ($secs, $mins, $hours, $days, $months, $years); +} + +sub error { # 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 "Alias: $alias TempID: $tmpid File. $0 PID: $$ Time: ".time." Message: $error_msg \n"; + close ERROR; + + $client->shutdown(2) if ($client); + exit 0; +} + +sub check_online { # Auf alte Räume und Chatter prüfen und ggf. entfernen. + open(PROVE,">data/online/prove"); + print PROVE time; + close PROVE; + + opendir(DIR, "data/online/rooms"); + my @roomdir = readdir(DIR); + closedir(DIR); + + foreach my $theroom (@roomdir) { + opendir(DIR, "data/online/rooms/$theroom"); + my @roomusers = readdir(DIR); + closedir(DIR); + + my $empty = 1; + + foreach $user (@roomusers) { + + if (-f "data/online/rooms/$theroom/$user") { + + $empty = 0; + + open (USER,"<data/online/rooms/$theroom/$user"); + my $userstamp = <USER>; + close USER; + + if ($userstamp < (time - 40)) { + + unlink("data/online/$theroom/$user"); + + open (USER,"<data/online/users/$user"); + my $userstamp = <USER>; + close USER; + + if ($userstamp < (time - 40)) { + + if ($user ne $alias) { + &rm_alias($user,$theroom); + + } else { + unlink("data/online/rooms/$theroom/$user"); + } + &post($theroom,"<i><font color=ffffff>".×tring." <b>$user</b> hat den Chat verlassen ... </font></i>"); + } + } + } + } + + opendir(PIDS,"data/online/pids/$theroom"); + my @pids = readdir(PIDS); + closedir(PIDS); + + if ($empty == 1) { # Falls Raum leer ist => entf. + rmdir("data/online/rooms/$theroom"); + unlink("data/online/rstat/$theroom"); + unlink("data/online/rstat/$theroom.away"); + unlink("data/msgs/$theroom"); + + foreach(@pids) { + unlink("data/online/pids/$theroom/$_") + if (-f "data/online/pids/$theroom/$_"); + } + rmdir("data/online/pids/$theroom"); + } + } +} + +sub secure_checkid { # TmpID überprüfen + my ($alias2check, $tmpid) = @_; + &error("Falsche TempID! $tmpid") + unless (-f "data/online/tmpid/$alias.$tmpid"); +} + +sub rm_alias { # Falls Benutzer offline gegangen ist + my($alias,$room) = @_; + + unlink("data/online/rooms/$room/$alias"); + unlink("data/online/users/$alias"); + + opendir TMPID, "data/online/tmpid"; + my @tmpid = readdir(TMPID); + close(TMPID); + + foreach(@tmpid) { + unlink("data/online/tmpid/$_") + if (/^$alias\..+$/); + } + + unlink("data/online/ident/$alias"); + &rm_rstat($alias,$room); +} + +sub rm_rstat { # Benutzer als Raumbesetzer austragen + my ($alias,$room) = @_; + + open (RSTAT,"<data/online/rstat/$room"); + my @rstat = <RSTAT>; + close RSTAT; + + my @rstat2 = ($rstat[0],$rstat[1]); + + for ($i=2;$i<=$#rstat;$i++) { + chomp($rstat[$i]); + push(@rstat2,$rstat[$i]."\n") + unless ($rstat[$i] =~ /^$alias<;/); + } + + open (RSTAT,">data/online/rstat/$room"); + print RSTAT @rstat2; + close RSTAT; +} + +sub rm_away { # Benutzer als Raumbesetzer austragen + my ($alias,$room) = @_; + + open (AWAY,"<data/online/rstat/$room.away"); + my @away = <AWAY>; + close AWAY; + + my @away2; + foreach (@away) { + my @split = split(/<;/); + push(@away2, $_) if ($alias ne $split[0]); + } + + open (AWAY,">data/online/rstat/$room.away"); + print AWAY @away2; + close AWAY; +} + +sub rm_entry { + my ($entry,$file) = @_; + + open ENTRY, "<data/$file"; + my @entry = <ENTRY>; + close ENTRY; + my @new; + + foreach(@entry) { + push @new,$_ + if ($entry."\n" ne $_); + } + + if (@entry != @new) { + open ENTRY, ">data/$file"; + print ENTRY @new; + close ENTRY; + return 1; + + } else { + return; + } +} + +sub add_entry { + my ($entry,$file) = @_; + + open ENTRY, "<data/$file"; + my @entry = <ENTRY>; + close ENTRY; + + foreach(@entry) { + chomp; + return + if ($entry eq $_); + } + + open ENTRY, ">>data/$file"; + print ENTRY $entry."\n"; + close ENTRY; + + return 1; +} + +sub prove_color { + my ($alias,$color) = @_; + my $length = length($color); + + if ($length > 6 || $length < 6) { + &post_prv($alias,"<font color=ffffff>Ungültige Hexadezimalfarbe.</font>"); + &reload_html; + } +} + +sub kill_alias { + my ($alias2kill, $alias) = @_; + my ($secs, $mins, $hours, $days, $months, $years) = &timearray; + + unlink("data/user/options/$alias2kill"); + unlink("data/user/profiles/$alias2kill"); + unlink("data/user/gbooks/$alias2kill"); + unlink("data/user/counts/$alias2kill"); + unlink("data/user/counts/$alias2kill.online"); + unlink("data/user/lastlogin/$alias2kill"); + unlink("data/user/memos/$alias2kill"); + + &rm_entry($alias2kill,'ban'); + + open(DEL, ">>data/kill"); + print DEL "($days.$months.$years $hours:$mins:$secs) $alias2kill wurde von $alias gekillt\n"; + close DEL; +} + +sub random_color { + my @digit = ("F","C","A","B",5..9); + my $dig1 = rand(@digit); + my $dig2 = rand(@digit); + my $dig3 = rand(@digit); + my $dig4 = rand(@digit); + my $dig5 = rand(@digit); + my $dig6 = rand(@digit); + + return $digit[$dig1].$digit[$dig2].$digit[$dig3].$digit[$dig4].$digit[$dig5].$digit[$dig6]; +} + +sub url_decode { + my $t = shift; + + $t =~ s/\///; + $t =~ tr/\+/ /; + + while( $t =~ s/%([a-f0-9][a-f0-9])/chr( hex( $1 ) )/ei ) {}; + + return $t; +} + +sub url_encode { + my $t = shift; + while( $t =~ s/([^\w()'*~!.-])/sprintf '%%%02x', $1/eg ) {}; + return $t; +} + +sub calculate_hpm { + my ($hits, $starttime) = @_; + return sprintf( "%.2f", $hits / ( ( time - $starttime ) / 60 ) ); +} + +sub calculate_uptime_hours { + my $starttime = shift; + return sprintf( "%.2f", ( time - $starttime ) / 3600 ); +} + +sub private_javascript { + my ($alias, $room, $javascript) = @_; + + open MSGFILE,">>data/msgs/$room"; + print MSGFILE "$alias<;".time."<;!<;!<;<script language=\"JavaScript\">$javascript</script><;\n"; + close MSGFILE; + + opendir PID,"data/online/pids/$room"; + my @pids = readdir(PID); + closedir(PID); + + foreach(@pids) { + kill USR1 => $_ + if (-f "data/online/pids/$room/$_"); + } +} + +sub get_theme { # Raumthema eines Raums holen + my $room = shift; + + open RSTAT,"data/online/rstat/$room"; + my @rstat = <RSTAT>; + close RSTAT; + + chomp($rstat[1]); + + return "<b>Raumthema:</b>".$rstat[1] + if ($rstat[1] ne undef); +} + +sub get_room { # Den Raum finden, wo sich Alias befindet + my $alias = shift; + + opendir(DIR,"data/online/rooms"); + my @dir = readdir(DIR); + closedir(DIR); + + foreach my $room (@dir) { + opendir(DIR,"data/online/rooms/$room"); + my @chatter = readdir(DIR); + closedir(DIR); + + foreach my $chatter (@chatter) { + return $room + if ($chatter eq $alias); + } + } +} + + +sub debug { open DEBUG,">data/debug"; while(@_) { chomp; print DEBUG "$_\n"; } close DEBUG;} +1; diff --git a/0.7.1/start.pm b/0.7.1/start.pm new file mode 100644 index 0000000..563a3cc --- /dev/null +++ b/0.7.1/start.pm @@ -0,0 +1,506 @@ + +sub start { + +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + &login_html; +} elsif ($var eq "chatiquette_html") { + &chatiquette_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} +} + +sub login_html { # Erste Startseite +&check_online; +local $counter = undef; +open(COUNT,"<data/count"); + $counter = <COUNT>; +close COUNT; +$counter++; +open(COUNT,">data/count"); + flock(COUNT, 2); + print COUNT $counter; +close COUNT; +opendir(USERS,"data/online/users"); + my @users = readdir(USERS); +closedir(USERS); +opendir(REGISTRED,"data/user/options"); + local @registred = readdir(REGISTRED); +closedir(REGISTRED); +my ($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=$bgcolor> + <embed src="$gfxpath/yIntro.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=240 HEIGHT=240 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED> + </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> + Benutzerlimit: $limit + <br><br> + Server: $localhost:$localport + <br><br> + Page: <a href="http://www.yChat.org">www.yChat.org</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 "autologout") { +print <<END; + <div> + Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv. + <br> + Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-) + </div> +END + } elsif ($tmp eq "autokick") { +print <<END; + <div> + Du wurdest automatisch aus dem Chat katapultiert. Grund: Du hast den Chat geflutet! + <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> + Du wurdest aus dem Chat 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 ($tmp eq "selfkill") { +print <<END; + <div> + Du hast dich soeben ganz und gar aus dem System gelöscht! + <br> + Wenn du dir einen neuen Nick angelen willst, dann einfach auf "Registrieren" klicken! :-) + </div> +END + } elsif ($tmp eq "selfkill") { +print <<END; + <div class=b> + ACHTUNG! + </div> + <div> + Du wurdest soeben aus dem Chat ausgeloggt! + <br> + Ursache hierfür mag sein, daß der Chat voll war und Du Dich nicht am + Geschehen beteiligt- und unnötige Chatkapazitäten in Anspruch + genommen hast. + <br> + Sorry! + </div> +END + } elsif ($tmp eq "full") { + print "<div class=b>ACHTUNG!</div><div>Der Chat ist leider voll! Bitte versuch Dich später noch mal einzuloggen!</div>"; + } 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="chat" method="GET"> + <input type="hidden" name="request" value="start"> + <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="chat"> + <input type="hidden" name="request" value="start"> + <input type="hidden" name="var" value="create_alias_html"> + <font color="ffffff"> + <input type="submit" value="Registrieren"> + </font> + </form> + </td> + </tr> + </table> + <hr> +END +if ($logtin > 0) { + print "<div>Folgende Personen sind eingeloggt:<br><font size='1'>"; + foreach(@users) { + print "$_ " if (-f "data/online/users/$_"); + } + print "</font></div>"; +} +print<<END; + </td> + </tr> + </table> + </center> +</body> +</html> +END + if (-d "data/online/rooms") { + } else { + mkdir "data/online/rooms", 0777; + } +} + +sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers. + open(BAN,"<data/ban"); + my @ban = <BAN>; + close BAN; + foreach(@ban) { + chomp; + if ($_ eq "ip://".$client->peerhost()) { + $tmp = "banned"; + &login_html; + $client->shutdown(2); + exit 0; + } + } +my $reload = $_[0]; +&start_html("Registration"); +print <<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 +} elsif ($reload eq "alias_length") { +print <<END; + <div class=b> + ACHTUNG! + </div> + <div> + Dein gewählter Benutername "$alias" enthält zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!! + </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="chat"> + <input type="hidden" name="request" value="start"> + <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. +opendir(USERS,"data/online/users"); + my @users = readdir(USERS); +closedir(USERS); + my $users = $#users; + my $hierachie = &hierachie($alias); + if ($users > $limit && $hierachie ne "wa" && $hierachie ne "ow") { + $tmp = "full"; + &login_html; + exit 0; + } + my $lognotexists = "true"; + opendir(USERDIR,"data/user/options"); + my @userdir = readdir(USERDIR); + closedir(USERDIR); + foreach $user (@userdir) { + if ($user eq $alias) { + open(OPTIONS,"<data/user/options/$alias"); + my @options = <OPTIONS>; + close OPTIONS; + foreach(@options) { + chomp $_; + } + if ($options[0] eq $pw) { + open(BAN,"<data/ban"); + my @ban = <BAN>; + close BAN; + foreach(@ban) { + chomp; + if ($_ eq $alias || $_ eq "ip://".$client->peerhost()) { + if (-f "data/online/users/$admin") { + &post_prv($admin,"<font color=ffffff><font color=ffa500>$_</font> kann sich nicht einloggen (Ist verbannt)!!</font>"); + } + $tmp = "banned"; + &login_html; + exit 0; + } + } + if ($options[1] eq undef) { $col = &random_color;} + else { $col = $options[1]; } + if ($options[2] eq undef) { $secol = &random_color;} + else { $secol = $options[2];} + if ($options[3] eq undef) { $maxVerlauf = "10";} + else { $maxVerlauf = $options[3];} + if ($options[4] eq undef) { $verlaufOrder = "1";} + else {$verlaufOrder = $options[4];} + my @digit = (A..Z, a..z, 0..9, "-", "."); + my $num1 = rand(@digit); + my $num2 = rand(@digit); + my $num3 = rand(@digit); + my $num4 = rand(@digit); + my $num5 = rand(@digit); + my $num6 = rand(@digit); + my $num7 = rand(@digit); + my $num8 = rand(@digit); + my $num9 = rand(@digit); + my $num10 = rand(@digit); + $tmpid = $digit[$num1].$digit[$num2].$digit[$num3].$digit[$num4].$digit[$num5].$digit[$num6].$digit[$num7].$digit[$num8].$digit[$num9].$digit[$num10]; + open TMPID, ">data/online/tmpid/$alias.$tmpid"; + print TMPID $alias; + close TMPID; + open IDENT, ">data/online/ident/$alias" ; + print IDENT $client->peerhost()."\n$tmpid\n".$client->peerhost().":".$client->peerport(); + close IDENT; + open LASTLOGIN, ">data/user/lastlogin/$alias"; + print LASTLOGIN time; + close LASTLOGIN; + &frameset_html; + $client->shutdown(2); + exit 0; + } else { + $lognotexists = "false"; + } + } + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /\W/ || $alias eq "") { + goto CREATE if ($alias =~ /[-]/ && $alias !~ /\W/); + &create_alias_html("alias_prohibited");; + $client->shutdown(2); + exit 0; + } elsif ($pw ne $tmp) { + &create_alias_html("pw_wrong"); + $client->shutdown(2); + exit 0; + } elsif (length($alias) >= 15) { + &create_alias_html("alias_length"); + $client->shutdown(2); + exit 0; + } +CREATE: + opendir(USERDIR,"data/user/options"); + my @user = readdir(USERDIR); + close USERDIR; + foreach $user (@user) { + if ($user eq $alias) { + &create_alias_html("alias_exists"); + $client->shutdown(2); + exit 0; + } + } + open(OPTIONS,">data/user/options/$alias"); + print OPTIONS $pw."\n"; + close OPTIONS; + + &login_html; +} + +sub frameset_html { +print <<END; +<html> + <head> + <title> + $title + </title> + </head> +<frameset border=0 frameborder=0 framespacing=0 cols="130,*"> + <frameset border=0 frameborder=0 framespacing=0 rows="*,55"> + <frame name="online" src="chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid"> + <frameset border=0 frameborder=0 framespacing=0 cols="70,*"> + <frame name="logo" src="chat?request=htdocs&var=logo_html" scrolling="no"> + <frame name="reload" src="chat?request=htdocs" scrolling="no"> + </frameset> + </frameset> + <frameset border=0 frameborder=0 framespacing=0 rows="*,55"> + <frame name='main' src='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder'> + <frame name="input" src="chat?request=htdocs" scrolling="no"> + </frameset> +</frameset> +</html> +END +} + + +1; diff --git a/0.7.1/stat.pm b/0.7.1/stat.pm new file mode 100644 index 0000000..7740079 --- /dev/null +++ b/0.7.1/stat.pm @@ -0,0 +1,206 @@ +sub stat { + +&start_html("Statistiken"); +&menu; +print $q->div("yChat Statistiken"), $q->hr, + $q->div( $q->a( { -href=>"chat?request=stat&var=ranking&alias=$alias&tmpid=$tmpid" }, "Rankings"), " | ", + $q->a( { -href=>"chat?request=stat&var=del&alias=$alias&tmpid=$tmpid" }, "Loginstatistiken"), " | ", + $q->a( { -href=>"chat?request=stat&var=stat&alias=$alias&tmpid=$tmpid" }, "DB-Statistik"), " | ", + $q->a( { -href=>"chat?request=stat&var=code&alias=$alias&tmpid=$tmpid" }, "Programmcode"), " | ", + $q->a( { -href=>"chat?request=stat&var=var&alias=$alias&tmpid=$tmpid" }, "Umgebungsvariablen"),), $q->hr; + +if ($var eq "ranking") { + + opendir(COUNTS, "data/user/counts"); + my @counts = readdir(COUNTS); + closedir(COUNTS); + + print "<div>"; + + my $nr_start = $start; + my $nr_end = $end; + my %online; + my $rank; + my $nr; + + foreach(@counts) { + if(-f "data/user/counts/$_" ) { + if (s#.online##g) { + open(TOTAL, "<data/user/counts/$_.online"); + my $total = <TOTAL>; + close TOTAL; + $online{sprintf("%.2f",($total / 3600))} = $_; + } + } + } + + print "<div>", $q->b("Rankings:"), $q->br, + "<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>"; + + if (!$nr_start) { + $nr_start = 1; + } if (!$nr_end) { + $nr_end = 20; + } + + foreach $wert (reverse(sort { $a <=> $b } keys %online)) { + $nr++; + if ($online{$wert} eq $alias) { + $rank = $nr; + last if ($nr > $nr_end); + } + next if ($nr < $nr_start || $nr > $nr_end); + print "<tr><td><font color='ffffff' size='1' face='arial'>".$nr."</font></td><td><font color='ffffff' size='1' face='arial'> ".$wert."h </font></td><td> <a href='chat?request=main2&var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n"; + } + print "</table>", $q->hr; + + $nr_start -= 20; $nr_end -= 20; + print "Rankings von <a href='chat?request=stat&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" + if ($nr_start > 0); + + $nr_start += 40; $nr_end += 40; + print "Rankings von <a href='chat?request=stat&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...", + $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>"); + +} elsif ($var eq "del") { + + print "<div>", $q->b("Alte Benutzer löschen:"), $q->br, + "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gelöscht.", $q->br, $q->br; + + opendir(USER, "data/user/options"); + my @user = readdir(USER); + closedir(USER); + @user = sort(@user); + + my $i = 0; + my $j; + my $k = 0; + my $l = 0; + my $full = $tmp; + + foreach(@user) { + if (-f "data/user/lastlogin/$_") { + open(LOGIN,"<data/user/lastlogin/$_"); + my $login = <LOGIN>; + close LOGIN; + $login = sprintf("%.2f",((time - $login) / 3600)); + $j++; + if (999 < $login && $login < 1440) { # 1440 = 60 Tage + $k++; + print $q->font( { -color=>"ffa500" }, $q->b( "$j($k) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef); + } elsif ($login < 48) { + $l++; + print $q->font( { -color=>"ffffef" }, $q->b( "$j($l) $_ Letztes Login vor: ".$login."h") ), $q->br, "\n" if ($full ne undef); + } elsif ($login < 1440) { + print "$j $_ Letztes Login vor: ".$login."h", $q->br, "\n" if ($full ne undef); + } else { + $k++; + &kill($_,$i++,$login); + } + } elsif (-f "data/user/options/$_") { + &kill($_,$i++); + } + } + print $q->hr if ($full ne undef); + print "</div>", $q->div( $q->b( + "$j Benutzer befinden sich in der Datenbank!", $q->br, + $q->font( { -color=>"ffffef" }, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br, + $q->font( { -color=>"ffa500" }, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br, + $q->font( { -color=>"ff0000" }, "$i Benutzer wurden gerade eben gelöscht!") ), $q->br, $q->br, + "PS: Jeder registrierte Benutzername wird nur einmal gezählt!" ); + print $q->br, $q->div( "(", $q->a( { -href=>"chat?request=stat&var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, "Vollständige Ansicht"), ")" ) if ($full eq undef); + +} elsif ($var eq "var") { + + print "<div>", $q->b("Server Umgebungsvariablen:"), $q->br, $q->br, + "Die Serverumgebungsvariablen können nur von Oberwächtern oder höher eingesehen werden!", $q->br, $q->br; + + if (5 <= &hierachie($alias)) { + while(($key,$value) = each(%ENV)) { + print "$key = $value\n", $q->br; + } + } + + print "</div>"; + +} elsif ($var eq "stat") { + + print $q->div( $q->b("yChat-DB Statistik:") ), $q->br; + $files = 0; + $size = 0; + $directorys = 1; + &zaehle("data"); + $size = sprintf("%.2f", ($size/1048576)); + print $q->div( "Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys"); + + } elsif ($var eq "code") { + + print $q->div( $q->b("yChat Programmcode-Statistik:") ), $q->br; + + my ($zeilen,$size,$bytes,$files); + + opendir(DIR,"."); + my @dir = readdir(DIR); + closedir(DIR); + $dir = sort(@dir); + + foreach(@dir) { + if (/.+[pl]$/ || /.+[pm]$/) { + $bytes = (-s); + $size += $bytes; + open(PL, "<$_"); + my @pl = <PL>; + close PL; + local $nr = $#pl+1; + $zeilen += $nr; + $files++; + print $q->div("Datei $files: $nr Zeilen, $bytes Bytes"), $q->br, "\n"; + } + } +print $q->div( $q->b("Programmcode: $files Dateien, $zeilen Zeilen", $q->br, "Größe: $size Bytes") ); + +} + +print $q->end_html; + +sub zaehle { + local ($dir,$data) = @_; + $dir = "$dir/$data" if ($data ne undef); + opendir(DATA,$dir); + local @data = readdir(DATA); + closedir(DATA); + $files2 = 0; + foreach(@data) { + if (-f "$dir/$_") { + $files++; + $files2++; + $size += (-s "$dir/$_"); + } elsif (-d "$dir/$_" && $_ ne "." && $_ ne "..") { + $directorys++; + &zaehle($dir,$_); + } + } +} + +sub kill { + my ($rm,$nr,$login) = @_; + $login = "XXXXXX" if ($login eq undef); + print $q->font( { -color=>"ff0000" }, $q->b( "$j($nr) $rm Letztes Login vor: ".$login."h (wurde gelöscht)") ), $q->br, "\n"; + print "<font size='1'>"; + print "options " if unlink("data/user/options/$rm"); + print "profiles " if unlink("data/user/profiles/$rm"); + print "gbooks " if unlink("data/user/gbooks/$rm"); + print "counts " if unlink("data/user/counts/$rm"); + print "counts.online " if unlink("data/user/counts/".$rm.".online"); + print "lastlogin " if unlink("data/user/lastlogin/$rm"); + print "memos" if unlink("data/user/memos/$rm"); + print "</font>", $q->hr, "\n"; + &zeit; + open(DEL, ">>data/kill"); + print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n"; + close DEL; +} + +} + +1; diff --git a/0.7.1/stream.pm b/0.7.1/stream.pm new file mode 100644 index 0000000..4252fbe --- /dev/null +++ b/0.7.1/stream.pm @@ -0,0 +1,250 @@ +sub stream { + +# chomp $room; + &secure_checkid($alias,$tmpid); + + my $pid = $$; + $SIG{CHLD} = 'IGNORE'; + $|++; + + + open RSTAT, "<data/online/rstat/$room"; + my @rstat = <RSTAT>; + close RSTAT; + + #Überprüfen, ob Alias Raum betreten darf + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + print "<font color='ffffff'>Der Raum <font color='ffa500'>$room</font> ist leider abgesperrt! Du wirst in den Ram <b>$standardroom</b> umgeleitet ...</font>"; + $room = $standardroom; + } + } + + +print <<END; +<html> + <head> +<script language="JavaScript"> +<!-- + open('chat?request=online&room=$room&alias=$alias&tmpid=$tmpid','online'); + open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input'); + +// open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input'); + +// Scroll-Routine von Anklepper (http://www.anklepper.de) +// speziell für yChat (http://www.yChat.de), Copyright 2000 +scrolling = true; +moves_steps = 4; +moves_interval = 4; +function moves() +{ + if( scrolling != false ) + window.scrollBy( 0, moves_steps ); + window.setTimeout( "moves()", moves_interval ); +} +moves(); +//--> +</script> +</head> +<body bgcolor="$chatbg"> +END +unlink("data/online/rooms/$loginplace/$alias"); +&check_online; + +print "<font size=1 color=ffffff face=arial>$title - Letzte Änderung $datum\n; Der Chat wird geladen...\n<br>"; +sleep 1; +print "<b>Hallo <font color=$col>$alias</font></b>, mit dem Befehl /menu kannst du das Chat-Menü aufrufen!<br>"; +sleep 1; +print "Du befindest dich im Raum <b>$room</b>: ".get_theme($room)."<br>\n"; +print "</font>\n"; + + if (-f "data/user/memos/$alias") { + open(MEMOS,"<data/user/memos/$alias"); + my @memos = <MEMOS>; + close MEMOS; + my $memos; + + foreach (@memos) { + $memos .= $_; + } + + print $memos; + unlink("data/user/memos/$alias"); + } + +OPENMSGFILE: + my $change_room = 0; + my $startime = time; + my $flooding = 0; + my @ignore; + my @flood; + + + unless (-f "data/online/rstat/$room") { + open(DATEI,">data/online/rstat/$room"); # Raumbesetzerstatus setzen + print DATEI "0\n\n$alias<;1\n"; + close DATEI; + } + + open(DATEI,">data/online/users/$alias"); + print DATEI time; + close DATEI; + + open(DATEI,">data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + + if (-e "data/msgs/$room") { + open(MSGFILE,"<data/msgs/$room"); + + mkdir "data/online/pids", 0777 + unless (-d "data/online/pids"); + + mkdir "data/online/pids/$room", 0777 + unless (-d "data/online/pids/$room"); + + open(PID,">data/online/pids/$room/$pid"); + print PID time; + close PID; + + } else { + sleep 1; + goto OPENMSGFILE; + } + + &sendmsgs; + + while (-f "data/online/users/$alias") { + local $SIG{USR1} = \&sendmsgs; + + goto OPENMSGFILE + if ($change_room == 1); + + sleep 15; + print "\n"; + } + + sub sendmsgs { + for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) { + my ($address, $stamp, $command, $action, $message, $from) = split(/<;/, $_); + + if ($address =~ /$\!/ || $address eq $alias) { + if ($stamp > $startime) { + + # Falls die Farben gewechselt wurden + if ($command eq "col") { + ($col, $secol) = split ";", $action; + + } elsif ($command eq "cr") { + unlink("data/online/pids/$room/$pid"); + $room = $action; + close MSGFILE; + $change_room = 1; + + # Falls jemand aus der Ignore-Liste eingetragen, oder ausgetragen werden soll + } elsif ($command eq "ig") { + my @temp; + my $add2list = 1; + + foreach (@ignore) { + if ($action ne $_) { + push @temp, $_; + + } else { + $add2list = 0; + } + } + + if ($add2list == 1) { + push @ignore, $action; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun ignoriert!</font><br>\n"; + &post_prv_extra($action,"<font color='#ff0000'>Du wirst nun von $alias ignoriert!</font>") + + } else { + @ignore = @temp; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun nicht mehr ignoriert!</font><br>\n"; + &post_prv_extra($action,"<font color='#ff0000'>Du wirst nun von $alias nicht mehr ignoriert!</font>") + } + + # Falls Liste aller ignorierten Nicknames angezeigt werden soll + } elsif ($command eq "igl") { + my $ignored; + $ignored .= "$_ " foreach (@ignore); + + if ($#ignore == -1) { + print "<font color='#ffffff'>Momentan wird keine Person von dir ignoriert!</font><br>\n"; + + } else { + print "<font color='#ffffff'>Folgende Personen werden von dir ignoriert: <font color='#ffa500'>$ignored</font>!</font><br>\n"; + } + + # Falls User den Chat, aber nicht das System verlassen will + } elsif ($command eq "quit") { + print "<script language='JavaScript'>\n"; + print "open('chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid','online');\n"; + print "open('chat?request=htdocs','input');\n"; + print "open('chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');\n"; + print "</script>\n"; + last; + + # Nachricht ausgeben falls nicht der Raum gewechselt wird + } elsif ($change_room != 1) { + + # Wenn der Benutzer ignoriert wird, die nachricht nicht ausgeben + my $ignored = 0; + foreach (@ignore) { + if ($_ eq $from) { + $ignored = 1; + last; + } + } + + if ($ignored != 1) { + print "$message\n"; + + } else { + $address =~ s/\!//; + + &post_prv_extra($from,"<font color='#ff0000'>Du wirst von $alias ignoriert!</font>") + if ($address eq $alias); + } + } + + push(@flood,$address.$command.$action.$message.$from); + + # Falls Jemand den Chat flutet + if ($flood[0] eq $flood[1] && $flood[0] eq $flood[2] && $flood[0] eq $flood[3]) { + print "<i><font color=red>$from flutet den Chat !</font></i><br>\n"; + + if ($from eq $alias && $flooding++ && $flooding >= 4) { + print "<script language='JavaScript'>open('chat?request=start&tmp=autokick','_top');</script>\n"; + &rm_alias($alias,$room); + &post($room,"<i><font color='ffffff'>".×tring." <font color='ffa500'><b>Das System</b></font> katapultiert <b>$alias</b> wegen Fluten des Chats nach draussen ... </font></i>", $alias); + } + + } else { + $flooding = 0; + } + + shift(@flood) if ($#flood > 2); + } + } + } + + seek(MSGFILE, $curpos, 0); +} + +unlink("data/online/pids/$room/$pid"); +} + +sub post_prv_extra { + my ($alias,$message) = @_; + my $helpid = fork(); + + if ($helpid == 0) { + &post_prv($alias,$message); + exit 0; + } +} + +1; diff --git a/0.7.1/ychatd.pl b/0.7.1/ychatd.pl new file mode 100644 index 0000000..3fce39c --- /dev/null +++ b/0.7.1/ychatd.pl @@ -0,0 +1,109 @@ +#!/usr/bin/perl +# yChat - Copyright by Paul C. Bütow +# Dieses yChat-System wurde von Paul C. Bütow alias Snooper eigenhändig programmiert. +# Es darf kostenlos verwendet und manipuliert werden, allerdings darf dieses System nicht +# Weiterverkauft werden! Der Hinweis der bei /about erscheind, darf ebenso nicht entfernt werden! +# Für Fragen/Anregungen/Verbesserungsvorschläge bitte eine E-Mail an untenstehende Adresse senden! + +# Programmierer: Paul C. Bütow +# Seine Homepage: http://buetow.info +# Seine E-Mail Adresse: mail@buetow.de +# Projektname: yChat / 2000 - 2001 +# Programmiersprache: Perl 5.6 +# Platttform: Linux +# Die Adresse des Original-yChats: http://www.yChat.de + + +use CGI; +$q = new CGI; + +# Module einbinden +use config; +use commands; +use changeroom; +use start; +use shared; +use input; +use main1; +use main2; +use online; +use htdocs; +use stream; +use stat; +use loggedin; +use hierachie; +use IO::Socket; + +# Forkprozzesse killen, wenn beendet +$SIG{CHLD} = 'IGNORE'; + +$mainsocket = IO::Socket::INET->new(LocalHost=>"$localhost", + LocalPort=>$localport, + Porto=> 'tcp', + Listen=> ($limit+10), + Reuse=>1,); + +die "Kann Server-Socket nicht erzeugen: $!\n" + unless ($mainsocket); + +print "yChat wurde auf $localhost:$localport gestartet...\n"; +$STARTIME = time; + +while ($client = $mainsocket->accept()) { + $HITS++; + $pid = fork(); + + if ($pid == 0) { + print $client "HTTP/1.1 200 OK\nContent-type:text/html\n\n"; + while (defined ($buffer = <$client>)) { + my $requeststring; + + my @tmp = split ' ', $buffer; + + # Falls GET request + if ($tmp[0] eq "GET") { + $requeststring = $tmp[1]; + + # Falls POST request + } else { + print "POST\n"; + } + + @tmp = split '\?', $requeststring; + @tmp = split '&', $tmp[1]; + + my %variables; + foreach(@tmp) { + my @tmp = split "="; + + next + if ($tmp[0] eq "admin" || $tmp[0] eq "mogeladmin"); + + $tmp[0] =~ s#/##; + $variables{$tmp[0]} = &url_decode( $tmp[1] ); + } + + eval "my \$$_" + foreach ( keys %variables ); + + eval "\$$_ = '".$variables{$_}."'" + foreach ( keys %variables ); + + # Ausgabe umleiten + STDOUT = $client; + + if ($request) { + &secure_checkid($alias,$tmpid) if ($request != "start"); + eval "\&$request"; + + } else { + &start; + } + + $client->shutdown(2); + exit(0); + } + } +} + + diff --git a/0.7.2/config.pm b/0.7.2/config.pm new file mode 100644 index 0000000..e606f01 --- /dev/null +++ b/0.7.2/config.pm @@ -0,0 +1,42 @@ +# yChat - Copyright by Paul C. Bütow +########################### Dieser Teil bestimmt die Standart-Variabeln. +##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.) +########################### +$limit = 50; # Benutzerlimit +$datum = "27.12.01"; # Datum der letzten Änderung (ändern erwünscht) +$version = "0.7.0.2"; # Bitte Hauptversionsnummer nicht ändern +$title = "yChat [$version]"; # Erscheint in der Browser-Leiste oben +$standardroom = "Cyberbar"; # Standardchatraum +$loginplace = "Lounge"; # Bezeichnung der Startseite nach dem Login +$localhost = "212.202.190.233"; # Host oder IP# des Chat-Servers +$localport = 2000; # Port über den fer Chat-Server läuft +$gfxpath = "http://$localhost/yChat"; # URL der Binärdaten (Grafiken etc.) +$bgcolor = "#3E535B"; # Hintergrundfarbe der HTML-Seiten +$chatbg = "#000000"; # Hintergrundfarbe des Chat-Frames + +# PS: Um einen Chat-Administrator anzulegen, dann die Datei data/hierachie +# anlegen, in eine Zeile muß folgendes eingetragen werden: "Nickname<;7" +# (Natürlich ohne Anführungsstriche) Nickname ist somit Chat-Administrator +# und kann Oberwächter und Wächter bestimmen! + +sub style { +print <<ENDCSS; +<style type="text/css"> + body { background-color: $bgcolor } + body.blank { background-color: $chatbg } + body.online { background-color: $chatbg } + div { font-family: arial, geneva, verdana, helvetiva; font-size: 12px; color: #ffffff } + div.b { font-weight: bold; color: #ffa500 } + a { color: #ffffef; } + a:hover { color: #ffffff; } + p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; } +</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; background-color: #ffffff; 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 +} +1; diff --git a/0.7.2/modules/changeroom.pm b/0.7.2/modules/changeroom.pm new file mode 100644 index 0000000..35daa00 --- /dev/null +++ b/0.7.2/modules/changeroom.pm @@ -0,0 +1,69 @@ +sub change_room { + my($method, $newroom, $oldroom, $alias2) = @_; + if ($newroom eq $oldroom) { + &post_prv($alias, "<font color='ffffff'>Du befindest dich bereits im Raum <font color='ffa500'>$newroom</font>!</font>"); + &reload_html; + } + elsif ($newroom eq $loginplace) { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verlässt den Chat und geht in die <b>$loginplace</b> ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &check_online; + &reload_html; + } + open RSTAT, "<data/online/rstat/$newroom"; + my(@rstat) = <RSTAT>; + close RSTAT; + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$newroom</font> ist leider abgesperrt!</font>"); + &reload_html; + } + } + &private_javascript($alias, $room, "parent.input.document.inf.room.value = '$newroom';open('chat?request=online&room=$newroom&alias=$alias&tmpid=$tmpid','online');"); + open MSGFILE, ">>data/msgs/$newroom"; + print MSGFILE "$alias<;" . time . "<;!<;!<;<;\n"; + close MSGFILE; + open MSGFILE, ">>data/msgs/$room"; + if ($method eq 'j') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'ju') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du folgst <b>$alias2</b> aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'sep') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrst ab...</font></i><br><;\n"; + } + elsif ($method eq 'beam') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wurdest von <b>$alias2</b> in den Raum <b>$newroom</b> gebeamt...</font></i><br><;\n"; + } + close MSGFILE; + &post_strmsg($alias, $room, 'cr', $newroom); + $room = $oldroom; + my $tmpstamp = time; + if ($method eq 'j') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'ju') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> folgt <b>$alias2</b> in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> und folgt <b>$alias2</b> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'sep') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> und sperrt ab...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrt ab...</font></i>", $alias); + } + elsif ($method eq 'beam') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> in den Raum <b>$newroom</b>...</font></i>", $alias2); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> aus dem Raum <b>$oldroom</b> herein nach <b>$room</b>...</font></i>", $alias2); + } + unlink "data/online/rooms/$oldroom/$alias"; + &rm_rstat($alias, $oldroom); + &check_online; +} +1; diff --git a/0.7.2/modules/commands.pm b/0.7.2/modules/commands.pm new file mode 100644 index 0000000..c191f6e --- /dev/null +++ b/0.7.2/modules/commands.pm @@ -0,0 +1,784 @@ +sub command { + $_[0] = $_[0] . ' '; + $_[0] = substr($_[0], 1, length($_[0]) - 1); + my(@cmd) = split(/ /, $_[0], 0); + my $cmd = substr($_[0], 0, index($_[0], ' ')); + my $tmp = $_[1]; + sub lock { + my $method = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $lock = "0\n"; + if ($room eq $standardroom) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ohne Erfolg ab ...</font></i>", $alias); + } + else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ab ...</font></i>", $alias) if $method ne 'separee'; + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum auf ...</font></i>", $alias) if $method ne 'separee'; + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $lock; + close RSTAT; + } + &reload_html; + } + if ($cmd eq 'about') { + &post_prv($alias, "<font color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. B\374tow (2000 - 2001).</font>"); + &reload_html; + } + elsif ($cmd eq 'away') { + for ($i = 1; $i <= $#cmd; ++$i) { + $away_msg = $away_msg . ' ' . $cmd[$i]; + } + my $room = &get_room($alias); + if ($tmp eq 'autoaway') { + $away_msg = "$alias wurde vom System agbemeldet ..."; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> meldet <b>$alias</b> wegen Inaktivität ab ...</i></font>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> meldet sich ab (<font color='$col'>$away_msg</font> ) ...</i></font>", $alias); + } + open AWAY, ">>data/online/rstat/$room.away"; + print AWAY "$alias<;$away_msg\n"; + close AWAY; + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'away'; parent.online.location.reload();]); + &reload_html; + } + elsif ($cmd eq 'clear') { + &post_prv($alias, "<script language='JavaScript'>window.open('chat?request=stream&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');</script>"); + &reload_html; + } + elsif ($cmd eq 'col') { + my $col, $secol; + if ($cmd[1] ne undef) { + $col = $cmd[1]; + &prove_color($alias, $col); + my $tmpsecol = $cmd[2]; + my $length = length $tmpsecol; + if ($tmpsecol eq '' or $length < 6 or $length > 6) { + $secol = $col; + } + else { + $secol = $tmpsecol; + } + } + else { + $col = &random_color; + $secol = &random_color; + } + open OPTIONS, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $options[0] . $col . "\n" . $secol; + close OPTIONS; + &post($room, '<i><font color=ffffff>' . ×tring . "</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt...</font></i>", $alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &reload_html; + } + elsif ($cmd eq 'date') { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + &post_prv($alias, "<font color=ffffff>Heute ist der $days.$months. Jahr $years. Es ist genau $hours:$mins Uhr und $secs Sekunden.</font>"); + &reload_html; + } + elsif ($cmd eq 'exit') { + my $room = &get_room($alias); + if ($tmp eq 'autologout') { + &private_javascript($alias, $room, q[open('chat?request=start&tmp=autologout','_top');]); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> loggt <b>$alias</b> wegen Inaktivität aus ... </font></i>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt sich ganz aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=quit','_top');]); + } + &rm_alias($alias, $room); + &rm_away($alias, $room); + &reload_html; + } + elsif ($cmd eq 'hits' or $cmd eq 'uptime') { + &post_prv($alias, "<font color=ffffff>Uptime: $startime " . &calculate_uptime_hours($STARTIME) . "h; $HITS Hits; " . &calculate_hpm($HITS, $STARTIME) . ' Hits pro Minute</font>'); + &reload_html; + } + elsif ($cmd eq 'ig') { + my $alias2ignore = $cmd[1]; + if ($alias2ignore) { + if (-f "data/user/options/$alias2ignore") { + &post_strmsg($alias, $room, 'ig', $alias2ignore); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'>existiert nicht in der Datenbank!</font>"); + } + } + else { + &post_strmsg($alias, $room, 'igl'); + } + &reload_html; + } + elsif ($cmd eq 'j' or $cmd eq 'sep') { + if ($cmd[1] =~ /\W/ or $cmd[1] eq '') { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> enth\344lt illegale Zeichen!</font>"); + &reload_html; + } + else { + if ($cmd eq 'j') { + &change_room('j', $cmd[1], $room); + &reload_html; + } + else { + if ($cmd[1] eq $standardroom) { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> ist ein Standardraum und kann nicht als Separee eröffnet werden!</font>"); + } + else { + &change_room('sep', $cmd[1], $room); + &lock('separee'); + } + &reload_html; + } + } + } + elsif ($cmd eq 'me' or $cmd eq 'm') { + my $me_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $me_msg = $me_msg . ' ' . $cmd[$i]; + } + $me_msg =~ s[/me/][<i>$alias</i>]g; + $me_msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if ($cmd eq 'm') { + &post($room, "<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>", $alias); + } + else { + &post($room, "<b><font color=$col><i>$alias</i> $me_msg</font></b>", $alias); + } + &reload_html; + } + elsif ($cmd eq 'memo') { + my $alias2memo = $cmd[1]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if (-f "data/user/options/$alias2memo") { + my $memo_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $memo_msg = $memo_msg . ' ' . $cmd[$i]; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>"); + open MEMO, ">>data/user/memos/$alias2memo"; + print MEMO "<font color=ffffff>($days.$months.$years - $hours:$mins:$secs) <font color=$col>$alias</font> hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>\n"; + close MEMO; + &reload_html; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'menu') { + &private_javascript($alias, $room, "window.open('chat?request=htdocs&alias=$alias&var=menu_html&room=$standardroom&col=$col&secol=$secol&tmpid=$tmpid','_new','width=500,height=500,screenX=100,screenY=100,scrollbars');"); + &reload_html; + } + elsif ($cmd eq 'online') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + open ONLINE, "<data/user/counts/$alias2prove.online"; + my $online = <ONLINE>; + close ONLINE; + my $totaltime = sprintf('%.2f', $online / 3600); + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>"); + } + else { + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'q') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verlässt den Chat ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &rm_away($alias, $room); + &check_online; + &reload_html; + } + elsif ($cmd eq 'rmgb') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das eigene G\344stebuch ...</font></i>", $alias); + unlink "data/user/gbooks/$alias"; + &reload_html; + } + elsif ($cmd eq 's') { + my $msg2scream; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2scream = $msg2scream . ' ' . $cmd[$i]; + } + $msg2scream =~ s/\344/\304/g; + $msg2scream =~ s/\366/\326/g; + $msg2scream =~ s/\374/\334/g; + $msg2scream = "\U$msg2scream\E"; + &post($room, "<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'seen') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + if (-f "data/user/lastlogin/$alias2prove") { + open LASTLOGIN, "<data/user/lastlogin/$alias2prove"; + my $lastlogin = <LASTLOGIN>; + close LASTLOGIN; + my $timestamp = sprintf('%.2f', (time - $lastlogin) / 3600); + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>"); + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich seit der Einf\374hrung dieses Befehls noch nie eingeloggt!</font></font>"); + } + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'selfkill') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> entfernt sich ganz und gar aus dem System und loggt sich aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=selfkill','_top');]); + &kill_alias($alias); + &reload_html; + } + elsif ($cmd eq 'w') { + my $theme = &get_theme($room); + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my($is, $nr) = ('t', 0); + my $persons; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-f "data/online/rooms/$room/$_") { + $persons = $persons . ' ' . $_; + ++$nr; + } + } + &post_prv($alias, "<font color=ffffff>Der aktuelle <b>Raum:</b> $room $theme $door ($nr): <font color='ffa500'>$persons</font></font>"); + &reload_html; + } + elsif ($cmd eq 'wc' or $cmd eq 'wc/') { + my $raum = $cmd[1]; + my $persons; + if ($raum eq '' and $cmd eq 'wc') { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + close USERS; + foreach $_ (@users) { + $persons = $persons . ' ' . $_ if -f "data/online/users/$_"; + } + my $nr = $#users - 1; + my($nrs, $is) = ('', 'ist'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'sind'; + } + &post_prv("$alias", "<font color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: <font color='ffa500'>$persons</font></font>"); + } + elsif ($raum eq '' and $cmd eq 'wc/') { + my $msg2post; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + opendir DIR, "data/online/rooms/$_"; + my(@dir2) = readdir DIR; + closedir DIR; + open RSTAT, "<data/online/rstat/$_"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my $nr = $#dir2 - 1; + $msg2post = $msg2post . "<tr><td><b><font size=2 color='ffffff'>$_ $door ($nr) [" . $rstat[1] . q(]: </font></b></td></tr><tr><td><font size=2 color='ffa500'>); + foreach $chatter (@dir2) { + $msg2post = $msg2post . "$chatter " if -f "data/online/rooms/$_/$chatter"; + } + print '</font></td>'; + } + } + &post_prv($alias, "<font color=ffffff>Folgende Räume sind offen:</font><table>$msg2post</table>"); + } + elsif ($raum ne '') { + my $persons; + opendir DIR, "data/online/rooms/$raum"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + $persons = $persons . ' ' . $_ if -f "data/online/rooms/$raum/$_"; + } + my($nr, $is) = ($#dir - 1, 't'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'n'; + } + &post_prv($alias, "<font color=ffffff> $nr Person$nrs befinde$is sich im Raum <b>$raum</b> <font color='ffa500'>$persons</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'wj' or $cmd eq 'ju') { + my $alias2search = $cmd[1]; + my $roomofalias = &get_room($alias2search); + if ($roomofalias) { + if ($cmd eq 'wj') { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff>befindet sich im Raum <b>$roomofalias</b> !</font></font>"); + } + else { + &change_room('ju', $roomofalias, $room, $alias2search); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff> ist nicht eingeloggt!</font></font>"); + } + &reload_html; + } + elsif (1 <= &hierachie($alias, $room)) { + if ($cmd eq 'l') { + &lock; + } + elsif ($cmd eq 'su') { + my $alias2su = $cmd[1]; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2su) { + open DATEI, "<data/online/rstat/$room"; + my(@rstat) = <DATEI>; + close DATEI; + if (1 <= hierachie($alias2su, $room)) { + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color='ffffff'> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, W\304 oder OW)</font>"); + &reload_html; + } + open RSTAT, ">>data/online/rstat/$room"; + print RSTAT "$alias2su<;1\n"; + close RSTAT; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verleiht <b>$alias2su</b> Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &reload_html; + } + } + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + &reload_html; + } + elsif ($cmd eq 'rsu') { + my $alias2rsu = $cmd[1]; + if (1 == hierachie($alias2rsu, $room)) { + &rm_rstat($alias2rsu, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entzieht <b>$alias2rsu</b> die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rsu <font color='ffffff'>ist gar kein Raumbesetzer!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 't') { + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $theme; + if ($cmd[1] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, q[<i><font color='ffffff'>] . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums ...</font></i>", $alias); + } + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i] . "\n"; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $theme; + close RSTAT; + &reload_html; + } + elsif (3 <= &hierachie($alias)) { + if ($cmd eq 'ban' or $cmd eq 'banip') { + my $alias2ban = $cmd[1]; + my $hierachie = &hierachie($alias2ban); + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + if ($cmd[1] eq undef) { + my $nr = @ban; + my $banned; + foreach $_ (@ban) { + chomp $_; + $banned .= " $_"; + } + &post_prv($alias, "<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color='ff0000'>$banned</font></font>"); + &reload_html; + } + elsif (-f "data/user/options/$alias2ban") { + if (3 <= $hierachie eq 'wa') { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color='ffffff'>kann nicht verbannt werden!</font></font>"); + &reload_html; + } + if ($cmd eq 'ban') { + if (&add_entry($alias2ban, 'ban') == 1) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verbannt <b>$alias2ban</b> aus dem Chat ...</font></i>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>"); + } + } + elsif ($cmd eq 'banip') { + open DATEI, "<data/online/ident/$alias2ban"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + if (add_entry("ip://$ipnr", 'ban') == 1) { + &post_prv($alias, "<font color='ffffff'>IP-Nummer von <font color='ffa500'>$alias2ban</font> (<font color='ff0000'>$ipnr</font>) wurde verbannt!</font></i>"); + } + else { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$ipnr</font> von <font color='ffa500'>$alias2ban</font> ist bereits verbannt!</font></font>"); + } + &reload_html; + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff> kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'rban' or $cmd eq 'rbanip') { + my $alias2rban = $cmd[1]; + open BAN, '<data/ban'; + @ban = <BAN>; + close BAN; + foreach $ban (@ban) { + if (&rm_entry($alias2rban, 'ban') == 1) { + if ($alias2rban =~ /ip:/) { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$alias2rban</font> wurde aus der Banliste ausgetragen!</font></font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entbannt <b>$alias2rban</b> ...</font></i>", $alias); + } + &reload_html; + } + } + &post_prv($alias, "<font color='ff0000'>$alias2rban <font color='ffffff'>ist nicht verbannt!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'img') { + my $hierachie = &hierachie($alias); + &hierachie_rm($alias); + if ($hierachie % 2 > 0) { + &post_prv($alias, q[<font color='ffffff'>Dein Superuserlogo wurde versteckt!</font>]); + &hierachie_add($alias, $hierachie + 1); + } + else { + &post_prv("$alias", q[<font color='ffffff'>Dein Superuserlogo wurde wieder sichtbar gemacht!</font></font>]); + &hierachie_add($alias, $hierachie - 1); + } + &reload_html; + } + elsif ($cmd eq 'ip') { + my $alias2prove = $cmd[1]; + opendir DIR, 'data/online/ident'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2prove) { + open DATEI, "<data/online/ident/$alias2prove"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + &post_prv($alias, "<font color='ffa500'>$_<font color='ffffff'> hat die IP-Nummer <font color='ff0000'>$ipnr</font> !</font></font>"); + } + } + &reload_html; + } + elsif ($cmd eq 'k' or $cmd eq 'o') { + my $alias2kick = $cmd[1]; + if (-f "data/online/users/$alias2kick") { + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $raum (@dir) { + opendir DIR, "data/online/rooms/$raum"; + my(@dir2) = readdir DIR; + closedir DIR; + foreach my $chatter (@dir2) { + if ($chatter eq $alias2kick) { + my $hierachie2 = &hierachie($alias2kick); + if (&hierachie($alias) <= &hierachie($alias2kick)) { + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> besitzt einen höheren oder gleichen Rang und kann nicht gekickt/ausgeloggt werden!</font></font>"); + } + else { + if ($cmd eq 'k') { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=kick","_top");</script>'); + } + else { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=logout","_top");</script>'); + } + $_ = undef if $room eq $raum; + if ($cmd eq 'k') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> katapultiert <b>$alias2kick</b> aus dem Chat ...</font></i>", $alias, $raum); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt <b>$alias2kick</b> aus dem Chat aus ...</font></i>", $alias, $alias); + } + &rm_alias($alias2kick, $raum); + &check_online; + } + &reload_html; + } + } + } + } + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> ist nicht anwesend und kann nicht aus dem System katapultiert werden werden!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'sl') { + my $sl_room = $cmd[1]; + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + open RSTAT, "<data/online/rstat/$sl_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen ab ...</font></i>", $alias, $sl_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen auf ...</font></i>", $alias, $sl_room); + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$sl_room"; + print RSTAT $lock; + close RSTAT; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$sl_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'ss') { + my $ss_room = $cmd[1]; + if (-e "data/online/rooms/$ss_room") { + my $ss_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $ss_msg = $ss_msg . ' ' . $cmd[$i]; + } + my $msg2scream = "\U$ss_msg\E"; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> ruft in den Raum <b>$ss_room</b> hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>", $alias, $ss_room); + &reload_html; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$ss_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'st') { + my $st_room = $cmd[1]; + if (-e "data/online/rooms/$st_room") { + my $theme; + if ($cmd[2] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum <b>$st_room</b> das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias, $st_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums <b>$st_room</b> ...</font></i>", $alias, $st_room); + } + open RSTAT, "<data/online/rstat/$st_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$st_room"; + print RSTAT $theme; + close RSTAT; + } + else { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif (5 <= &hierachie($alias)) { + if ($cmd eq 'kill') { + my $alias2kill = $cmd[1]; + if (-f "data/user/options/$alias2kill") { + if (5 <= &hierachie($alias2kill)) { + &post_prv($alias, "<font color='ffa500'>$alias2kill</font> <font color='ffffff'>hat einen höheren Rang und kann nicht aus dem System entfernt werden !</font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col>$alias</font> killt <b>$alias2kill</b> ganz und gar aus dem System ...</font></i>", $alias); + &kill_alias($alias2kill, $alias); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2kill <font color='ffffff'> existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'sys') { + my $sys_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $sys_msg = $sys_msg . ' ' . $cmd[$i]; + } + $sys_msg = q[<i><font color='ffffff'>] . ×tring . " </font></i> <b><font size=2 color='red'>SYSTEMNACHRICHT</font></b><i><font color='ffffff'>: $sys_msg ...</font></i>"; + opendir ROOMS, 'data/msgs'; + my(@rooms) = readdir ROOMS; + close ROOMS; + foreach $_ (@rooms) { + &post($_, $sys_msg, $alias) unless /\./; + } + &log($sys_msg); + &reload_html; + } + elsif ($cmd eq 'wa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + if (3 <= &hierachie($alias2wa)) { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2wa, 3); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <b>$alias2wa</b> zum W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'rwa') { + my $alias2rwa = $cmd[1]; + my $hierachie = &hierachie($alias2rwa); + if (3 == $hierachie or 4 == $hierachie) { + &hierachie_rm($alias2rwa); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <b>$alias2rwa</b> vom W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif (7 <= &hierachie($alias)) { + if ($cmd eq 'ow') { + my $alias2ow = $cmd[1]; + if (-f "data/user/options/$alias2ow") { + if (5 <= &hierachie($alias2ow)) { + &post_prv($alias, "<font color='ffa500'>$alias2ow <font color='ffffff'>kann nicht zum Oberwächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2ow, 5); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <b>$alias2ow</b> zum Oberwächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'row') { + my $alias2row = $cmd[1]; + my $hierachie = &hierachie($alias2row); + if (5 == $hierachie or 6 == $hierachie) { + &hierachie_rm($alias2row); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <b>$alias2row</b> vom Oberw\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2row <font color=ffffff>ist kein Oberw\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'pw') { + my $pw2show = $cmd[1]; + if (-f "data/user/options/$pw2show") { + open PW, "<data/user/options/$pw2show"; + my(@pw) = <PW>; + close PW; + chomp $pw[0]; + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> hat das Passwort <font color='ff0000'>$pw[0]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'id' or $cmd eq 'agent') { + my $id2show = $cmd[1]; + if (-f "data/online/ident/$id2show") { + open ID, "<data/online/ident/$id2show"; + my(@id) = <ID>; + close ID; + if ($cmd eq 'id') { + chomp $id[1]; + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> hat die Temp-ID <font color='ff0000'>$id[1]</font> !</font></font>"); + } + else { + chomp $id[2]; + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> verwendet <font color='ff0000'>$id[2]</font> !</font></font>"); + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> ist nicht eingeloggt !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'cool') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . " $msg2post</font></i>", $alias); + &reload_html; + } + elsif ($cmd eq 'rev') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post = reverse($msg2post); + &post($room, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $alias); + &reload_html; + } + } + } + } + } + my($alias2post, $msg2post, $action); + if ($cmd eq 'msg') { + $alias2post = $cmd[1]; + for ($i = 2; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + elsif ($cmd eq '') { + $alias2post = $whisper; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + else { + $alias2post = $cmd; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + $msg2post =~ s[/me/][<i>$alias</i>]g; + $msg2post =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if (-f "data/online/users/$alias2post" and not -f "data/online/rooms/$loginplace/$alias2post") { + &post_prv($alias, "<b><font color='$col'><i>Zu $alias2post gefl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &post_prv($alias2post, "<b><font color='$col'><i>$alias fl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &private_javascript($alias, $room, "parent.input.document.inf.whisper.value = '$alias2post';"); + &reload_html; + } + &post_prv($alias, qq[ <font color=ffffff>Benutzer oder Befehl <font color=ffa500>$alias2post</font> ist nicht anwesend/verf\374gbar! Bitte den Befehl "/menu" eingeben, um das Chat-Menü zu öffnen.</font></font>]); + &reload_html; +} +1; diff --git a/0.7.2/modules/divcom.pm b/0.7.2/modules/divcom.pm new file mode 100644 index 0000000..38685bf --- /dev/null +++ b/0.7.2/modules/divcom.pm @@ -0,0 +1,260 @@ +sub divcom { + if ($var eq 'list_alias_html') { + &list_alias_html; + } + elsif ($var eq 'alias_html') { + &alias_html; + } + elsif ($var eq 'edit_profile_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_profile_html'); + } + elsif ($var eq 'edit_options_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_options_html'); + } + elsif ($var eq 'gb_html') { + &gb_html; + } + elsif ($var eq 'post_gb') { + &secure_checkid($alias, $tmpid); + &post_gb; + } + elsif ($var eq 'edit_profile') { + &secure_checkid($alias, $tmpid); + &edit('edit_profile'); + } + elsif ($var eq 'edit_options') { + &secure_checkid($alias, $tmpid); + &edit('edit_options'); + } + elsif ($var eq 'rm_gb_alias') { + &secure_checkid($alias, $tmpid); + &rm_gb; + } + else { + &error('Parameter fehlt'); + } +} +sub gb_html { + my ($message,$method) = @_; + unless ($method eq 'loggedin') { + &start_html('Benutzerboard'); + &menu(); + } + if ($message eq 'post_empty') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </i>\n einen Text und poste\n <u>dann</u>\n !\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_ok') { + print " <div class=b>\n Meldung:\n </div>\n <div>\n Vielen Dank f\374r Deinen Beitrag. Wenn Du willst, kannst Du jetzt gleich noch einen Eintrag posten ...\n </div>\n <hr>\n"; + } + else { + print " <div>\n Falls Du Anregungen oder Verbesserungsvorschl\344ge f\374r die Community hast, dann poste doch einen kleinen Eintrag :-)\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="col" value="$col">\n<input type="hidden" name="secol" value="$secol">\n<input type="hidden" name="maxVerlauf" value="$maxVerlauf">\n<input type="hidden" name="verlaufOrder" value="$verlaufOrder">\n<input type="hidden" name="request" value="divcom">\n <input type="hidden" name="method" value="$method">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="guestbook">\n <input type="hidden" name="id" value="y">\n <input size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e 'data/guestbook') { + &error("Konnte dat/guestbook nicht \366ffnen") unless open DATEI, '<data/guestbook'; + @datei = <DATEI>; + close DATEI; + print $q->div(@datei); + } + print $q->end_html; +} +sub post_gb { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if ($msg eq '') { + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_empty'); + } else { + &gb_html('post_empty'); + } + } + else { + &alias_html('post_empty'); + } + $client->shutdown(2); + exit 0; + } + $msg =~ s/</</g; + $msg =~ s/\n/<br>/g; + my $tmpath = ''; + if ($id eq 'y') { + $tmpath = 'data/guestbook'; + } + else { + $tmpath = "data/user/gbooks/$tmp"; + } + open GB, "$tmpath"; + my(@gb) = <GB>; + close GB; + pop @gb if $#gb > 99; + my(@newdatei) = "<br><b>$alias schrieb am $days.$months.$years um $hours:$mins:$secs ...</b><br>$msg<br>\n"; + push @newdatei, @gb; + open GB, ">$tmpath"; + print GB @newdatei; + close GB; + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_ok'); + } else { + &gb_html('post_ok'); + } + $client->shutdown(2); + exit 0; + } + &post_prv ($tmp, "<font color=ffffff>$alias hat soeben einen Pin in Dein Profil geh\344ngt ... </font>"); + &gb_html('post_ok');### + $client->shutdown(2); + exit 0; +} +sub rm_gb { + open GB, "<data/user/gbooks/$alias"; + my(@gbfile) = <GB>; + close GB; + my(@newgbfile) = (); + for ($i = 0; $i <= $#gbfile; ++$i) { + push @newgbfile, $gbfile[$i] if $i != $id; + } + open GB, ">data/user/gbooks/$alias"; + print GB @newgbfile; + close GB; + &alias_html('rm_ok'); +} +sub list_alias_html { + &start_html('Alle Benutzer'); + opendir REGISTERED, 'data/user/options'; + my(@users) = readdir REGISTERED; + closedir REGISTERED; + my(@liste) = sort(@users); + my $nr = $#users - 1; + &menu(); + print " <div>\n Es sind z.Z. genau $nr Benutzernamen in der Datenbank vorhanden! (Sortiert nach #, A-Z, a-z)\n </div>\n <hr>\n <div>\n"; + foreach $_ (@liste) { + if (-f "data/user/options/$_") { + print $q->a({-'href', "chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid"}, "$_"), ' '; + } + } + print " </div>\n</body>\n</html>\n"; +} +sub alias_html { + my $message = $_[0]; + open COUNTS, "<data/user/counts/$tmp"; + local $counter = <COUNTS>; + close COUNTS; + ++$counter; + open COUNTS, ">data/user/counts/$tmp"; + print COUNTS $counter; + close COUNTS; + &start_html($tmp); + &menu(); + print ""; + if ($message eq 'rm_ok') { + print " <div class=b>\n Meldung:\n </div>\n <div>\n Der von Dir gew\344hlte Eintrag wurde erfolgreich gel\366scht.\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_empty') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </u>\n einen Text und poste\n <u>dann</u>\n !\n <hr>\n"; + } + open PROFILE, "<data/user/profiles/$tmp"; + @data = <PROFILE>; + close PROFILE; + print qq[ <div>\n Dieses Profil wurde insgesamt schon $counter mal aufgerufen !\n <br><br>Alias: $tmp\n <br><br>Nachname: $data[0]\n <br><br>Vorname: $data[1]\n <br><br>Alter: $data[2]\n <br><br>Wohnort: $data[3]\n <br><br>E-Mail:\n <a href="mailto:$data[4]">$data[4]</a>\n <br><br>ICQ-Nummer: $data[5]\n <br><br>Homepage: <a href="$data[6]" target="_new">$data[6]</a>\n <br><br>Weiteres:<br>$data[7]\n <hr>\n Hier kannst Du $tmp eine Nachricht hinterlassen!\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n <input type="text" size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e "data/user/gbooks/$tmp") { + &error("Konnte data/user/gbooks/$tmp nicht \366ffnen") unless open DATEI, "<data/user/gbooks/$tmp"; + @datei = <DATEI>; + close DATEI; + my $nr = 1; + if ($alias ne $tmp) { + foreach $_ (@datei) { + print "<br>Eintrag # $nr: $_"; + ++$nr; + } + } + else { + print qq[ <table>\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="rm_gb_alias">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n]; + for ($i = 0; $i <= $#datei; ++$i) { + print qq[ <tr>\n <td>\n <input type="radio" name="id" value="$i">\n </td>\n <td>\n <div class=q>\n <br>\n Eintrag # $nr:\n $datei[$i]\n </div>\n </td>\n </tr>\n]; + ++$nr; + } + print qq[ </table>\n <table>\n <tr>\n <td>\n <font color=ffffff>\n <input type="submit" value="Markierten Eintrag l\366schen">\n </font>\n </td>\n <td>\n <font color=ffffff>\n <input type="reset" value="Markierung r\374ckg\344ngig machen">\n </font>\n </td>\n </tr>\n </table>\n </form>\n]; + } + } + print $q->end_html; +} +sub edit_html { + my($method, $message) = @_; + &start_html("Benutzerprofil \344ndern"); + if ($method eq 'edit_options_html') { + open DATEI, "<data/user/options/$alias"; + } + elsif ($method eq 'edit_profile_html') { + open DATEI, "<data/user/profiles/$alias"; + } + @data = <DATEI>; + close DATEI; + foreach $_ (@data) { + chomp $_; + } + &menu(); + if ($method eq 'edit_options_html') { + if ($message eq 'edit_options_ok') { + print "<div class=b>\n Hinweis:\n</div>\n<div>\n Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um\n weiterzuchatten einfach Fenster schliessen!\n</div>\n<hr>\n"; + } + elsif ($message eq 'edit_pw_wrong') { + print "<div class=b>\n ACHTUNG!\n</div>\n<div>\n Du hast soeben versucht, dein Passwort zu \344ndern. Jedoch stimmte die Erste Eingabe nicht mit der Zweiten \374berein.\n Bitte versuch es erneuert ...\n</div>\n<hr>\n"; + } + else { + print $q->div('Hier kannst Du Deine Chat-Optionen editieren!'), $q->hr; + } + print qq[<script lang="javascript" type="text/javascript">\n<!--\n\nfunction radioWert(rObj) {\n for (var i=0; i<rObj.length; i++) if (rObj[i].checked) return rObj[i].value;\n return false;\n}\n\nfunction insertcode( code ) {\n document.optionen.elements[radioWert(document.optionen.eingabe)].value = code;\n}\n\n//-->\n</script>\n\n<form name="optionen" action="chat">\n <input type="hidden" name="var" value="edit_options">\n <table>\n <tr>\n <td>\n <div>\n Dein Passwort\n <font color=ffa500>\n (Gut merken !!)\n </font>\n <br>\n <input type="password" name="id" value="$data[0]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n Geb hier das Passwort erneuert ein:\n <br>\n <input type="password" name="tmp" value="$data[0]">\n </div>\n </td>\n </tr>\n </table>\n <hr>\n <div>Einstellungen f\374r den Nachrichten-Verlauf</div>\n <table>\n <tr>\n <td>\n <br>\n <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div>\n <font color=ffffff>\n <select name="maxVerlauf" size="1">\n <option value="$data[3]">$data[3]\n]; + for ($i = 1; $i <= 50; ++$i) { + print qq[<option value="$i">$i]; + } + print qq[ </select>\n </font>\n </td>\n </tr>\n <tr>\n <td>\n <br>\n<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div>\n <font color=ffffff>\n <select name="verlaufOrder" size="1">\n <option value="$data[4]">Bisherige Einstellung ($data[4])\n <option value="0">Neue Verlaufnachrichten oben (0)\n <option value="1">Neue Verlaufnachrichten unten (1)\n </select>\n </font>\n </td>\n </tr>\n </table>\n<br>\n <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div>\n <hr>\n <table>\n <tr>\n <td>\n <div>\n <input type="radio" name="eingabe" value="col" checked>\n Auswahl von Farbe 1\n <br>\n (Farbe Deines Nicks):\n <br>\n <input name="col" size="6" maxlength="6" value="$data[1]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n <input type="radio" name="eingabe" value="secol">\n Auswahl von Farbe 2\n <br>\n (Farbe Deiner Nachrichten):\n <br>\n <input name="secol" size="6" maxlength="6" value="$data[2]">\n </div>\n </td>\n </tr>\n </table>\n<br>\n <div>\n Beliebige Auswahl markieren und Farbe w\344hlen. Um Deine Optionen abzuspeichern,\n auf "Daten \344ndern" klicken!\n </div>\n <br>\n]; + open COLORS, '<templates/colors.sno'; + @colors = <COLORS>; + close COLORS; + print @colors; + } + elsif ($method eq 'edit_profile_html') { + if ($message eq 'edit_profile_ok') { + print " <div class=b>\n Hinweis:\n </div>\n <div>\n Du hast soeben Dein Profil erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren:\n <hr>\n"; + } + else { + print $q->div('Hier kannst Du Dein Profil editieren!'), $q->hr; + } + print qq[ <form action="chat">\n <input type="hidden" name="var" value="edit_profile">\n <div>\n Dein Nachname:\n <br>\n <input name="nachname" value="$data[0]">\n </div>\n <br>\n <div>\n Dein Vorname:\n <br>\n <input name="vorname" value="$data[1]">\n </div>\n <br>\n <div>\n Dein Alter:\n <br>\n <input name="alter" value="$data[2]">\n </div>\n <br>\n <div>\n Dein Wohnort:\n <br>\n <input name="wohnort" value="$data[3]">\n </div>\n <br>\n <div>\n Deine E-Mail Adresse:\n <br>\n <input name="email" value="$data[4]">\n </div>\n <br>\n <div>\n Deine ICQ-Nummer:\n <br>\n <input name="icq" value="$data[5]">\n </div>\n <br>\n <div>\n Deine Homepage:\n <br>\n <input name="homepage" value="$data[6]">\n </div>\n <br>\n <div>\n Weiteres:\n <br>\n <textarea rows="5" cols="40"name="weiteres" wrap="virtual">$data[7]</textarea>\n </div>\n]; + } + print qq[ <hr>\n <font color=ffffff>\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="room" value="$room">\n <input type="submit" value="Daten \344ndern ...">\n </font>\n </form>\n</body>\n</html>\n]; +} +sub edit { + my $method = $_[0]; + if ($method eq 'edit_profile') { + my $url = $homepage; + $url =~ s[^http://*][]; + open PROFILE, ">data/user/profiles/$alias"; + my $profile = "$nachname\n$vorname\n$alter\n$wohnort\n$email\n$icq\nhttp://$url\n$weiteres"; + $profile =~ s/</</g; + print PROFILE $profile; + close PROFILE; + &edit_html('edit_profile_html', 'edit_profile_ok'); + } + elsif ($method eq 'edit_options') { + if ($id ne $tmp) { + &edit_html('edit_options_html', 'edit_pw_wrong'); + $client->shutdown(2); + exit 0; + } + open OPTIONS, ">data/user/options/$alias"; + my $options = "$id\n$col\n$secol\n$maxVerlauf\n$verlaufOrder"; + $options =~ s/</</g; + print OPTIONS $options; + close OPTIONS; + my $room = &get_room($alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> <font color='$secol'>hat seine Chat-Einstellungen geändert</font> ...</font></i>", $alias); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &edit_html('edit_options_html', 'edit_options_ok'); + } +} +1; diff --git a/0.7.2/modules/hierachie.pm b/0.7.2/modules/hierachie.pm new file mode 100644 index 0000000..3a9e13c --- /dev/null +++ b/0.7.2/modules/hierachie.pm @@ -0,0 +1,74 @@ +sub hierachie { + my($alias, $room) = @_; + open FILE, "<data/online/rstat/$room"; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + open FILE, '<data/hierachie'; + my(@hierachie) = <FILE>; + close FILE; + my(@userlevels) = (@hierachie, @rstat); + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($name eq $alias) { + chomp $level; + return $level; + } + } +} +sub hierachie_rm { + my $alias = shift @_; + my @return; + open FILE, '<data/hierachie'; + my(@hierachie) = <FILE>; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, '>data/hierachie'; + print FILE @return; + close FILE; +} +sub hierachie_rm_rstat { + my($alias, $room) = @_; + my @return; + return unless open FILE, "<data/online/rstat/$room"; + my(@hierachie) = <FILE>; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, ">data/online/rstat/$room"; + print FILE @return; + close FILE; +} +sub hierachie_add { + my($alias, $level) = @_; + &hierachie_rm($alias); + open FILE, '>>data/hierachie'; + print FILE "$alias<;$level\n"; + close FILE; +} +sub hierachie_add_rstat { + my($alias, $level, $room) = @_; + &hierachie_rm_rstat($alias, $room); + return unless open FILE, ">>data/online/rstat/$room"; + print FILE "$alias<;$level\n"; + close FILE; +} +sub prove_away { + my($alias, $room) = @_; + return unless open AWAY, "<data/online/rstat/$room.away"; + @away = <AWAY>; + close AWAY; + my $name, $away; + foreach $_ (@away) { + if (/^$alias.*/) { + ($name, $away) = split(/<; /, $_, 3); + chomp $away; + return $away; + } + } +} +1; diff --git a/0.7.2/modules/htdocs.pm b/0.7.2/modules/htdocs.pm new file mode 100644 index 0000000..51c28ba --- /dev/null +++ b/0.7.2/modules/htdocs.pm @@ -0,0 +1,127 @@ +sub htdocs { + if ($var eq 'help_html') { + &printfile('templates/help.sno', 'Alle Chatbefehle'); + } + elsif ($var eq 'logo_html') { + &start_html('Logo'); + &logo_html; + } + elsif ($var eq 'menu_html') { + &menu_html; + } + elsif ($var eq 'logs_html') { + &logs_html; + } + elsif ($var eq 'view_logs_html') { + &secure_checkid($alias, $tmpid); + &printfile("data/logs/$tmp", 'Logdatei', 'blank') if 5 <= &hierachie($alias); + } + elsif ($var eq 'superuser_html') { + &secure_checkid($alias, $tmpid); + &superuser_html; + } + elsif ($var eq 'chatiquette_html') { + &printfile('templates/chatiq.sno', 'Chatiquette'); + print $q->end_html; + } + else { + print $q->start_html(-'bgcolor', '000000'), $q->end_html; + } +} +sub menu_html { + &start_html("Men\374"); + print "<div>\n Von hier aus kannst du alle Untermen\374punkte des Systems erreichen:\n</div>\n<hr>\n"; + &menu(); + print "</body>\n</html>"; +} +sub logo_html { + print qq[ <layer top=-3 left=0><div style="position:absolute; top:5; left:10">\n <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"\n codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"\n WIDTH=48 HEIGHT=48>\n <PARAM NAME=movie VALUE="$gfxpath/ySymbol.swf">\n <PARAM NAME=loop VALUE=false>\n <PARAM NAME=menu VALUE=false>\n <PARAM NAME=quality VALUE=high>\n <PARAM NAME=scale VALUE=noborder>\n <PARAM NAME=wmode VALUE=opaque>\n <PARAM NAME=bgcolor VALUE=$bgcolor>\n <EMBED src="$gfxpath/ySymbol.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=48 HEIGHT=48 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </OBJECT>\n </div></layer>\n]; + print $q->end_html; +} +sub logs_html { + &start_html('Logdateien'); + &menu; + print "<div>\n Hier befinden sich alle Logdateien\n</div>\n<hr>\n"; + if (5 <= &hierachie($alias)) { + print $q->div(qq[Folgende Logdateien des Raumes "$standardroom" k\366nnen nur von Oberw\344chtern oder h\366her gelesen werden (Sortiert nach A-Z, a-z):]), $q->br; + opendir LOGS, 'data/logs'; + my(@logs) = readdir LOGS; + closedir LOGS; + my(@sortedir) = sort(@logs); + foreach $_ (@sortedir) { + if (-f "data/logs/$_") { + print $q->a({-'href', "chat?request=htdocs&alias=$alias&var=view_logs_html&tmp=$_&tmpid=$tmpid", -'target', '_new'}, "$_"), ' '; + } + } + } + else { + print $q->div("Logdateien k\366nnen nur von Oberw\344chtern (OW) gelesen werden. Du bist jedoch ein W\344chter (W\304) oder ein", qq["Normaler Chatter". Oberw\344chter k\366nnen alles nachlesen, was \366ffentlich im Raum "Cyberbar" gechattet wurde.]), $q->hr; + } + print $q->end_html; +} +sub superuser_html { + &start_html ('Superuser'); + &menu; + print "<div>Hallo $alias. Du bist als "; + my $hierachie = &hierachie($alias); + if (7 <= $hierachie) { + print $q->b('Administrator'), ' (AD) eingetragen.</div><br>', $q->br; + } + elsif (5 <= $hierachie) { + print $q->b("Oberw\344chter"), ' (OW) eingetragen.</div><br>', $q->br; + } + elsif (3 <= $hierachie) { + print $q->b("W\344chter"), " (W\304) eingetragen.</div><br>", $q->br; + } + else { + print $q->b('normaler Chatter'), ' (NC) eingetragen.</div><br>', $q->br; + } + open FILE, 'data/hierachie'; + my(@hierachie) = <FILE>; + close FILE; + my @ows, @was, @ads; + foreach $_ (@hierachie) { + my($name, $level) = split(/<;/, $_, 3); + chomp $level; + if ($level == 3) { + push @was, $name; + } + elsif ($level == 5) { + push @ows, $name; + } + elsif ($level == 7) { + push @ads, $name; + } + if (3 <= $hierachie) { + if ($level == 4) { + push @was, "$name!"; + } + elsif ($level == 6) { + push @ows, "$name!"; + } + elsif ($level == 8) { + push @ads, "$name!"; + } + } + } + my $nads = $#ads + 1; + print '<div>', $q->b('AD'), "s ($nads St\374ck)"; + foreach $_ (@ads) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrow = $#ows + 1; + print '</div><br><br><div>', $q->b('OW'), "s ($nrow St\374ck)"; + foreach $_ (@ows) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrwa = $#was + 1; + print '</div><br>', $q->br, '<div>', $q->b("W\304"), "s ($nrwa St\374ck)"; + foreach $_ (@was) { + print $q->font({-'color', 'FFA500'}, ' ' . $_); + } + print qq[<hr>\n Die jeweiligen F\344higkeiten der Oberw\344chter (OW) und der W\344chter (W\304) sind unter\n "<a href="chat?request=htdocs&var=help_html">Chat-Befehle</a>"\n dokumentiert. Versteckte Superuser k\366nnen nur von anderen Superusern auf\ndieser Liste eingesehen werden!\n</div>\n</body>\n</html>\n]; +} +sub menu { + print "<div>\n <a href='chat?request=divcom&var=edit_profile_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Profil \344ndern</a>\n <a href='chat?request=divcom&var=edit_options_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Optionen</a>\n <a href='chat?request=divcom&var=list_alias_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Benutzer</a>\n <a href='chat?request=htdocs&var=help_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Befehle</a>\n <a href='chat?request=divcom&var=gb_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Board</a>\n <a href='chat?request=htdocs&var=superuser_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Superuser</a>\n <a href='chat?request=htdocs&var=logs_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Logs</a>\n <a href='chat?request=statistic&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Statistik</a>\n <a href='chat?request=htdocs&var=chatiquette_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Chatiquette</a>\n</div>\n<hr>\n"; +} +1; diff --git a/0.7.2/modules/input.pm b/0.7.2/modules/input.pm new file mode 100644 index 0000000..48df243 --- /dev/null +++ b/0.7.2/modules/input.pm @@ -0,0 +1,14 @@ +sub input { + &rm_away($alias, $room); + $maxVerlauf = '10' if $maxVerlauf eq undef; + $verlaufOrder = '1' if $verlaufOrder eq undef; + if ($tmp eq 'login') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat den Chat im Raum <b>$room</b> betreten ...</font></i>"); + } + print qq[<html>\n<head>\n<script language="JavaScript"><!--\n\n// Einstellungsvariablen\nmaxVerlauf = $maxVerlauf; // Anzahl der Eintr\344ge des Verlaufs\nmaxPreview = 20; // Zeichenl\344nge der Verlaufsvorschau\nverlaufOrder = $verlaufOrder; // Neue Nachrichten von: 0=oben, 1=unten\n//autoAwayTimeout = 5; // Sekunden, nach denen der User 'Away' gesetzt wird\n//autoQuitTimeout = 10; // Sekunden, nach denen der User den Chat verl\344sst\nautoAwayTimeout = 300; // Sekunden, nach denen der User 'Away' gesetzt wird\nautoQuitTimeout = 1200; // Sekunden, nach denen der User den Chat verl\344sst\n\n// Interne Variablen\nuserNotFocused = false; // Wenn User nicht schreibt\nuserAway = false; // Wenn User automatisch auf 'Away' gesetzt ist\nuserAwayTime = 0; // Sekunden, die User 'Away' ist\nfullVerlauf = new Array( maxVerlauf ); // Verlaufspuffer\n\nfunction delout()\n{\n addVerlauf (document.inf.msg.value); // Dem Verlauf eine Nachricht anh\344ngen\n document.inf.msg.focus(); // Fukus in das Eingabeform\n document.inf.msg.select(); // Text im Eigabeform markieren\n document.inf.submit(); // Formular absenden\n return false; // Abbrechen, damit das Frame nicht neu geladen wird\n}\n\nfunction CheckAuswahl()\n{\n id=document.verlaufform.verlauf.selectedIndex; // ID des ausgew\344hlten Feldes\n\n if (fullVerlauf[id-1] != null) // Nur, wenn das Feld nicht leer ist\n {\n document.inf.msg.value = fullVerlauf[id-1]; // Eintrag ins Textfeld\n }\n\n document.verlaufform.verlauf.selectedIndex = 0; // Ersten Eintrag (\334berschrift) ausw\344hlen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n\n return true;\n}\n\nfunction addVerlauf (msg)\n{\n if (msg == "") // Falls msg leer\n return false; // Aufruf ignorieren\n\n if (verlaufOrder) // neue Nachrichten von unten\n {\n for (i=0; i<(maxVerlauf-1); i++) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+1].text = document.verlaufform.verlauf.options[i+2].text;\n fullVerlauf[i] = fullVerlauf[i+1];\n }\n }\n else // neue Nachrichten von oben\n {\n for (i=(maxVerlauf-2); i>=0; i--) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+2].text = document.verlaufform.verlauf.options[i+1].text;\n fullVerlauf[i+1] = fullVerlauf[i];\n }\n }\n\n if (msg.length > maxPreview) // Vorschau zuschneiden\n pre = msg.slice(0, maxPreview-3) + "...";\n else\n pre = msg;\n\n if (verlaufOrder) // pos = Position des neuen Eintrags\n pos = maxVerlauf-1;\n else\n pos = 0\n\n document.verlaufform.verlauf.options[pos+1].text = pre; // Neue Vorschau anf\374gen\n fullVerlauf[pos] = msg; // Neuen Eintrag an den Verlauf anf\374gen\n\n// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag\n document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (\334berschrift)\n}\n\nfunction msgBlur()\n{\n userNotFocused = true;\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction msgFocus()\n{\n userNotFocused = false;\n if (userAway) // Wird ausgef\374hrt, falls User 'Away' war\n {\n ; // nop\n }\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction checkInterval()\n{\n// status = "userNotFocused=" + userNotFocused + "; userAway=" + userAway + "; userAwayTime=" + userAwayTime + ""; // Debug\n if (userNotFocused)\n {\n userAwayTime += 5; // Addiere 5, da nur alle 5Sek ausgef\374hrt\n if (!userAway)\n {\n if (autoAwayTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n if (document.inf.tmp.value != "away")\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2faway&tmp=autoaway","reload"); // 'Away' setzen\n userAway = true;\n }\n }\n else\n {\n if (autoQuitTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2fexit&tmp=autologout","reload"); // Chat beenden\n }\n }\n }\n\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden wieder aufrufen\n}\n\nfunction initFrame()\n{\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden aufrufen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n}\n//-->\n</script>\n]; + &style; + print qq[</head>\n<body class="blank" onload="initFrame();">\n <div align="left">\n <table border="0" cellpadding="0" cellspacing="0">\n <tr>\n <td>\n <form name="inf" target="reload" action="chat" onsubmit="return delout();">\n <input type="hidden" name="request" value="postmessage">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="room" value="$room">\n <input type="hidden" name="col" value="$col">\n <input type="hidden" name="secol" value="$secol">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="whisper" value="$whisper">\n <input type="hidden" name="tmp" value="$tmp">\n <input size="40" maxlength="300" name="msg" onBlur="msgBlur();" onFocus="msgFocus();">\n </form>\n </td>\n <td><form name="verlaufform">\n <script language="JavaScript"><!--\n document.write("<select size='1' name='verlauf' size='40' onChange='CheckAuswahl();'>");\n document.write("<option>- Nachrichten-Verlauf -</option>");\n for(i=0; i<maxVerlauf; i++) // Leere Verlaufsfelder generieren\n document.write("<option value>(leer)</option>");\n document.write("</select>");\n //-->\n </script>\n </form>\n </td>\n </tr>\n </table>\n </div>\n</body>\n</html>\n]; + $client->$shutdown(2); + exit 0; +} +1; diff --git a/0.7.2/modules/loggedin.pm b/0.7.2/modules/loggedin.pm new file mode 100644 index 0000000..52315d6 --- /dev/null +++ b/0.7.2/modules/loggedin.pm @@ -0,0 +1,37 @@ +sub loggedin { + &start_html($loginplace, 'blank'); + print qq[<div>\n <font color='$col'>$alias</font>, sch\366n da\337 Du da bist :-), <a href='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder'>hier</a> kannst du die Seite aktualisieren.\n</div>\n<hr>\n<div>\n<a href="chat?request=stream&alias=$alias&room=$standardroom&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder">Hier</a>\nkannst du den Standardraum $standardroom betreten. <br><br>\n]; + opendir ROOMDIRS, 'data/online/rooms'; + local(@roomdirs) = readdir ROOMDIRS; + close ROOMDIRS; + foreach $_ (@roomdirs) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + my $room = $_; + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + opendir ROOMDIR, "data/online/rooms/$room"; + my(@roomdir) = readdir ROOMDIR; + close ROOMDIR; + my $nr = $#roomdir - 1; + if ($door or $_ eq $loginplace) { + print $q->b($_), " $door ($nr) "; + } + else { + print $q->b($q->a({-'href', "chat?request=stream&alias=$alias&room=$_&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder"}, "$_")), " ($nr)"; + } + print " Raumthema: $rstat[1]" if $rstat[1] ne "\n"; + print $q->br; + foreach $_ (@roomdir) { + if ($_ ne '..' and $_ ne '.') { + print "<a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid' target='$_'>$_</a> "; + } + } + print $q->br, $q->br; + } + } + &gb_html($_[0],'loggedin'); +# print $q->br, $q->br, $q->b($q->font({-'color', 'ffa500'}, 'Aktuelles:')), $q->br, "Wie ihr seht, ist der neue yChat da. Allerdings ist es gut M\366glich, da\337 diese Version einige Bugs beinhaltet! ", q[Solltest du welche entdecken, dann schick doch bitte eine Mail an <a href='mailto:snooper@ychat.de'>snooper@ychat.de</a>.], '<br><br>Leider konnten noch nicht alle geplanten Features eingebaut werden. Dazu fehlte leider die Zeit.', " Denn mit steigendem Sourcecode leidet leider auch das schnelle Anpassungsverm\366gen neuer Ideen.<br><br>", "Aber egal, hauptsache der Chat l\344uft wieder :-) Mfg, Snooper ...</div>", $q->end_html; +} +1; diff --git a/0.7.2/modules/online.pm b/0.7.2/modules/online.pm new file mode 100644 index 0000000..6c5f8a6 --- /dev/null +++ b/0.7.2/modules/online.pm @@ -0,0 +1,104 @@ +sub online { + &secure_checkid($alias, $tmpid); + my(@away) = &prove_away($alias, $room, 'return_list'); + for (;;) { + for ($i = 0; $i <= $#away; $i += 2) { + last if $away[$i] eq $alias or $room eq $loginplace; + } + open DATEI, "<data/online/users/$alias"; + my $oldstamp = <DATEI>; + close DATEI; + if ($oldstamp > time - 100) { + open DATEI, "<data/user/counts/$alias.online"; + my $online = <DATEI>; + close DATEI; + my $total = time - $oldstamp + $online; + open DATEI, ">data/user/counts/$alias.online"; + print DATEI $total; + close DATEI; + } + last; + } + unless (-d "data/online/rooms/$room") { + mkdir "data/online/rooms/$room", 511; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + open DATEI, '<data/online/prove'; + my $provetime = <DATEI>; + close DATEI; + &check_online if $provetime < time - 40; + print qq[<html>\n <head>\n <meta http-equiv="refresh" content="20" URL="chat?request=online&room=$room&alias=$alias&tmpid=$tmpid">\n <style type="text/css">\n a { font-family: arial; font-size:11px; color: #ffffef; }\n a:hover { color: #ffffff; }\n </style>\n <style type="text/css" media="all">\n a { text-decoration: none; }\n a:hover { text-decoration:underline; }\n </style>\n </head>\n <body bgcolor="$chatbg">\n]; + opendir ROOM, 'data/online/rooms/' . $room; + my(@room) = sort(readdir ROOM); + closedir ROOM; + my $chatter = $#room - 1; + print "<font size='1' color='ffffff' face='arial'>$room ($chatter):</font><table>\n"; + open FILE, "<data/online/rstat/$room"; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + open FILE, '<data/hierachie'; + my(@userlevels) = (<FILE>, @rstat); + close FILE; + open FILE, "<data/online/rstat/$room.away"; + my(@away) = <FILE>; + close FILE; + foreach my $nick (@room) { + if (-f "data/online/rooms/$room/$nick") { + my $inside = 0; + foreach $_ (@away) { + my($name, $awaymessage) = split(/<;/, $_, 3); + if ($name eq $nick) { + chomp $awaymessage; + print "<tr><td><img title='$awaymessage' alt='$awaymessage' src='$gfxpath/away.gif'></td>"; + $inside = 2; + } + } + if ($inside == 0) { + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($nick eq $name) { + chomp $level; + $inside = 1; + if ($level == 1) { + print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>"; + last; + } + elsif ($level == 2) { + print "<tr><td><img title='Die Unschuld vom Land' alt='Die Unschuld vom Land' src='$gfxpath/uvl.gif'></td>"; + last; + } + elsif ($level == 3) { + print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>"; + last; + } + elsif ($level == 5) { + print "<tr><td><img title='oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>"; + last; + } + elsif ($level == 7) { + print "<tr><td><img title='Administrator' alt='Administrator' src='$gfxpath/adm.gif'></td>"; + last; + } + else { + print '<tr><td></td>'; + last; + } + } + } + } + if ($inside == 0) { + print '<tr><td></td>'; + } + print "<td><a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$nick&tmpid=$tmpid' target='$nick'>$nick</a></td></tr>\n"; + } + } + print '</table></body></html>'; +} +1; diff --git a/0.7.2/modules/postmessage.pm b/0.7.2/modules/postmessage.pm new file mode 100644 index 0000000..5172b4f --- /dev/null +++ b/0.7.2/modules/postmessage.pm @@ -0,0 +1,90 @@ +sub postmessage { + if (not -e "data/online/rooms/$room/$alias" and $tmp ne 'autoaway' and $tmp ne 'autologout') { + &post_prv($alias, "<font color=ffffff>Du befindest Dich nicht im Raum <font color=ffa500>$room</font> und kannst dort auch keine Nachrichten posten!</font>"); + &reload_html; + } + elsif (length $msg > 300) { + &post_prv($alias, "<font color=ffffff>Deine Nachricht enth\344lt zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>"); + &reload_html; + } + if ($tmp eq 'away') { + &rm_away($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat sich zur\374ck gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'notaway';]); + } + $msg =~ s/</</g; + if (substr($msg, 0, 1) ne '/') { + unless ($tmp eq 'autoaway') { + foreach $_ ($col, $secol) { + &prove_color($alias, $_); + } + } + open MSGFILE, ">>data/msgs/$room"; + if (not $msg =~ s[/me/][<i>$alias</i>]g || $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g) { + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color='$col'>$alias: <font color='$secol'>$msg<br></font></font></b><;$alias<;\n"; + } + else { + $msg =~ s[/me/][<i>$alias</i>]g; + $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color=$secol>$msg</font></font></b><br><;$alias<;\n"; + } + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } + &log("<b><font color=$col>$alias: <font color=$secol>$msg</font></font></b>") if $room eq $standardroom; + &reload_html; + } + else { + &command($msg, $tmp); + } +} +sub post { + my($room, $msg2post, $alias, $secroom) = @_; + my(@rooms) = $room; + @rooms = ($room, $secroom) if $room ne $secroom; + foreach my $theroom (@rooms) { + open MSGFILE, ">>data/msgs/$theroom"; + print MSGFILE '!<;' . time . "<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$theroom"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$theroom/$_"; + } + } + &log($msg2post) if $room eq $standardroom; +} +sub post_prv { + my($alias2post, $msg2post) = @_; + my $roomofalias = &get_room($alias2post); + return 'false' if not $roomofalias; + open MSGFILE, ">>data/msgs/$roomofalias"; + print MSGFILE "$alias2post<;" . time . "<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$roomofalias"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$roomofalias/$_"; + } + return 'true'; +} +sub post_strmsg { + my($alias, $room, $command, $action) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . "<;$command<;$action<;!<;!<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} + +1; diff --git a/0.7.2/modules/shared.pm b/0.7.2/modules/shared.pm new file mode 100644 index 0000000..de98172 --- /dev/null +++ b/0.7.2/modules/shared.pm @@ -0,0 +1,307 @@ +sub reload_html { + print "<html><body bgcolor='$chatbg'></body></html>"; + $client->shutdown(2); + exit 0; +} +sub printfile { + my($file2print, $pagetitle, $bodyclass) = @_; + &start_html($pagetitle, $bodyclass) if $pagetitle ne ''; + &menu unless $bodyclass eq 'blank'; + open FILE2PRINT, "<$file2print"; + print "$_\n" while defined($_ = <FILE2PRINT>); + close FILE2PRINT; +} +sub start_html { + print "<html><head><title>$title - $_[0]</title>$_[2]"; + &style; + print '</head>'; + if ($_[1] eq 'start') { + print '<body onload="document.login.alias.focus();">'; + } + elsif ($_[1] ne '') { + print "<body class=$_[1]>"; + } + else { + print '<body>'; + } +} +sub log { + my $msg2log = $_[0]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + my $js; + ($msg2log, $js) = split(/<script/, $msg2log, 3); + open LOG, ">>data/logs/$days.$months.$years"; + print LOG "<br><font color=ffffef><i>($hours:$mins:$secs)</i></font> $msg2log\n"; + close LOG; +} +sub timestring { + my($mins, $hours) = (localtime)[1, 2]; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + return "$hours:$mins"; +} +sub timearray { + my($secs, $mins, $hours, $days, $months, $years) = (localtime)[(0, 1, 2, 3, 4, 5)]; + $months += 1; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + $secs = '0' . $secs if $secs < 10; + $days = '0' . $days if $days < 10; + $months = '0' . $months if $months < 10; + $years = $years - 100; + if ($years < 10) { + $years = '200' . $years; + } + else { + $years = '20' . $years; + } + return $secs, $mins, $hours, $days, $months, $years; +} +sub error { + my $error_msg = $_[0]; + &start_html("Error: ($error_msg)"); + print $q->div("Error: ($error_msg)"), $q->end_html; + open ERROR, '>>data/error'; + print ERROR "Alias: $alias TempID: $tmpid File. $0 PID: $$ Time: " . time . " Message: $error_msg \n"; + close ERROR; + $client->shutdown(2) if $client; + exit 0; +} +sub check_online { + open PROVE, '>data/online/prove'; + print PROVE time; + close PROVE; + opendir DIR, 'data/online/rooms'; + my(@roomdir) = readdir DIR; + closedir DIR; + foreach my $theroom (@roomdir) { + opendir DIR, "data/online/rooms/$theroom"; + my(@roomusers) = readdir DIR; + closedir DIR; + my $empty = 1; + foreach $user (@roomusers) { + if (-f "data/online/rooms/$theroom/$user") { + $empty = 0; + open USER, "<data/online/rooms/$theroom/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + unlink "data/online/$theroom/$user"; + open USER, "<data/online/users/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + if ($user ne $alias) { + &rm_alias($user, $theroom); + } + else { + unlink "data/online/rooms/$theroom/$user"; + } + &post($theroom, '<i><font color=ffffff>' . ×tring . " <b>$user</b> hat den Chat verlassen ... </font></i>"); + } + } + } + } + opendir PIDS, "data/online/pids/$theroom"; + my(@pids) = readdir PIDS; + closedir PIDS; + if ($empty == 1) { + rmdir "data/online/rooms/$theroom"; + unlink "data/online/rstat/$theroom"; + unlink "data/online/rstat/$theroom.away"; + unlink "data/msgs/$theroom"; + foreach $_ (@pids) { + unlink "data/online/pids/$theroom/$_" if -f "data/online/pids/$theroom/$_"; + } + rmdir "data/online/pids/$theroom"; + } + } +} +sub rm_if_loggedin { + my $alias = shift; + my $room = &get_room($alias); + while ($room ne undef) { + &rm_alias($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$user</font> hat den Chat verlassen ... </font></i>"); + $room = &get_room($alias); + } +} +sub secure_checkid { + my($alias2check, $tmpid) = @_; + &error("Falsche TempID! $tmpid") unless -f "data/online/tmpid/$alias.$tmpid"; +} +sub rm_alias { + my($alias, $room) = @_; + unlink "data/online/rooms/$room/$alias"; + unlink "data/online/users/$alias"; + opendir TMPID, 'data/online/tmpid'; + my(@tmpid) = readdir TMPID; + close TMPID; + foreach $_ (@tmpid) { + unlink "data/online/tmpid/$_" if /^$alias\..+$/; + } + unlink "data/online/ident/$alias"; + &rm_rstat($alias, $room); +} +sub rm_rstat { + my($alias, $room) = @_; + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + my(@rstat2) = ($rstat[0], $rstat[1]); + for ($i = 2; $i <= $#rstat; ++$i) { + chomp $rstat[$i]; + push @rstat2, $rstat[$i] . "\n" unless $rstat[$i] =~ /^$alias<;/; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT @rstat2; + close RSTAT; +} +sub rm_away { + my($alias, $room) = @_; + open AWAY, "<data/online/rstat/$room.away"; + my(@away) = <AWAY>; + close AWAY; + my @away2; + foreach $_ (@away) { + my(@split) = split(/<;/, $_, 0); + push @away2, $_ if $alias ne $split[0]; + } + open AWAY, ">data/online/rstat/$room.away"; + print AWAY @away2; + close AWAY; +} +sub rm_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + my @new; + foreach $_ (@entry) { + push @new, $_ if $entry . "\n" ne $_; + } + if (@entry != @new) { + open ENTRY, ">data/$file"; + print ENTRY @new; + close ENTRY; + return 1; + } + else { + return; + } +} +sub add_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + foreach $_ (@entry) { + chomp $_; + return if $entry eq $_; + } + open ENTRY, ">>data/$file"; + print ENTRY $entry . "\n"; + close ENTRY; + return 1; +} +sub prove_color { + my($alias, $color) = @_; + my $length = length $color; + if ($length > 6 or $length < 6) { + &post_prv($alias, "<font color=ffffff>Ung\374ltige Hexadezimalfarbe.</font>"); + &reload_html; + } +} +sub kill_alias { + my($alias2kill, $alias) = @_; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + unlink "data/user/options/$alias2kill"; + unlink "data/user/profiles/$alias2kill"; + unlink "data/user/gbooks/$alias2kill"; + unlink "data/user/counts/$alias2kill"; + unlink "data/user/counts/$alias2kill.online"; + unlink "data/user/lastlogin/$alias2kill"; + unlink "data/user/memos/$alias2kill"; + &rm_entry($alias2kill, 'ban'); + open DEL, '>>data/kill'; + print DEL "($days.$months.$years $hours:$mins:$secs) $alias2kill wurde von $alias gekillt\n"; + close DEL; +} +sub random_color { + my(@digit) = ('F', 'C', 'A', 'B', (5, 6, 7, 8, 9)); + my $dig1 = rand @digit; + my $dig2 = rand @digit; + my $dig3 = rand @digit; + my $dig4 = rand @digit; + my $dig5 = rand @digit; + my $dig6 = rand @digit; + return $digit[$dig1] . $digit[$dig2] . $digit[$dig3] . $digit[$dig4] . $digit[$dig5] . $digit[$dig6]; +} +sub url_decode { + my $t = shift @_; + $t =~ s[/][]; + $t =~ tr/+/ /; + while ($t =~ s/%([a-f0-9][a-f0-9])/chr hex $1;/ie) { + (); + } + return $t; +} +sub url_encode { + my $t = shift @_; + while ($t =~ s/([^\w()'*~!.-])/sprintf '%%%02x', $1;/eg) { + (); + } + return $t; +} +sub calculate_hpm { + my($hits, $starttime) = @_; + return sprintf('%.2f', $hits / ((time - $starttime) / 60)); +} +sub calculate_uptime_hours { + my $starttime = shift @_; + return sprintf('%.2f', (time - $starttime) / 3600); +} +sub private_javascript { + my($alias, $room, $javascript) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . qq[<;!<;!<;<script language="JavaScript">$javascript</script><;\n]; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} +sub get_theme { + my $room = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + return '<b>Raumthema:</b>' . $rstat[1] if $rstat[1] ne undef; +} +sub get_room { + my $alias = shift @_; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $room (@dir) { + opendir DIR, "data/online/rooms/$room"; + my(@chatter) = readdir DIR; + closedir DIR; + foreach my $chatter (@chatter) { + return $room if $chatter eq $alias; + } + } + return undef; +} +sub debug { + open DEBUG, '>data/debug'; + while (@_) { + chomp $_; + print DEBUG "$_\n"; + } + close DEBUG; +} +1; diff --git a/0.7.2/modules/start.pm b/0.7.2/modules/start.pm new file mode 100644 index 0000000..6b1ce0f --- /dev/null +++ b/0.7.2/modules/start.pm @@ -0,0 +1,254 @@ +sub start { + if ($var eq 'create_alias_html') { + &create_alias_html; + } + elsif ($var eq 'create_alias') { + &create_alias; + } + elsif ($var eq 'login_html') { + &login_html; + } + elsif ($var eq 'chatiquette_html') { + &chatiquette_html; + } + elsif ($alias eq '') { + &login_html; + } + else { + &checklogin; + } +} +sub login_html { + &check_online; + local $counter = undef; + open COUNT, '<data/count'; + $counter = <COUNT>; + close COUNT; + ++$counter; + open COUNT, '>data/count'; + flock COUNT, 2; + print COUNT $counter; + close COUNT; + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + closedir USERS; + opendir REGISTRED, 'data/user/options'; + local(@registred) = readdir REGISTRED; + closedir REGISTRED; + my($logtin, $users) = ($#users - 1, $#registred - 1); + &start_html("Created & Copyright by Paul C. B\374tow", 'start'); + print qq[ <center>\n <table width=500>\n <tr>\n <td>\n <center>\n <table>\n <tr>\n <td>\n <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=240 HEIGHT=240>\n <param name=movie value="$gfxpath/yIntro.swf">\n <param name=loop value=false>\n <param name=menu value=false>\n <param name=quality value=high>\n <param name=scale value=noborder>\n <param name=wmode value=opaque>\n <param name=bgcolor value=$bgcolor>\n <embed src="$gfxpath/yIntro.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=240 HEIGHT=240 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </object>\n </td>\n <td>\n <div>\n yChat: Version $version\n <br><br>\n Letztes Update: $datum\n <br><br>\n Seitenaufrufe: $counter\n <br><br>\n Benutzer registriert: $users\n <br><br>\n Benutzer online: $logtin\n <br><br>\n Benutzerlimit: $limit\n <br><br>\n Server: $localhost:$localport\n <br><br>\n Page: <a href="http://www.yChat.org">www.yChat.org</a>\n </div>\n </td>\n </tr>\n </table>\n </center>\n </div>\n <br>\n <br>\n]; + if ($tmp eq 'true') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Wahrscheinlich existiert Dein Alias "$alias" nicht,\n <br>\n Du hast Dich verschrieben oder das Passwort ist falsch.\n <br>\n Versuch es erneuert !\n </div>\n]; + } + elsif ($tmp eq 'quit') { + print qq[ <div>\n Du hast soeben den Chat verlassen.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autologout') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autokick') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat katapultiert. Grund: Du hast den Chat geflutet!\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'banned') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest aus dem Chat verbannt!!!\n <br>\n Z.z. kannst Du Dich leider nicht in den Chat einloggen.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'kick') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat katapultiert!\n <br>\n Schlechtes Verhalten mag die Ursache hierf\374r sein.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'selfkill') { + print qq[ <div>\n Du hast dich soeben ganz und gar aus dem System gel\366scht!\n <br>\n Wenn du dir einen neuen Nick angelen willst, dann einfach auf "Registrieren" klicken! :-)\n </div>\n]; + } + elsif ($tmp eq 'selfkill') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat ausgeloggt!\n <br>\n Ursache hierf\374r mag sein, da\337 der Chat voll war und Du Dich nicht am\n Geschehen beteiligt- und unn\366tige Chatkapazit\344ten in Anspruch\n genommen hast.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'full') { + print "<div class=b>ACHTUNG!</div><div>Der Chat ist leider voll! Bitte versuch Dich sp\344ter noch mal einzuloggen!</div>"; + } + elsif ($var eq 'create_alias') { + print q[<div>Du hast sich soeben in die Datenbank eingetragen. Einfach auf "Los Geht's" klicken :-)</div>]; + } + else { + print qq[ <div>\n Herzlich willkommen!\n <br>\n Einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + print qq[ <hr>\n <form name="login" action="chat" method="GET">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="tmp" value="true">\n <table>\n <tr>\n <td>\n <div>\n Dein Alias:\n <br>\n <input name="alias" value="$alias">\n </div>\n </td>\n <td>\n <div>\n Dein Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n </td>\n </tr>\n </table>\n <br>\n <br>\n <div>\n Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken!\n </div>\n <br>\n <table>\n <tr>\n <td>\n <font color="ffffff">\n <input type="submit" value="Los geht's!">\n </font>\n </form>\n </td>\n <td>\n <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias_html">\n <font color="ffffff">\n <input type="submit" value="Registrieren">\n </font>\n </form>\n </td>\n </tr>\n </table>\n <hr>\n]; + if ($logtin > 0) { + print q[<div>Folgende Personen sind eingeloggt:<br><font size='1'>]; + foreach $_ (@users) { + print "$_ " if -f "data/online/users/$_"; + } + print '</font></div>'; + } + print " </td>\n </tr>\n </table>\n </center>\n</body>\n</html>\n"; + if (-d 'data/online/rooms') { + (); + } + else { + mkdir 'data/online/rooms', 511; + } +} +sub create_alias_html { + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq 'ip://' . $client->peerhost) { + $tmp = 'banned'; + &login_html; + $client->shutdown(2); + exit 0; + } + } + my $reload = $_[0]; + &start_html('Registration'); + print " <center>\n <table width=500>\n <tr>\n <td>\n"; + if ($reload eq 'alias_exists') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Der von Dir gew\344hlte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit\n einem anderen Benutzernamen !\n </div>\n <hr>\n]; + } + elsif ($reload eq 'pw_wrong') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Deine beiden Passworteingaben stimmen nicht \374berein. Bitte geb das Passwort erneuert an um sicherzugehen, da\337\n kein falsches Passwort abgespeichert wird !\n </div>\n <hr>\n"; + } + elsif ($reload eq 'alias_prohibited') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt illegale Zeichen. Bitte versuch einen anderen Benutzernamen!\n </div>\n <hr>\n]; + } + elsif ($reload eq 'alias_length') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!\n </div>\n <hr>\n]; + } + else { + print " <div>\n Hier kannst Du Dich registrieren. Bitte beachte, da\337 die Passworteingabefelder \374bereinstimmen!\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias">\n <div>\n Dein Alias:\n <font color="ffa500">\n (Mu\337 angegeben werden)\n </font>\n <br>\n <input name="alias" VALUE="$alias">\n </div>\n <br>\n <div>\n Dein gew\374nschtes Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n <br>\n <div>\n Geb hier Dein Passwort erneuert ein:\n <br>\n <input type="password" name="tmp">\n </div>\n <br>\n <font color=ffffff>\n <input type="submit" value="Registrieren">\n </font>\n <br>\n </form>\n <hr>\n <div>\n Um den Chat zu betreten m\374ssen die Daten nach der Registration auf der Startseite erneuert best\344tigt werden !\n </div>\n </td>\n </tr>\n </table>\n</center>\n</body>\n</html>\n]; +} +sub checklogin { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + closedir USERS; + my $users = $#users; + if ($users > $limit && 3 > &hierachie($alias)) { + $tmp = 'full'; + &login_html; + $client->shutdown(2); + exit 0; + } + my $lognotexists = 'true'; + opendir USERDIR, 'data/user/options'; + my(@userdir) = readdir USERDIR; + closedir USERDIR; + foreach $user (@userdir) { + if ($user eq $alias) { + open OPTIONS, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + foreach $_ (@options) { + chomp $_; + } + if ($options[0] eq $pw) { + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq $alias or $_ eq 'ip://' . $client->peerhost) { + if (-f "data/online/users/$admin") { + &post_prv($admin, "<font color=ffffff><font color=ffa500>$_</font> kann sich nicht einloggen (Ist verbannt)!!</font>"); + } + $tmp = 'banned'; + &login_html; + $client->shutdown(2); + exit 0; + } + } + if ($options[1] eq undef) { + $col = &random_color; + } + else { + $col = $options[1]; + } + if ($options[2] eq undef) { + $secol = &random_color; + } + else { + $secol = $options[2]; + } + if ($options[3] eq undef) { + $maxVerlauf = '10'; + } + else { + $maxVerlauf = $options[3]; + } + if ($options[4] eq undef) { + $verlaufOrder = '1'; + } + else { + $verlaufOrder = $options[4]; + } + &rm_if_loggedin($alias); + my(@digit) = (('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'), ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'), (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), '-', '.'); + my $num1 = rand @digit; + my $num2 = rand @digit; + my $num3 = rand @digit; + my $num4 = rand @digit; + my $num5 = rand @digit; + my $num6 = rand @digit; + my $num7 = rand @digit; + my $num8 = rand @digit; + my $num9 = rand @digit; + my $num10 = rand @digit; + $tmpid = $digit[$num1] . $digit[$num2] . $digit[$num3] . $digit[$num4] . $digit[$num5] . $digit[$num6] . $digit[$num7] . $digit[$num8] . $digit[$num9] . $digit[$num10]; + open TMPID, ">data/online/tmpid/$alias.$tmpid"; + print TMPID $alias; + close TMPID; + open IDENT, ">data/online/ident/$alias"; + print IDENT $client->peerhost . "\n$tmpid\n" . $client->peerhost . ':' . $client->peerport; + close IDENT; + open LASTLOGIN, ">data/user/lastlogin/$alias"; + print LASTLOGIN time; + close LASTLOGIN; + &frameset_html; + $client->shutdown(2); + exit 0; + } + else { + $lognotexists = 'false'; + } + } + } + &login_html; +} +sub create_alias { + if ($alias =~ /\W/ or $alias eq '') { + goto CREATE if $alias =~ /[-]/ and not $alias =~ /\W/; + &create_alias_html('alias_prohibited'); + $client->shutdown(2); + exit 0; + } + elsif ($pw ne $tmp) { + &create_alias_html('pw_wrong'); + $client->shutdown(2); + exit 0; + } + elsif (length $alias >= 15) { + &create_alias_html('alias_length'); + $client->shutdown(2); + exit 0; + } + CREATE: opendir USERDIR, 'data/user/options'; + my(@user) = readdir USERDIR; + close USERDIR; + foreach $user (@user) { + if ($user eq $alias) { + &create_alias_html('alias_exists'); + $client->shutdown(2); + exit 0; + } + } + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $pw . "\n"; + close OPTIONS; + &login_html; +} +sub frameset_html { + print qq[<html>\n <head>\n <title>\n $title\n </title>\n </head>\n<frameset border=0 frameborder=0 framespacing=0 cols="130,*">\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name="online" src="chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid">\n <frameset border=0 frameborder=0 framespacing=0 cols="70,*">\n <frame name="logo" src="chat?request=htdocs&var=logo_html" scrolling="no">\n <frame name="reload" src="chat?request=htdocs" scrolling="no">\n </frameset>\n </frameset>\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name='main' src='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder'>\n <frame name="input" src="chat?request=htdocs" scrolling="no">\n </frameset>\n</frameset>\n</html>\n]; +} +'???'; diff --git a/0.7.2/modules/statistic.pm b/0.7.2/modules/statistic.pm new file mode 100644 index 0000000..cb98c3a --- /dev/null +++ b/0.7.2/modules/statistic.pm @@ -0,0 +1,148 @@ +sub statistic { + &start_html('Statistiken'); + &menu; + print $q->div('yChat Statistiken'), $q->hr, $q->div($q->a({-'href', "chat?request=statistic&var=ranking&alias=$alias&tmpid=$tmpid"}, 'Rankings'), ' | ', $q->a({-'href', "chat?request=statistic&var=del&alias=$alias&tmpid=$tmpid"}, 'Loginstatistiken'), ' | ', $q->a({-'href', "chat?request=statistic&var=statistic&alias=$alias&tmpid=$tmpid"}, 'DB-Statistik'), ' | ', $q->a({-'href', "chat?request=statistic&var=var&alias=$alias&tmpid=$tmpid"}, 'Umgebungsvariablen')), $q->hr; + if ($var eq 'ranking') { + opendir COUNTS, 'data/user/counts'; + my(@counts) = readdir COUNTS; + closedir COUNTS; + print '<div>'; + my $nr_start = $start; + my $nr_end = $end; + my %online; + my $rank; + my $nr; + foreach $_ (@counts) { + if (-f "data/user/counts/$_") { + if (s/.online//g) { + open TOTAL, "<data/user/counts/$_.online"; + my $total = <TOTAL>; + close TOTAL; + $online{sprintf '%.2f', $total / 3600} = $_; + } + } + } + print '<div>', $q->b('Rankings:'), $q->br, '<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>'; + if (not $nr_start) { + $nr_start = 1; + } + if (not $nr_end) { + $nr_end = 20; + } + foreach $wert (reverse (sort { $a <=> $b } keys %online)) { + ++$nr; + if ($online{$wert} eq $alias) { + $rank = $nr; + last if $nr > $nr_end; + } + next if ($nr < $nr_start or $nr > $nr_end); + print q[<tr><td><font color='ffffff' size='1' face='arial'>] . $nr . q[</font></td><td><font color='ffffff' size='1' face='arial'> ] . $wert . "h </font></td><td> <a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n"; + } + print '</table>', $q->hr; + $nr_start -= 20; + $nr_end -= 20; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" if $nr_start > 0; + $nr_start += 40; + $nr_end += 40; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...", $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>"); + } + elsif ($var eq 'del') { + print '<div>', $q->b('Alte Benutzer löschen:'), $q->br, "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gel\366scht.", $q->br, $q->br; + opendir USER, 'data/user/options'; + my(@user) = readdir USER; + closedir USER; + @user = sort(@user); + my $i = 0; + my $j; + my $k = 0; + my $l = 0; + my $full = $tmp; + foreach $_ (@user) { + if (-f "data/user/lastlogin/$_") { + open LOGIN, "<data/user/lastlogin/$_"; + my $login = <LOGIN>; + close LOGIN; + $login = sprintf('%.2f', (time - $login) / 3600); + ++$j; + if (999 < $login and $login < 1440) { + ++$k; + print $q->font({-'color', 'ffa500'}, $q->b("$j($k) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 48) { + ++$l; + print $q->font({-'color', 'ffffef'}, $q->b("$j($l) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 1440) { + print "$j $_ Letztes Login vor: " . $login . 'h', $q->br, "\n" if $full ne undef; + } + else { + ++$k; + &kill_it($_, $i++, $login); + } + } + elsif (-f "data/user/options/$_") { + &kill_it($_, $i++); + } + } + print $q->hr if $full ne undef; + print '</div>', $q->div($q->b("$j Benutzer befinden sich in der Datenbank!", $q->br, $q->font({-'color', 'ffffef'}, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br, $q->font({-'color', 'ffa500'}, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br, $q->font({-'color', 'ff0000'}, "$i Benutzer wurden gerade eben gel\366scht!")), $q->br, $q->br, 'PS: Jeder registrierte Benutzername wird nur einmal gezählt!'); + print $q->br, $q->div('(', $q->a({-'href', "chat?request=statistic&var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, 'Vollständige Ansicht'), ')') if $full eq undef; + } + elsif ($var eq 'var') { + print '<div>', $q->b('Server Umgebungsvariablen:'), $q->br, $q->br, 'Die Serverumgebungsvariablen können nur von Oberwächtern oder höher eingesehen werden!', $q->br, $q->br; + if (5 <= &hierachie($alias)) { + while (($key, $value) = each %ENV) { + print "$key = $value\n", $q->br; + } + } + print '</div>'; + } + elsif ($var eq 'statistic') { + print $q->div($q->b('yChat-DB Statistik:')), $q->br; + $files = 0; + $size = 0; + $directorys = 1; + &zaehle('data'); + $size = sprintf('%.2f', $size / 1048576); + print $q->div("Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys"); + } + print $q->end_html; +} +sub zaehle { + local($dir, $data) = @_; + $dir = "$dir/$data" if $data ne undef; + opendir DATA, $dir; + local(@data) = readdir DATA; + closedir DATA; + $files2 = 0; + foreach $_ (@data) { + if (-f "$dir/$_") { + ++$files; + ++$files2; + $size += -s "$dir/$_"; + } + elsif (-d "$dir/$_" and $_ ne '.' and $_ ne '..') { + ++$directorys; + &zaehle($dir, $_); + } + } +} +sub kill_it { + my($rm, $nr, $login) = @_; + $login = 'XXXXXX' if $login eq undef; + print $q->font({-'color', 'ff0000'}, $q->b("$j($nr) $rm Letztes Login vor: " . $login . 'h (wurde gelöscht)')), $q->br, "\n"; + print q[<font size='1'>]; + print 'options ' if unlink "data/user/options/$rm"; + print 'profiles ' if unlink "data/user/profiles/$rm"; + print 'gbooks ' if unlink "data/user/gbooks/$rm"; + print 'counts ' if unlink "data/user/counts/$rm"; + print 'counts.online ' if unlink 'data/user/counts/' . $rm . '.online'; + print 'lastlogin ' if unlink "data/user/lastlogin/$rm"; + print 'memos' if unlink "data/user/memos/$rm"; + print '</font>', $q->hr, "\n"; + &zeit; + open DEL, '>>data/kill'; + print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n"; + close DEL; +} +1; diff --git a/0.7.2/modules/stream.pm b/0.7.2/modules/stream.pm new file mode 100644 index 0000000..af380bb --- /dev/null +++ b/0.7.2/modules/stream.pm @@ -0,0 +1,170 @@ +sub stream { + &secure_checkid($alias, $tmpid); + my $pid = $$; + $SIG{'CHLD'} = 'IGNORE'; + ++$|; + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + print "<font color='ffffff'>Der Raum <font color='ffa500'>$room</font> ist leider abgesperrt! Du wirst in den Ram <b>$standardroom</b> umgeleitet ...</font>"; + $room = $standardroom; + } + } + print qq[<html>\n <head>\n<script language="JavaScript">\n<!--\n open('chat?request=online&room=$room&alias=$alias&tmpid=$tmpid','online');\n open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// Scroll-Routine von Anklepper (http://www.anklepper.de)\n// speziell f\374r yChat (http://www.yChat.de), Copyright 2000\nscrolling = true;\nmoves_steps = 4;\nmoves_interval = 4;\nfunction moves()\n{\n if( scrolling != false )\n window.scrollBy( 0, moves_steps );\n window.setTimeout( "moves()", moves_interval );\n}\nmoves();\n//-->\n</script>\n</head>\n<body bgcolor="$chatbg">\n]; + unlink "data/online/rooms/$loginplace/$alias"; + &check_online; + print "<font size=1 color=ffffff face=arial>$title - Letzte Änderung $datum\n; Der Chat wird geladen...\n<br>"; + sleep 1; + print "<b>Hallo <font color=$col>$alias</font></b>, mit dem Befehl /menu kannst du das Chat-Menü aufrufen!<br>"; + sleep 1; + print "Du befindest dich im Raum <b>$room</b>: " . get_theme($room) . "<br>\n"; + print "</font>\n"; + if (-f "data/user/memos/$alias") { + open MEMOS, "<data/user/memos/$alias"; + my(@memos) = <MEMOS>; + close MEMOS; + my $memos; + foreach $_ (@memos) { + $memos .= $_; + } + print $memos; + unlink "data/user/memos/$alias"; + } + OPENMSGFILE: my $change_room = 0; + my $startime = time; + my $flooding = 0; + my @ignore; + my @flood; + unless (-f "data/online/rstat/$room") { + open DATEI, ">data/online/rstat/$room"; + print DATEI "0\n\n$alias<;1\n"; + close DATEI; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + if (-e "data/msgs/$room") { + open MSGFILE, "<data/msgs/$room"; + mkdir 'data/online/pids', 511 unless -d 'data/online/pids'; + mkdir "data/online/pids/$room", 511 unless -d "data/online/pids/$room"; + open PID, ">data/online/pids/$room/$pid"; + print PID time; + close PID; + } + else { + sleep 1; + goto OPENMSGFILE; + } + &sendmsgs; + while (-f "data/online/users/$alias") { + local $SIG{'USR1'} = \&sendmsgs; + goto OPENMSGFILE if $change_room == 1; + sleep 15; + print "\n"; + } + sub sendmsgs { + for ($curpos = tell MSGFILE; defined($_ = <MSGFILE>); $curpos = tell MSGFILE) { + my($address, $stamp, $command, $action, $message, $from) = split(/<;/, $_, 7); + if ($address =~ /$\!/ or $address eq $alias) { + if ($stamp > $startime) { + if ($command eq 'col') { + ($col, $secol) = split(/;/, $action, 3); + } + elsif ($command eq 'cr') { + unlink "data/online/pids/$room/$pid"; + $room = $action; + close MSGFILE; + $change_room = 1; + } + elsif ($command eq 'ig') { + my @temp; + my $add2list = 1; + foreach $_ (@ignore) { + if ($action ne $_) { + push @temp, $_; + } + else { + $add2list = 0; + } + } + if ($add2list == 1) { + push @ignore, $action; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias ignoriert!</font>"); + } + else { + @ignore = @temp; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun nicht mehr ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias nicht mehr ignoriert!</font>"); + } + } + elsif ($command eq 'igl') { + my $ignored; + foreach $_ (@ignore) { + $ignored .= "$_ "; + } + if ($#ignore == -1) { + print "<font color='#ffffff'>Momentan wird keine Person von dir ignoriert!</font><br>\n"; + } + else { + print "<font color='#ffffff'>Folgende Personen werden von dir ignoriert: <font color='#ffa500'>$ignored</font>!</font><br>\n"; + } + } + elsif ($command eq 'quit') { + print "<script language='JavaScript'>\n"; + print "open('chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid','online');\n"; + print "open('chat?request=htdocs','input');\n"; + print "open('chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');\n"; + print "</script>\n"; + last; + } + elsif ($change_room != 1) { + my $ignored = 0; + foreach $_ (@ignore) { + if ($_ eq $from) { + $ignored = 1; + last; + } + } + if ($ignored != 1) { + print "$message\n"; + } + else { + $address =~ s/!//; + &post_prv_extra($from, "<font color='#ff0000'>Du wirst von $alias ignoriert!</font>") if $address eq $alias; + } + } + push @flood, $address . $command . $action . $message . $from; + if ($flood[0] eq $flood[1] and $flood[0] eq $flood[2] and $flood[0] eq $flood[3]) { + print "<i><font color=red>$from flutet den Chat !</font></i><br>\n"; + if ($from eq $alias and $flooding++ and $flooding >= 4) { + print "<script language='JavaScript'>open('chat?request=start&tmp=autokick','_top');</script>\n"; + &rm_alias($alias, $room); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='ffa500'><b>Das System</b></font> katapultiert <b>$alias</b> wegen Fluten des Chats nach draussen ... </font></i>", $alias); + } + } + else { + $flooding = 0; + } + shift @flood if $#flood > 2; + } + } + } + seek MSGFILE, $curpos, 0; + } + unlink "data/online/pids/$room/$pid"; +} +sub post_prv_extra { + my($alias, $message) = @_; + my $helpid = fork; + if ($helpid == 0) { + &post_prv($alias, $message); + exit 0; + } +} +1; diff --git a/0.7.2/setup.sh b/0.7.2/setup.sh new file mode 100644 index 0000000..342e9c7 --- /dev/null +++ b/0.7.2/setup.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +mke2fs /dev/ram0 +mke2fs /dev/ram1 + +mkdir data +cd data +mkdir {logs,msgs,user,online} +mount /dev/ram0 msgs +mount /dev/ram1 online +cd user +mkdir {counts,memos,options,profiles,gbooks,lastlogin} +cd ../online +mkdir {rstat,rooms,pids,users,ident,tmpid} +cd .. +cdhmod 777 * -R +chown paul * -R + diff --git a/0.7.2/templates/chatiq.sno b/0.7.2/templates/chatiq.sno new file mode 100644 index 0000000..2a024f5 --- /dev/null +++ b/0.7.2/templates/chatiq.sno @@ -0,0 +1 @@ +<div><h2>Chatiquette</h2></div><hr><div>Hier einige Grundlagen ...</div><style type="text/css"> li { color: #ffffff }</style><ul><li><div>Vergiss nie, dass am anderen Ende auch nur Menschen sitzen. Diese mögen es gar nicht, angepöbelt, beleidigt oder in sonstiger Weise angegriffen zu werden.</div></li><li><div>Störend ist auch immer, wenn ein privater Streit im Chat ausgetragen wird. Tragt eure privaten Sachen ausserhalb des Chats aus.<br>Selbst wenn es nur Spass ist - weiss der Rest im Chat das?</div></li><li><div>Dauergeschrei fällt auch immer wieder störend auf. Was in Grossbuchstaben geschrieben wird, wird als Schreien bezeichnet.</div></li><li><div>Unsere ganz besonderen Spezialisten wollen auch immer wieder rausfliegen. Um das zu erreichen, senden sie die ganze Zeit Unsinn.</div></li><li><div>Diskussionen sind dagegen kein Problem. Dafür ist ein Chat ja da. Sobald allerdings das Thema der Diskussion zu sehr entgleist, sollte die Diskussion in einen etwas weniger öffentlichen Raum verlegt werden.</div></li></ul><div>Daraus ergeben sich folgende Regeln:</div><ul><li><div>keinen beleidigenden Wortschatz verwenden</div></li><li><div>obzöner und verfassungsfeindlicher Wortschatz fällt auch weg</div></li><li><div>streitet euch woanders oder in einem privaten Raum</div></li><li><div>schreit nich so viel</div></li><li><div>schreibt keinen Unsinn, der so aussieht, als ob eure Katze über die Tastatur gelaufen ist</div></li><li><div>schreibt nicht zu schnell hintereinander, besonders nicht dasselbe</div></li><li><div>verlagert die Diskussion, wenn sich jemand gestört fühlt</div></li><li><div>Diese Liste ist nicht vollständig. Mit dem gesunden Menschenverstand sollte es eigentlich möglich sein, sich die nicht aufgeführten Punkte zu denken.</div></li></ul><div>So - nach den ganzen "lass-es-bessers" noch ein paar Überlebenstips:</div><ul><li><div>beachte die oben stehenden Punkte ;-)</div></li><li><div>es macht sich immer gut, beim Reinkommen mal zu grüssen</div></li><li><div>warte nicht, bis man/frau dich anspricht - werde selbst aktiv und gib deinen Senf dazu</div></li><li><div>es gibt meist kein allgemein anerkanntes Gesprächsthema - lies dich einfach rein</div></li><li><div>die frage "wer will chatten" ist eigentlich überflüssig in einem Chat (wir warten doch alle nur aufs Ufo ;-)</div></li><li><div>fang nich sofort mit den W-Fragen (woher, wie alt, weiblich oder männlich?) an - es stört einige Leute</div></li></ul><div>Problematisch für die Wächter und Oberwächter ist:</div><ul><li><div>"der nervt mich - schmeiss den mal raus" ist oft nicht nachvollziehbar, weil der WÄ oder OW die Vorgeschichte - die vielleicht ausserhalb des yChat stattgefunden hat - nicht kennt oder keinen Beweis dafür hat.</div></li></ul><hr><div><h2>Richtlinien für den gestressten WÄ und OW:</h2></div><ul><li><div>Du hast die Macht - aber mißbrauche sie nicht!</div></li><li><div>Leute, die ganz offensichtlich stören wollen und dabei den Chatbetrieb massiv behindern, sofort rausschmeissen! Kriterien dazu:</div><ul><li><div>Fluten des Chats</div></li><li><div>Wiederholung von Parolen</div></li><li><div>Exzessive Nutzung von zufälligen Buchstaben-/Zeichenfolgen</div></li><li><div>usw...</div></li></ul></li><li><div>Bei den anderen vorher noch eine Warnung aussprechen...</div></li><li><div>Nicht vergessen: auch für euch gelten die oben aufgeführten Regeln!</div></li><li><div>Vergabe von Raumbesetzer- und Wächterrechten:<br>(dies gilt für RB-Vergabe in der Cyberbar, WÄ allgemein)</div><ul><li><div>Um RB oder WÄ betteln wird schon mal gar nicht beachtet.</div></li><li><div>Wer WÄ wird, soll sichs verdienen - z.B. durch häufiges Helfen bei Neulingen.</div></li><li><div>Ein WÄ sollte schon öfter im Chat sein.</div></li><li><div>Oberwächter zu werden ist sehr schwierig. Frag gar nicht erst danach ;-)</div></li></ul></ul><div>Wer meint, von einem Wächter oder Oberwächter ungerecht behandelt worden zu sein (z.B. weil dieser wegen persönlichen Streitigkeiten rausschmeisst), richte seine Klage an einen Oberwächter oder direkt an den obersten Boss: Snooper (<a href="mailto:admin@ychat.de">admin@ychat.de</a>).</div>
\ No newline at end of file diff --git a/0.7.2/templates/colors.sno b/0.7.2/templates/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.7.2/templates/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.7.2/templates/help.sno b/0.7.2/templates/help.sno new file mode 100644 index 0000000..2239eac --- /dev/null +++ b/0.7.2/templates/help.sno @@ -0,0 +1,75 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table border=1> +<tr><th><div>SU</div></th><th><div>Befehl</div></th><th><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. Wird gar keine Farbe angegeben, dann wird eine zufällige generiert!</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>/exit</div></td><td><div>Komplett aus dem System ausloggen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/hits</div></td><td><div>Zeigt an vor wieviel Stunden der Chat-Server neugestartet wurde und die Hits und Hits per Minute seit dieser Zeit</div></td></tr> +<tr><td><div>NC</div></td><td><div>/ig <font color=red>Alias</font></div></td><td><div>Setzt/entfernt <font color=red>Alias</font> auf/aus die/der Ignorierliste. Wird das Argument weggelassen, so wird die Liste aller ignorierten Personen angezeigt</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>Chat 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>/selfkill</div></td><td><div>Sich selbst ganz und gar aus dem System entfernen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/sep <font color=red>Raumname</font></div></td><td><div>In den Raum <font color=red>Raumnamen</font> wechseln und gleichzeitig absperren</div></td></tr> +<tr><td><div>NC</div></td><td><div>/uptime</div></td><td><div>Siehe Befehl "/hits"</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>/banip <font color=red>Alias</font></div></td><td><div>Die IP-Nummer von <font color=red>Alias</font> verbannen</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/rbanip ip://<font color=red>x.x.x.x</font></div></td><td><div>Die IP-Nummer <font color=red>x.x.x.x</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>/img</div></td><td><div>Versteckt/reaktiviert das eigene Superuser-Logo im Online-Frame</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>/o <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird aus dem Chat ausgeloggt!</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/sl <font color=red>Raum</font></div></td><td><div>Einen anderen <font color=ffa500>Raum</font> absperren</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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=ffa500>Raum</font> ein <font color=ffa500>Thema</font > geben</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> +<tr><td><div><font color=red>AD</font></div></td><td><div>/cool <font color=red>Nachricht</font></div></td><td><div>Gibt für den aktuellen Raum eine Systemmeldung aus</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/id <font color=red>Alias</font></div></td><td><div>Zeigt TempID von <font color=red>Alias</font> an</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/ow <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Oberwächter ernennen</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/row <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom Oberwächter zum normalen Chatter degradieren</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/pw <font color=red>Alias</font></div></td><td><div>Zeigt das Passwort von <font color=red>Alias</font> an</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 ausgeführt 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 ledeglich 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><br> + Nur Oberwächer können Logdateien der Cyberbar lesen!<br><br> + Oberwächter ernennt nur der Systemadministrator! Dieser wiederum hat weitere spezielle Befehle die geheim sind und die nur ihm + vorbehalten sind und ihm das Administrieren erleichtert. +</div> +</body> +</html> diff --git a/0.7.2/ychatd.pl b/0.7.2/ychatd.pl new file mode 100644 index 0000000..31880b4 --- /dev/null +++ b/0.7.2/ychatd.pl @@ -0,0 +1,59 @@ +#!/usr/bin/perl +use CGI; +$q = new CGI; +use config; +use modules::commands; +use modules::changeroom; +use modules::divcom; +use modules::hierachie; +use modules::htdocs; +use modules::input; +use modules::loggedin; +use modules::online; +use modules::postmessage; +use modules::shared; +use modules::start; +use modules::statistic; +use modules::stream; +use IO::Socket; +$SIG{'CHLD'} = 'IGNORE'; +$mainsocket = 'IO::Socket::INET'->new('LocalHost', "$localhost", 'LocalPort', $localport, 'Porto', 'tcp', 'Listen', $limit + 10, 'Reuse', 1); +die "Kann Server-Socket nicht erzeugen: $!\n" unless $mainsocket; +print "yChat wurde auf $localhost:$localport gestartet...\n"; +$STARTIME = time; +while ($client = $mainsocket->accept) { + ++$HITS; + $pid = fork; + if ($pid == 0) { + print $client "HTTP/1.1 200 OK\nContent-type:text/html\n\n"; + while (defined($buffer = <$client>)) { + my $requeststring; + my(@tmp) = split(/\s+/, $buffer, 0); + if ($tmp[0] eq 'GET') { + $requeststring = $tmp[1]; + } + @tmp = split(/\?/, $requeststring, 0); + @tmp = split(/&/, $tmp[1], 0); + my %variables; + foreach $_ (@tmp) { + my(@tmp) = split(/=/, $_, 0); + next if $tmp[0] eq 'admin' or $tmp[0] eq 'mogeladmin'; + $tmp[0] =~ s[/][]; + $variables{$tmp[0]} = &url_decode($tmp[1]); + } + foreach $_ (keys %variables) { + eval "\$$_ = '" . $variables{$_} . q[']; + } + *STDOUT = $client; + if ($request) { + &secure_checkid($alias, $tmpid) if $request != 'start'; + eval "&$request"; + } + else { + &start; + } + $client->shutdown(2); + exit 0; + } + } +} diff --git a/0.7.6/config.pm b/0.7.6/config.pm new file mode 100644 index 0000000..ac19aff --- /dev/null +++ b/0.7.6/config.pm @@ -0,0 +1,42 @@ +# yChat - Copyright by Paul C. Bütow +########################### Dieser Teil bestimmt die Standart-Variabeln. +##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.) +########################### +$limit = 50; # Benutzerlimit +$datum = "03.01.02"; # Datum der letzten Änderung (ändern erwünscht) +$version = "0.7.6"; # Bitte Hauptversionsnummer nicht ändern +$title = "yChat [$version]"; # Erscheint in der Browser-Leiste oben +$standardroom = "Bar"; # Standardchatraum +$loginplace = "Lounge"; # Bezeichnung der Startseite nach dem Login +$localhost = "snooper.dyndns.org";# Host oder IP# des Chat-Servers +$localport = 2000; # Port über den fer Chat-Server läuft +$gfxpath = "http://$localhost/yChat"; # URL der Binärdaten (Grafiken etc.) +$bgcolor = "#3E535B"; # Hintergrundfarbe der HTML-Seiten +$chatbg = "#000000"; # Hintergrundfarbe des Chat-Frames + +# PS: Um einen Chat-Administrator anzulegen, dann die Datei data/hierachie +# anlegen, in eine Zeile muß folgendes eingetragen werden: "Nickname<;7" +# (Natürlich ohne Anführungsstriche) Nickname ist somit Chat-Administrator +# und kann Oberwächter und Wächter bestimmen! + +sub style { +print <<ENDCSS; +<style type="text/css"> + body { background-color: $bgcolor } + body.blank { background-color: $chatbg } + body.online { background-color: $chatbg } + div { font-family: arial, geneva, verdana, helvetiva; font-size: 12px; color: #ffffff } + div.b { font-weight: bold; color: #ffa500 } + a { color: #ffffef; } + a:hover { color: #ffffff; } + p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; } +</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; background-color: #ffffff; 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 +} +1; diff --git a/0.7.6/gfx/adm-i.gif b/0.7.6/gfx/adm-i.gif Binary files differnew file mode 100644 index 0000000..3f45598 --- /dev/null +++ b/0.7.6/gfx/adm-i.gif diff --git a/0.7.6/gfx/adm.gif b/0.7.6/gfx/adm.gif Binary files differnew file mode 100644 index 0000000..d7b68d9 --- /dev/null +++ b/0.7.6/gfx/adm.gif diff --git a/0.7.6/gfx/away.gif b/0.7.6/gfx/away.gif Binary files differnew file mode 100644 index 0000000..c001883 --- /dev/null +++ b/0.7.6/gfx/away.gif diff --git a/0.7.6/gfx/ow-i.gif b/0.7.6/gfx/ow-i.gif Binary files differnew file mode 100644 index 0000000..71584dd --- /dev/null +++ b/0.7.6/gfx/ow-i.gif diff --git a/0.7.6/gfx/ow.gif b/0.7.6/gfx/ow.gif Binary files differnew file mode 100644 index 0000000..b30e8f9 --- /dev/null +++ b/0.7.6/gfx/ow.gif diff --git a/0.7.6/gfx/rb.gif b/0.7.6/gfx/rb.gif Binary files differnew file mode 100644 index 0000000..321341c --- /dev/null +++ b/0.7.6/gfx/rb.gif diff --git a/0.7.6/gfx/twa.gif b/0.7.6/gfx/twa.gif Binary files differnew file mode 100644 index 0000000..b80cea4 --- /dev/null +++ b/0.7.6/gfx/twa.gif diff --git a/0.7.6/gfx/unten.gif b/0.7.6/gfx/unten.gif Binary files differnew file mode 100644 index 0000000..285fb53 --- /dev/null +++ b/0.7.6/gfx/unten.gif diff --git a/0.7.6/gfx/uvl.gif b/0.7.6/gfx/uvl.gif Binary files differnew file mode 100644 index 0000000..b9208d6 --- /dev/null +++ b/0.7.6/gfx/uvl.gif diff --git a/0.7.6/gfx/wa-i.gif b/0.7.6/gfx/wa-i.gif Binary files differnew file mode 100644 index 0000000..9e9a113 --- /dev/null +++ b/0.7.6/gfx/wa-i.gif diff --git a/0.7.6/gfx/wa.gif b/0.7.6/gfx/wa.gif Binary files differnew file mode 100644 index 0000000..553984c --- /dev/null +++ b/0.7.6/gfx/wa.gif diff --git a/0.7.6/gfx/yIntro.swf b/0.7.6/gfx/yIntro.swf Binary files differnew file mode 100644 index 0000000..81d9015 --- /dev/null +++ b/0.7.6/gfx/yIntro.swf diff --git a/0.7.6/gfx/ySymbol.swf b/0.7.6/gfx/ySymbol.swf Binary files differnew file mode 100644 index 0000000..2b899bb --- /dev/null +++ b/0.7.6/gfx/ySymbol.swf diff --git a/0.7.6/modules/changeroom.pm b/0.7.6/modules/changeroom.pm new file mode 100644 index 0000000..4a5e787 --- /dev/null +++ b/0.7.6/modules/changeroom.pm @@ -0,0 +1,67 @@ +sub change_room { + my($method, $newroom, $oldroom, $alias2) = @_; + if ($newroom eq $oldroom) { + &post_prv($alias, "<font color='ffffff'>Du befindest dich bereits im Raum <font color='ffa500'>$newroom</font>!</font>"); + &reload_html; + } + elsif ($newroom eq $loginplace) { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verlässt den Chat und geht in die <b>$loginplace</b> ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &check_online; + &reload_html; + } + open RSTAT, "<data/online/rstat/$newroom"; + my(@rstat) = <RSTAT>; + close RSTAT; + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$newroom</font> ist leider abgesperrt!</font>"); + &reload_html; + } + } + &private_javascript($alias, $room, "parent.input.document.inf.room.value = '$newroom';open('chat?request=online&room=$newroom&alias=$alias&tmpid=$tmpid','online');"); + open MSGFILE, ">>data/msgs/$newroom"; + print MSGFILE "$alias<;" . time . "<;!<;!<;<;\n"; + close MSGFILE; + open MSGFILE, ">>data/msgs/$room"; + if ($method eq 'j') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'ju') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du folgst <font color='".&get_ident($alias2,3)."'>$alias2</font> aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'sep') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrst ab...</font></i><br><;\n"; + } + close MSGFILE; + &post_strmsg($alias, $room, 'cr', $newroom); + $room = $oldroom; + my $tmpstamp = time; + if ($method eq 'j') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'ju') { + my $col2 = &get_ident($alias2,3); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> folgt <font color='$col2'>$alias2</font> in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> und folgt <font color='$col2'>$alias2</font> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'sep') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> und sperrt ab...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrt ab...</font></i>", $alias); + } + elsif ($method eq 'beam') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> in den Raum <b>$newroom</b>...</font></i>", $alias2); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> aus dem Raum <b>$oldroom</b> herein nach <b>$room</b>...</font></i>", $alias2); + } + unlink "data/online/rooms/$oldroom/$alias"; + &rm_rstat($alias, $oldroom); + &check_online; +} +1; diff --git a/0.7.6/modules/commands.pm b/0.7.6/modules/commands.pm new file mode 100644 index 0000000..349524c --- /dev/null +++ b/0.7.6/modules/commands.pm @@ -0,0 +1,870 @@ +sub command { + $_[0] = $_[0] . ' '; + $_[0] = substr($_[0], 1, length($_[0]) - 1); + my(@cmd) = split(/ /, $_[0], 0); + my $cmd = substr($_[0], 0, index($_[0], ' ')); + my $tmp = $_[1]; + sub lock { + my $method = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $lock = "0\n"; + if ($room eq $standardroom) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ohne Erfolg ab ...</font></i>", $alias); + } + else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ab ...</font></i>", $alias) if $method ne 'separee'; + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum auf ...</font></i>", $alias) if $method ne 'separee'; + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $lock; + close RSTAT; + } + &reload_html; + } + if ($cmd eq 'about') { + &post_prv($alias, "<font color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. B\374tow (2000 - 2002).</font>"); + &reload_html; + } + elsif ($cmd eq 'away') { + for ($i = 1; $i <= $#cmd; ++$i) { + $away_msg = $away_msg . ' ' . $cmd[$i]; + } + my $room = &get_room($alias); + if ($tmp eq 'autoaway') { + $away_msg = "$alias wurde vom System agbemeldet ..."; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> meldet <font color='".&get_ident($alias,3)."'>$alias</font> wegen Inaktivität ab ...</i></font>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> meldet sich ab (<font color='$col'>$away_msg</font> ) ...</i></font>", $alias); + } + open AWAY, ">>data/online/rstat/$room.away"; + print AWAY "$alias<;$away_msg\n"; + close AWAY; + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'away'; parent.online.location.reload();]); + &reload_html; + } + elsif ($cmd eq 'clear') { + &post_prv($alias, "<script language='JavaScript'>window.open('chat?request=stream&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');</script>"); + &reload_html; + } + elsif ($cmd eq 'col') { + my $col, $secol; + if ($cmd[1] ne undef) { + $col = $cmd[1]; + &prove_color($alias, $col); + my $tmpsecol = $cmd[2]; + my $length = length $tmpsecol; + if ($tmpsecol eq '' or $length < 6 or $length > 6) { + $secol = $col; + } + else { + $secol = $tmpsecol; + } + } + else { + $col = &random_color; + $secol = &random_color; + } + open OPTIONS, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $options[0] . $col . "\n" . $secol; + close OPTIONS; + open IDENT, "<data/online/ident/$alias"; + my(@ident) = <IDENT>; + close IDENT; + open IDENT, ">data/online/ident/$alias"; + print IDENT $ident[0] . $ident[1] . $ident[2] . "$col\n$secol"; + close IDENT; + &post($room, '<i><font color=ffffff>' . ×tring . "</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt...</font></i>", $alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &reload_html; + } + elsif ($cmd eq 'date') { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + &post_prv($alias, "<font color=ffffff>Heute ist der $days.$months. Jahr $years. Es ist genau $hours:$mins Uhr und $secs Sekunden.</font>"); + &reload_html; + } + elsif ($cmd eq 'exit') { + my $room = &get_room($alias); + if ($tmp eq 'autologout') { + &private_javascript($alias, $room, q[open('chat?request=start&tmp=autologout','_top');]); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> loggt <font color='".&get_ident($alias,3)."'>$alias</font> wegen Inaktivität aus ... </font></i>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt sich ganz aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=quit','_top');]); + } + &rm_alias($alias, $room); + &rm_away($alias, $room); + &reload_html; + } + elsif ($cmd eq 'getcol') { + my $cols2show = $cmd[1]; + if (-f "data/user/options/$cols2show") { + open FILE, "<data/user/options/$cols2show"; + my(@file) = <FILE>; + close FILE; + chomp $file[1]; + chomp $file[2]; + &post_prv($alias, "<font color='ffa500'>$cols2show <font color='ffffff'> verwendet als 1. Farbe <font color='$file[1]'>$file[1]</font> und als 2. Farbe <font color='$file[2]'>$file[2]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$cols2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'hits' or $cmd eq 'uptime') { + &post_prv($alias, "<font color=ffffff>Uptime: $startime " . &calculate_uptime_hours($STARTIME) . "h; $HITS Hits; " . &calculate_hpm($HITS, $STARTIME) . ' Hits pro Minute</font>'); + &reload_html; + } + elsif ($cmd eq 'ig') { + my $alias2ignore = $cmd[1]; + if ($alias2ignore) { + if (-f "data/user/options/$alias2ignore") { + if (3 <= &hierachie($alias2ignore)) { + &post_prv($alias, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'> kann nicht ignoriert werden!</font>"); + } + else { + &post_strmsg($alias, $room, 'ig', $alias2ignore); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'>existiert nicht in der Datenbank!</font>"); + } + } + else { + &post_strmsg($alias, $room, 'igl'); + } + &reload_html; + } + elsif ($cmd eq 'j' or $cmd eq 'sep') { + if ($cmd[1] =~ /\W/ or $cmd[1] eq '') { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> enth\344lt illegale Zeichen!</font>"); + &reload_html; + } + else { + if ($cmd eq 'j') { + &change_room('j', $cmd[1], $room); + &reload_html; + } + else { + if ($cmd[1] eq $standardroom) { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> ist ein Standardraum und kann nicht als Separee eröffnet werden!</font>"); + } + else { + &change_room('sep', $cmd[1], $room); + &lock('separee'); + } + &reload_html; + } + } + } + elsif ($cmd eq 'me' or $cmd eq 'm') { + my $me_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $me_msg = $me_msg . ' ' . $cmd[$i]; + } + $me_msg =~ s[/me/][<i>$alias</i>]g; + $me_msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if ($cmd eq 'm') { + &post($room, "<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>", $alias); + } + else { + &post($room, "<b><font color=$col><i>$alias</i> $me_msg</font></b>", $alias); + } + &reload_html; + } + elsif ($cmd eq 'memo') { + my $alias2memo = $cmd[1]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if (-f "data/user/options/$alias2memo") { + my $memo_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $memo_msg = $memo_msg . ' ' . $cmd[$i]; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>"); + open MEMO, ">>data/user/memos/$alias2memo"; + print MEMO "<font color=ffffff>($days.$months.$years - $hours:$mins:$secs) <font color=$col>$alias</font> hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>\n"; + close MEMO; + &reload_html; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'menu') { + &private_javascript($alias, $room, "window.open('chat?request=htdocs&alias=$alias&var=menu_html&room=$standardroom&col=$col&secol=$secol&tmpid=$tmpid','_new','width=500,height=500,screenX=100,screenY=100,scrollbars');"); + &reload_html; + } + elsif ($cmd eq 'online') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + open ONLINE, "<data/user/counts/$alias2prove.online"; + my $online = <ONLINE>; + close ONLINE; + my $totaltime = sprintf('%.2f', $online / 3600); + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>"); + } + else { + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'q') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verlässt den Chat ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &rm_away($alias, $room); + &check_online; + &reload_html; + } + elsif ($cmd eq 'rmgb') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das eigene G\344stebuch ...</font></i>", $alias); + unlink "data/user/gbooks/$alias"; + &reload_html; + } + elsif ($cmd eq 's') { + my $msg2scream; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2scream = $msg2scream . ' ' . $cmd[$i]; + } + $msg2scream =~ s/\344/\304/g; + $msg2scream =~ s/\366/\326/g; + $msg2scream =~ s/\374/\334/g; + $msg2scream = "\U$msg2scream\E"; + &post($room, "<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'seen') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + if (-f "data/user/lastlogin/$alias2prove") { + open LASTLOGIN, "<data/user/lastlogin/$alias2prove"; + my $lastlogin = <LASTLOGIN>; + close LASTLOGIN; + my $timestamp = sprintf('%.2f', (time - $lastlogin) / 3600); + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>"); + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich seit der Einf\374hrung dieses Befehls noch nie eingeloggt!</font></font>"); + } + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'selfkill') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> entfernt sich ganz und gar aus dem System und loggt sich aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=selfkill','_top');]); + &kill_alias($alias); + &reload_html; + } + elsif ($cmd eq 'w') { + my $theme = &get_theme($room); + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my($is, $nr) = ('t', 0); + my $persons; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-f "data/online/rooms/$room/$_") { + $persons = $persons . ' ' . "<font color='".&get_ident($_,3)."'>$_</font>"; + ++$nr; + } + } + &post_prv($alias, "<font color=ffffff>Der aktuelle <b>Raum:</b> $room $theme $door ($nr): $persons</font>"); + &reload_html; + } + elsif ($cmd eq 'wc' or $cmd eq 'wc/') { + my $raum = $cmd[1]; + my $persons; + if ($raum eq '' and $cmd eq 'wc') { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + close USERS; + foreach $_ (@users) { + $persons = $persons . ' ' . "<font color='".&get_ident($_,3)."'>$_</font>" if -f "data/online/users/$_"; + } + my $nr = $#users - 1; + my($nrs, $is) = ('', 'ist'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'sind'; + } + &post_prv("$alias", "<font color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: $persons</font>"); + } + elsif ($raum eq '' and $cmd eq 'wc/') { + my $msg2post; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + opendir DIR, "data/online/rooms/$_"; + my(@dir2) = readdir DIR; + closedir DIR; + open RSTAT, "<data/online/rstat/$_"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my $nr = $#dir2 - 1; + $msg2post = $msg2post . "<tr><td><b><font size=2 color='ffffff'>$_ $door ($nr) [" . $rstat[1] . q(]: </font></b></td></tr><tr><td><font size=2 color='ffa500'>); + foreach $chatter (@dir2) { + $msg2post = $msg2post . "<font color='".&get_ident($chatter,3)."'>$chatter</font> " if -f "data/online/rooms/$_/$chatter"; + } + print '</font></td>'; + } + } + &post_prv($alias, "<font color=ffffff>Folgende Räume sind offen:</font><table>$msg2post</table>"); + } + elsif ($raum ne '') { + my $persons; + opendir DIR, "data/online/rooms/$raum"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + $persons = $persons . ' ' . "<font color='".&get_ident($chatter,3)."'>$_</font>" if -f "data/online/rooms/$raum/$_"; + } + my($nr, $is) = ($#dir - 1, 't'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'n'; + } + &post_prv($alias, "<font color=ffffff> $nr Person$nrs befinde$is sich im Raum <b>$raum</b> $persons</font>"); + } + &reload_html; + } + elsif ($cmd eq 'wj' or $cmd eq 'ju') { + my $alias2search = $cmd[1]; + my $roomofalias = &get_room($alias2search); + if ($roomofalias) { + if ($cmd eq 'wj') { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff>befindet sich im Raum <b>$roomofalias</b> !</font></font>"); + } + else { + &change_room('ju', $roomofalias, $room, $alias2search); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff> ist nicht eingeloggt!</font></font>"); + } + &reload_html; + } + elsif (1 <= &hierachie($alias, $room)) { + if ($cmd eq 'l') { + &lock; + } + elsif ($cmd eq 'su') { + my $alias2su = $cmd[1]; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2su) { + open DATEI, "<data/online/rstat/$room"; + my(@rstat) = <DATEI>; + close DATEI; + if (1 <= hierachie($alias2su, $room)) { + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color='ffffff'> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, W\304 oder OW)</font>"); + &reload_html; + } + open RSTAT, ">>data/online/rstat/$room"; + print RSTAT "$alias2su<;1\n"; + close RSTAT; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verleiht <font color='".&get_ident($alias2su,3)."'>$alias2su</font> Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &reload_html; + } + } + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + &reload_html; + } + elsif ($cmd eq 'rsu') { + my $alias2rsu = $cmd[1]; + if (1 == hierachie($alias2rsu, $room)) { + &rm_rstat($alias2rsu, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entzieht <font color='".&get_ident($alias2rsu,3)."'>$alias2rsu</font> die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rsu <font color='ffffff'>ist gar kein Raumbesetzer!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 't') { + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $theme; + if ($cmd[1] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, q[<i><font color='ffffff'>] . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums ...</font></i>", $alias); + } + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i] . "\n"; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $theme; + close RSTAT; + &reload_html; + } + elsif (3 <= &hierachie($alias, $room)) { + if ($cmd eq 'ban' or $cmd eq 'banip') { + my $alias2ban = $cmd[1]; + my $hierachie = &hierachie($alias2ban); + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + if ($cmd[1] eq undef) { + my $nr = @ban; + my $banned; + foreach $_ (@ban) { + chomp $_; + $banned .= " $_"; + } + &post_prv($alias, "<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color='ff0000'>$banned</font></font>"); + &reload_html; + } + elsif (-f "data/user/options/$alias2ban") { + if (3 <= $hierachie) { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color='ffffff'>kann nicht verbannt werden!</font></font>"); + &reload_html; + } + if ($cmd eq 'ban') { + if (&add_entry($alias2ban, 'ban') == 1) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verbannt <b>$alias2ban</b> aus dem Chat ...</font></i>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>"); + } + } + elsif ($cmd eq 'banip') { + open DATEI, "<data/online/ident/$alias2ban"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + if (add_entry("ip://$ipnr", 'ban') == 1) { + &post_prv($alias, "<font color='ffffff'>IP-Nummer von <font color='ffa500'>$alias2ban</font> (<font color='ff0000'>$ipnr</font>) wurde verbannt!</font></i>"); + } + else { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$ipnr</font> von <font color='ffa500'>$alias2ban</font> ist bereits verbannt!</font></font>"); + } + &reload_html; + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff> kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'rban' or $cmd eq 'rbanip') { + my $alias2rban = $cmd[1]; + open BAN, '<data/ban'; + @ban = <BAN>; + close BAN; + foreach $ban (@ban) { + if (&rm_entry($alias2rban, 'ban') == 1) { + if ($alias2rban =~ /ip:/) { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$alias2rban</font> wurde aus der Banliste ausgetragen!</font></font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entbannt <font color='".&get_ident($alias2rban,3)."'>$alias2rban</font> ...</font></i>", $alias); + } + &reload_html; + } + } + &post_prv($alias, "<font color='ff0000'>$alias2rban <font color='ffffff'>ist nicht verbannt!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'img') { + my $hierachie = &hierachie($alias, $room); + &hierachie_rm($alias); + if ($hierachie == 3) { + &post_prv($alias, q[<font color='ffffff'>Als temporärer Wächter kannst du dein Superuserlogo nicht verstecken!</font>]); + } + elsif ($hierachie % 2 > 0) { + &post_prv($alias, q[<font color='ffffff'>Dein Superuserlogo wurde versteckt!</font>]); + &hierachie_add($alias, $hierachie + 1); + } + else { + &post_prv("$alias", q[<font color='ffffff'>Dein Superuserlogo wurde wieder sichtbar gemacht!</font></font>]); + &hierachie_add($alias, $hierachie - 1); + } + &reload_html; + } + elsif ($cmd eq 'ip') { + my $alias2prove = $cmd[1]; + opendir DIR, 'data/online/ident'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2prove) { + open DATEI, "<data/online/ident/$alias2prove"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + &post_prv($alias, "<font color='ffa500'>$_<font color='ffffff'> hat die IP-Nummer <font color='ff0000'>$ipnr</font> !</font></font>"); + } + } + &reload_html; + } + elsif ($cmd eq 'k' or $cmd eq 'o') { + my $alias2kick = $cmd[1]; + if (-f "data/online/users/$alias2kick") { + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $raum (@dir) { + opendir DIR, "data/online/rooms/$raum"; + my(@dir2) = readdir DIR; + closedir DIR; + foreach my $chatter (@dir2) { + if ($chatter eq $alias2kick) { + my $hierachie2 = &hierachie($alias2kick); + if (&hierachie($alias) <= &hierachie($alias2kick)) { + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> besitzt einen höheren oder gleichen Rang und kann nicht gekickt/ausgeloggt werden!</font></font>"); + } + else { + if ($cmd eq 'k') { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=kick","_top");</script>'); + } + else { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=logout","_top");</script>'); + } + $_ = undef if $room eq $raum; + if ($cmd eq 'k') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> katapultiert <font color='".&get_ident($alias2kick,3)."'>$alias2kick</font> aus dem Chat ...</font></i>", $alias, $raum); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt <font color='".&get_ident($alias2kick,3)."'>$alias2kick</font> aus dem Chat aus ...</font></i>", $alias, $alias); + } + &rm_alias($alias2kick, $raum); + &check_online; + } + &reload_html; + } + } + } + } + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> ist nicht anwesend und kann nicht aus dem System katapultiert werden werden!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'sl') { + my $sl_room = $cmd[1]; + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + open RSTAT, "<data/online/rstat/$sl_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen ab ...</font></i>", $alias, $sl_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen auf ...</font></i>", $alias, $sl_room); + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$sl_room"; + print RSTAT $lock; + close RSTAT; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$sl_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'ss') { + my $ss_room = $cmd[1]; + if (-e "data/online/rooms/$ss_room") { + my $ss_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $ss_msg = $ss_msg . ' ' . $cmd[$i]; + } + my $msg2scream = "\U$ss_msg\E"; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> ruft in den Raum <b>$ss_room</b> hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>", $alias, $ss_room); + &reload_html; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$ss_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'st') { + my $st_room = $cmd[1]; + if (-e "data/online/rooms/$st_room") { + my $theme; + if ($cmd[2] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum <b>$st_room</b> das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias, $st_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums <b>$st_room</b> ...</font></i>", $alias, $st_room); + } + open RSTAT, "<data/online/rstat/$st_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$st_room"; + print RSTAT $theme; + close RSTAT; + } + else { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'status') { + my $alias2level = $cmd[1]; + &post_prv($alias, "<font color='ffa500'>$alias2level <font color='ffffff'>hat den Superuserstatus <font color='ff0000'>".&hierachie($alias2level, &get_room($alias2level))."</font> !</font></font>"); + &reload_html; + } + elsif (7 <= &hierachie($alias)) { + if ($cmd eq 'kill') { + my $alias2kill = $cmd[1]; + if (-f "data/user/options/$alias2kill") { + if (7 <= &hierachie($alias2kill)) { + &post_prv($alias, "<font color='ffa500'>$alias2kill</font> <font color='ffffff'>hat einen höheren Rang und kann nicht aus dem System entfernt werden !</font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col>$alias</font> killt <b>$alias2kill</b> ganz und gar aus dem System ...</font></i>", $alias); + &kill_alias($alias2kill, $alias); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2kill <font color='ffffff'> existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'sys') { + my $sys_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $sys_msg = $sys_msg . ' ' . $cmd[$i]; + } + $sys_msg = q[<i><font color='ffffff'>] . ×tring . " </font></i> <b><font size=2 color='red'>SYSTEMNACHRICHT</font></b><i><font color='ffffff'>: $sys_msg ...</font></i>"; + opendir ROOMS, 'data/msgs'; + my(@rooms) = readdir ROOMS; + close ROOMS; + foreach $_ (@rooms) { + &post($_, $sys_msg, $alias) unless /\./; + } + &log($sys_msg); + &reload_html; + } + elsif ($cmd eq 'twa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + my $room2 = &get_room($alias2wa); + if (3 <= &hierachie($alias2wa, $room2)) { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum temporären Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add_rstat($alias2wa, 3, $room2); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2wa,3)."'>$alias2wa</font> zum <font color='ff0000'>temporären</font> W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'rtwa') { + my $alias2rwa = $cmd[1]; + my $room2 = &get_room($alias2rwa); + if (3 == &hierachie($alias2rwa, $room2)) { + &hierachie_rm_rstat($alias2rwa, $room2); + + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2rwa,3)."'>$alias2rwa</font> vom <font color='ff0000'>temporären</font> W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein temporärer W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'wa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + if (5 <= &hierachie($alias2wa)) { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2wa, 5); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2wa,3)."'>$alias2wa</font> zum W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'rwa') { + my $alias2rwa = $cmd[1]; + my $hierachie = &hierachie($alias2rwa); + if (5 == $hierachie or 6 == $hierachie) { + &hierachie_rm($alias2rwa); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2rwa,3)."'>$alias2rwa</font> vom W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif (9 <= &hierachie($alias)) { + if ($cmd eq 'ow') { + my $alias2ow = $cmd[1]; + if (-f "data/user/options/$alias2ow") { + if (7 <= &hierachie($alias2ow)) { + &post_prv($alias, "<font color='ffa500'>$alias2ow <font color='ffffff'>kann nicht zum Oberwächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2ow, 7); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2ow,3)."'>$alias2ow</font> zum Oberwächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'row') { + my $alias2row = $cmd[1]; + my $hierachie = &hierachie($alias2row); + if (7 == $hierachie or 8 == $hierachie) { + &hierachie_rm($alias2row); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2row,3)."'>$alias2row</font> vom Oberw\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2row <font color=ffffff>ist kein Oberw\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'pw') { + my $pw2show = $cmd[1]; + if (-f "data/user/options/$pw2show") { + open PW, "<data/user/options/$pw2show"; + my(@pw) = <PW>; + close PW; + chomp $pw[0]; + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> hat das Passwort <font color='ff0000'>$pw[0]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'id' or $cmd eq 'agent') { + my $id2show = $cmd[1]; + if (-f "data/online/ident/$id2show") { + if ($cmd eq 'id') { + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> hat die Temp-ID <font color='ff0000'>".&get_ident($id2show, 1)."</font> !</font></font>"); + } + else { + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> verwendet <font color='ff0000'>".&get_ident($id2show, 2)."</font> !</font></font>"); + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> ist nicht eingeloggt !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'cool') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . " $msg2post</font></i>", $alias); + &reload_html; + } + elsif ($cmd eq 'rev') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post = reverse($msg2post); + &post($room, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'arks') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post =~ s/i/1/gi; + $msg2post =~ s/e/3/gi; + $msg2post =~ s/a/4/gi; + $msg2post =~ s/s/5/gi; + $msg2post =~ s/g/6/gi; + $msg2post =~ s/t/7/gi; + $msg2post =~ s/b/8/gi; + $msg2post =~ s/o/0/gi; + &post($room, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'ultra') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + my @letters = split '', "$alias: $msg2post"; + $msg2post = undef; + foreach (@letters) { + $msg2post .= "<font color='".&random_color."'>$_</font>"; + } + &post($room, "<b>$msg2post</b>", $alias); + &reload_html; + } + } + } + } + } + my($alias2post, $msg2post, $action); + if ($cmd eq 'msg') { + $alias2post = $cmd[1]; + for ($i = 2; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + elsif ($cmd eq '') { + $alias2post = $whisper; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + else { + $alias2post = $cmd; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + $msg2post =~ s[/me/][<i>$alias</i>]g; + $msg2post =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if (-f "data/online/users/$alias2post" and not -f "data/online/rooms/$loginplace/$alias2post") { + &post_prv($alias, "<b><font color='$col'><i>Zu $alias2post gefl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &post_prv($alias2post, "<b><font color='$col'><i>$alias fl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &private_javascript($alias, $room, "parent.input.document.inf.whisper.value = '$alias2post';"); + &reload_html; + } + &post_prv($alias, qq[ <font color=ffffff>Benutzer oder Befehl <font color=ffa500>$alias2post</font> ist nicht anwesend/verf\374gbar! Bitte den Befehl "/menu" eingeben, um das Chat-Menü zu öffnen.</font></font>]); + &reload_html; +} +1; diff --git a/0.7.6/modules/divcom.pm b/0.7.6/modules/divcom.pm new file mode 100644 index 0000000..57c4def --- /dev/null +++ b/0.7.6/modules/divcom.pm @@ -0,0 +1,266 @@ +sub divcom { + if ($var eq 'list_alias_html') { + &list_alias_html; + } + elsif ($var eq 'alias_html') { + &alias_html; + } + elsif ($var eq 'edit_profile_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_profile_html'); + } + elsif ($var eq 'edit_options_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_options_html'); + } + elsif ($var eq 'gb_html') { + &gb_html; + } + elsif ($var eq 'post_gb') { + &secure_checkid($alias, $tmpid); + &post_gb; + } + elsif ($var eq 'edit_profile') { + &secure_checkid($alias, $tmpid); + &edit('edit_profile'); + } + elsif ($var eq 'edit_options') { + &secure_checkid($alias, $tmpid); + &edit('edit_options'); + } + elsif ($var eq 'rm_gb_alias') { + &secure_checkid($alias, $tmpid); + &rm_gb; + } + else { + &error('Parameter fehlt'); + } +} +sub gb_html { + my ($message,$method) = @_; + unless ($method eq 'loggedin') { + &start_html('Benutzerboard'); + &menu(); + } + if ($message eq 'post_empty') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </i>\n einen Text und poste\n <u>dann</u>\n !\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_ok') { + print " <div class=b>\n Meldung:\n </div>\n <div>\n Vielen Dank f\374r Deinen Beitrag. Wenn Du willst, kannst Du jetzt gleich noch einen Eintrag posten ...\n </div>\n <hr>\n"; + } + else { + print " <div>\n Falls Du Anregungen oder Verbesserungsvorschl\344ge f\374r die Community hast, dann poste doch einen kleinen Eintrag :-)\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="col" value="$col">\n<input type="hidden" name="secol" value="$secol">\n<input type="hidden" name="maxVerlauf" value="$maxVerlauf">\n<input type="hidden" name="verlaufOrder" value="$verlaufOrder">\n<input type="hidden" name="request" value="divcom">\n <input type="hidden" name="method" value="$method">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="guestbook">\n <input type="hidden" name="id" value="y">\n <input size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e 'data/guestbook') { + &error("Konnte dat/guestbook nicht \366ffnen") unless open DATEI, '<data/guestbook'; + @datei = <DATEI>; + close DATEI; + print $q->div(@datei); + } + print $q->end_html; +} +sub post_gb { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if ($msg eq '') { + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_empty'); + } else { + &gb_html('post_empty'); + } + } + else { + &alias_html('post_empty'); + } + $client->shutdown(2); + exit 0; + } + $msg =~ s/</</g; + $msg =~ s/\n/<br>/g; + my $tmpath = ''; + if ($id eq 'y') { + $tmpath = 'data/guestbook'; + } + else { + $tmpath = "data/user/gbooks/$tmp"; + } + open GB, "$tmpath"; + my(@gb) = <GB>; + close GB; + pop @gb if $#gb > 99; + my(@newdatei) = "<br><b>$alias schrieb am $days.$months.$years um $hours:$mins:$secs ...</b><br>$msg<br>\n"; + push @newdatei, @gb; + open GB, ">$tmpath"; + print GB @newdatei; + close GB; + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_ok'); + } else { + &gb_html('post_ok'); + } + $client->shutdown(2); + exit 0; + } + &post_prv ($tmp, "<font color=ffffff>$alias hat soeben einen Pin in Dein Profil geh\344ngt ... </font>"); + &alias_html; + $client->shutdown(2); + exit 0; +} +sub rm_gb { + open GB, "<data/user/gbooks/$alias"; + my(@gbfile) = <GB>; + close GB; + my(@newgbfile) = (); + for ($i = 0; $i <= $#gbfile; ++$i) { + push @newgbfile, $gbfile[$i] if $i != $id; + } + open GB, ">data/user/gbooks/$alias"; + print GB @newgbfile; + close GB; + &alias_html('rm_ok'); +} +sub list_alias_html { + &start_html('Alle Benutzer'); + opendir REGISTERED, 'data/user/options'; + my(@users) = readdir REGISTERED; + closedir REGISTERED; + my(@liste) = sort(@users); + my $nr = $#users - 1; + &menu(); + print " <div>\n Es sind z.Z. genau $nr Benutzernamen in der Datenbank vorhanden! (Sortiert nach #, A-Z, a-z)\n </div>\n <hr>\n <div>\n"; + foreach $_ (@liste) { + if (-f "data/user/options/$_") { + print $q->a({-'href', "chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid"}, "$_"), ' '; + } + } + print " </div>\n</body>\n</html>\n"; +} +sub alias_html { + my $message = $_[0]; + open COUNTS, "<data/user/counts/$tmp"; + local $counter = <COUNTS>; + close COUNTS; + ++$counter; + open COUNTS, ">data/user/counts/$tmp"; + print COUNTS $counter; + close COUNTS; + &start_html($tmp); + &menu(); + print ""; + if ($message eq 'rm_ok') { + print " <div class=b>\n Meldung:\n </div>\n <div>\n Der von Dir gew\344hlte Eintrag wurde erfolgreich gel\366scht.\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_empty') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </u>\n einen Text und poste\n <u>dann</u>\n !\n <hr>\n"; + } + open PROFILE, "<data/user/profiles/$tmp"; + @data = <PROFILE>; + close PROFILE; + print qq[ <div>\n Dieses Profil wurde insgesamt schon $counter mal aufgerufen !\n <br><br>Alias: $tmp\n <br><br>Nachname: $data[0]\n <br><br>Vorname: $data[1]\n <br><br>Alter: $data[2]\n <br><br>Wohnort: $data[3]\n <br><br>E-Mail:\n <a href="mailto:$data[4]">$data[4]</a>\n <br><br>ICQ-Nummer: $data[5]\n <br><br>Homepage: <a href="$data[6]" target="_new">$data[6]</a>\n <br><br>Weiteres:<br>$data[7]\n <hr>\n Hier kannst Du $tmp eine Nachricht hinterlassen!\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n <input type="text" size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e "data/user/gbooks/$tmp") { + &error("Konnte data/user/gbooks/$tmp nicht \366ffnen") unless open DATEI, "<data/user/gbooks/$tmp"; + @datei = <DATEI>; + close DATEI; + my $nr = 1; + if ($alias ne $tmp) { + foreach $_ (@datei) { + print "<br>Eintrag # $nr: $_"; + ++$nr; + } + } + else { + print qq[ <table>\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="rm_gb_alias">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n]; + for ($i = 0; $i <= $#datei; ++$i) { + print qq[ <tr>\n <td>\n <input type="radio" name="id" value="$i">\n </td>\n <td>\n <div class=q>\n <br>\n Eintrag # $nr:\n $datei[$i]\n </div>\n </td>\n </tr>\n]; + ++$nr; + } + print qq[ </table>\n <table>\n <tr>\n <td>\n <font color=ffffff>\n <input type="submit" value="Markierten Eintrag l\366schen">\n </font>\n </td>\n <td>\n <font color=ffffff>\n <input type="reset" value="Markierung r\374ckg\344ngig machen">\n </font>\n </td>\n </tr>\n </table>\n </form>\n]; + } + } + print $q->end_html; +} +sub edit_html { + my($method, $message) = @_; + &start_html("Benutzerprofil \344ndern"); + if ($method eq 'edit_options_html') { + open DATEI, "<data/user/options/$alias"; + } + elsif ($method eq 'edit_profile_html') { + open DATEI, "<data/user/profiles/$alias"; + } + @data = <DATEI>; + close DATEI; + foreach $_ (@data) { + chomp $_; + } + &menu(); + if ($method eq 'edit_options_html') { + if ($message eq 'edit_options_ok') { + print "<div class=b>\n Hinweis:\n</div>\n<div>\n Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um\n weiterzuchatten einfach Fenster schliessen!\n</div>\n<hr>\n"; + } + elsif ($message eq 'edit_pw_wrong') { + print "<div class=b>\n ACHTUNG!\n</div>\n<div>\n Du hast soeben versucht, dein Passwort zu \344ndern. Jedoch stimmte die Erste Eingabe nicht mit der Zweiten \374berein.\n Bitte versuch es erneuert ...\n</div>\n<hr>\n"; + } + else { + print $q->div('Hier kannst Du Deine Chat-Optionen editieren!'), $q->hr; + } + print qq[<script lang="javascript" type="text/javascript">\n<!--\n\nfunction radioWert(rObj) {\n for (var i=0; i<rObj.length; i++) if (rObj[i].checked) return rObj[i].value;\n return false;\n}\n\nfunction insertcode( code ) {\n document.optionen.elements[radioWert(document.optionen.eingabe)].value = code;\n}\n\n//-->\n</script>\n\n<form name="optionen" action="chat">\n <input type="hidden" name="var" value="edit_options">\n <table>\n <tr>\n <td>\n <div>\n Dein Passwort\n <font color=ffa500>\n (Gut merken !!)\n </font>\n <br>\n <input type="password" name="id" value="$data[0]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n Geb hier das Passwort erneuert ein:\n <br>\n <input type="password" name="tmp" value="$data[0]">\n </div>\n </td>\n </tr>\n </table>\n <hr>\n <div>Einstellungen f\374r den Nachrichten-Verlauf</div>\n <table>\n <tr>\n <td>\n <br>\n <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div>\n <font color=ffffff>\n <select name="maxVerlauf" size="1">\n <option value="$data[3]">$data[3]\n]; + for ($i = 1; $i <= 50; ++$i) { + print qq[<option value="$i">$i]; + } + print qq[ </select>\n </font>\n </td>\n </tr>\n <tr>\n <td>\n <br>\n<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div>\n <font color=ffffff>\n <select name="verlaufOrder" size="1">\n <option value="$data[4]">Bisherige Einstellung ($data[4])\n <option value="0">Neue Verlaufnachrichten oben (0)\n <option value="1">Neue Verlaufnachrichten unten (1)\n </select>\n </font>\n </td>\n </tr>\n </table>\n<br>\n <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div>\n <hr>\n <table>\n <tr>\n <td>\n <div>\n <input type="radio" name="eingabe" value="col" checked>\n Auswahl von Farbe 1\n <br>\n (Farbe Deines Nicks):\n <br>\n <input name="col" size="6" maxlength="6" value="$data[1]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n <input type="radio" name="eingabe" value="secol">\n Auswahl von Farbe 2\n <br>\n (Farbe Deiner Nachrichten):\n <br>\n <input name="secol" size="6" maxlength="6" value="$data[2]">\n </div>\n </td>\n </tr>\n </table>\n<br>\n <div>\n Beliebige Auswahl markieren und Farbe w\344hlen. Um Deine Optionen abzuspeichern,\n auf "Daten \344ndern" klicken!\n </div>\n <br>\n]; + open COLORS, '<templates/colors.sno'; + @colors = <COLORS>; + close COLORS; + print @colors; + } + elsif ($method eq 'edit_profile_html') { + if ($message eq 'edit_profile_ok') { + print " <div class=b>\n Hinweis:\n </div>\n <div>\n Du hast soeben Dein Profil erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren:\n <hr>\n"; + } + else { + print $q->div('Hier kannst Du Dein Profil editieren!'), $q->hr; + } + print qq[ <form action="chat">\n <input type="hidden" name="var" value="edit_profile">\n <div>\n Dein Nachname:\n <br>\n <input name="nachname" value="$data[0]">\n </div>\n <br>\n <div>\n Dein Vorname:\n <br>\n <input name="vorname" value="$data[1]">\n </div>\n <br>\n <div>\n Dein Alter:\n <br>\n <input name="alter" value="$data[2]">\n </div>\n <br>\n <div>\n Dein Wohnort:\n <br>\n <input name="wohnort" value="$data[3]">\n </div>\n <br>\n <div>\n Deine E-Mail Adresse:\n <br>\n <input name="email" value="$data[4]">\n </div>\n <br>\n <div>\n Deine ICQ-Nummer:\n <br>\n <input name="icq" value="$data[5]">\n </div>\n <br>\n <div>\n Deine Homepage:\n <br>\n <input name="homepage" value="$data[6]">\n </div>\n <br>\n <div>\n Weiteres:\n <br>\n <textarea rows="5" cols="40"name="weiteres" wrap="virtual">$data[7]</textarea>\n </div>\n]; + } + print qq[ <hr>\n <font color=ffffff>\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="room" value="$room">\n <input type="submit" value="Daten \344ndern ...">\n </font>\n </form>\n</body>\n</html>\n]; +} +sub edit { + my $method = $_[0]; + if ($method eq 'edit_profile') { + my $url = $homepage; + $url =~ s[^http://*][]; + open PROFILE, ">data/user/profiles/$alias"; + my $profile = "$nachname\n$vorname\n$alter\n$wohnort\n$email\n$icq\nhttp://$url\n$weiteres"; + $profile =~ s/</</g; + print PROFILE $profile; + close PROFILE; + &edit_html('edit_profile_html', 'edit_profile_ok'); + } + elsif ($method eq 'edit_options') { + if ($id ne $tmp) { + &edit_html('edit_options_html', 'edit_pw_wrong'); + $client->shutdown(2); + exit 0; + } + open OPTIONS, ">data/user/options/$alias"; + my $options = "$id\n$col\n$secol\n$maxVerlauf\n$verlaufOrder"; + $options =~ s/</</g; + print OPTIONS $options; + close OPTIONS; + open IDENT, "<data/online/ident/$alias"; + my (@ident) = <IDENT>; + close IDENT; + open IDENT, ">data/online/ident/$alias"; + print IDENT $ident[0] . $ident[1] . $ident[2] . "$col\n$secol"; + close IDENT; + my $room = &get_room($alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> <font color='$secol'>hat seine Chat-Einstellungen geändert</font> ...</font></i>", $alias); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &edit_html('edit_options_html', 'edit_options_ok'); + } +} +1; diff --git a/0.7.6/modules/hierachie.pm b/0.7.6/modules/hierachie.pm new file mode 100644 index 0000000..b6f5732 --- /dev/null +++ b/0.7.6/modules/hierachie.pm @@ -0,0 +1,77 @@ +sub hierachie { + my($alias, $room) = @_; + open FILE, "<data/online/rstat/$room"; + flock FILE, 2; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + open FILE, '<data/hierachie'; + flock FILE, 2; + my(@hierachie) = <FILE>; + close FILE; + my(@userlevels) = (@hierachie, @rstat); + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($name eq $alias) { + chomp $level; + return $level; + } + } + return 0; +} +sub hierachie_rm { + my $alias = shift @_; + my @return; + open FILE, '<data/hierachie'; + my(@hierachie) = <FILE>; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, '>data/hierachie'; + print FILE @return; + close FILE; +} +sub hierachie_rm_rstat { + my($alias, $room) = @_; + my @return; + return unless open FILE, "<data/online/rstat/$room"; + my(@hierachie) = <FILE>; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, ">data/online/rstat/$room"; + print FILE @return; + close FILE; +} +sub hierachie_add { + my($alias, $level) = @_; + &hierachie_rm($alias); + open FILE, '>>data/hierachie'; + print FILE "$alias<;$level\n"; + close FILE; +} +sub hierachie_add_rstat { + my($alias, $level, $room) = @_; + &hierachie_rm_rstat($alias, $room); + return unless open FILE, ">>data/online/rstat/$room"; + print FILE "$alias<;$level\n"; + close FILE; +} +sub prove_away { + my($alias, $room) = @_; + return unless open AWAY, "<data/online/rstat/$room.away"; + @away = <AWAY>; + close AWAY; + my $name, $away; + foreach $_ (@away) { + if (/^$alias.*/) { + ($name, $away) = split(/<; /, $_, 3); + chomp $away; + return $away; + } + } +} +1; diff --git a/0.7.6/modules/htdocs.pm b/0.7.6/modules/htdocs.pm new file mode 100644 index 0000000..4f1bbeb --- /dev/null +++ b/0.7.6/modules/htdocs.pm @@ -0,0 +1,127 @@ +sub htdocs { + if ($var eq 'help_html') { + &printfile('templates/help.sno', 'Alle Chatbefehle'); + } + elsif ($var eq 'logo_html') { + &start_html('Logo'); + &logo_html; + } + elsif ($var eq 'menu_html') { + &menu_html; + } + elsif ($var eq 'logs_html') { + &logs_html; + } + elsif ($var eq 'view_logs_html') { + &secure_checkid($alias, $tmpid); + &printfile("data/logs/$tmp", 'Logdatei', 'blank') if 7 <= &hierachie($alias); + } + elsif ($var eq 'superuser_html') { + &secure_checkid($alias, $tmpid); + &superuser_html; + } + elsif ($var eq 'chatiquette_html') { + &printfile('templates/chatiq.sno', 'Chatiquette'); + print $q->end_html; + } + else { + print $q->start_html(-'bgcolor', '000000'), $q->end_html; + } +} +sub menu_html { + &start_html("Men\374"); + print "<div>\n Von hier aus kannst du alle Untermen\374punkte des Systems erreichen:\n</div>\n<hr>\n"; + &menu(); + print "</body>\n</html>"; +} +sub logo_html { + print qq[ <layer top=-3 left=0><div style="position:absolute; top:5; left:10">\n <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"\n codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"\n WIDTH=48 HEIGHT=48>\n <PARAM NAME=movie VALUE="$gfxpath/ySymbol.swf">\n <PARAM NAME=loop VALUE=false>\n <PARAM NAME=menu VALUE=false>\n <PARAM NAME=quality VALUE=high>\n <PARAM NAME=scale VALUE=noborder>\n <PARAM NAME=wmode VALUE=opaque>\n <PARAM NAME=bgcolor VALUE=$bgcolor>\n <EMBED src="$gfxpath/ySymbol.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=48 HEIGHT=48 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </OBJECT>\n </div></layer>\n]; + print $q->end_html; +} +sub logs_html { + &start_html('Logdateien'); + &menu; + print "<div>\n Hier befinden sich alle Logdateien\n</div>\n<hr>\n"; + if (5 <= &hierachie($alias)) { + print $q->div(qq[Folgende Logdateien des Raumes "$standardroom" k\366nnen nur von Oberw\344chtern oder h\366her gelesen werden (Sortiert nach A-Z, a-z):]), $q->br; + opendir LOGS, 'data/logs'; + my(@logs) = readdir LOGS; + closedir LOGS; + my(@sortedir) = sort(@logs); + foreach $_ (@sortedir) { + if (-f "data/logs/$_") { + print $q->a({-'href', "chat?request=htdocs&alias=$alias&var=view_logs_html&tmp=$_&tmpid=$tmpid", -'target', '_new'}, "$_"), ' '; + } + } + } + else { + print $q->div("Logdateien k\366nnen nur von Oberw\344chtern (OW) gelesen werden. Du bist jedoch ein W\344chter (W\304) oder ein", qq["Normaler Chatter". Oberw\344chter k\366nnen alles nachlesen, was \366ffentlich im Raum "Cyberbar" gechattet wurde.]), $q->hr; + } + print $q->end_html; +} +sub superuser_html { + &start_html ('Superuser'); + &menu; + print "<div>Hallo $alias. Du bist als "; + my $hierachie = &hierachie($alias); + if (9 <= $hierachie) { + print $q->b('Administrator'), ' (AD) eingetragen.</div><br>', $q->br; + } + elsif (7 <= $hierachie) { + print $q->b("Oberw\344chter"), ' (OW) eingetragen.</div><br>', $q->br; + } + elsif (5 <= $hierachie) { + print $q->b("W\344chter"), " (W\304) eingetragen.</div><br>", $q->br; + } + else { + print $q->b('normaler Chatter'), ' (NC) eingetragen.</div><br>', $q->br; + } + open FILE, 'data/hierachie'; + my(@hierachie) = <FILE>; + close FILE; + my @ows, @was, @ads; + foreach $_ (@hierachie) { + my($name, $level) = split(/<;/, $_, 3); + chomp $level; + if ($level == 5) { + push @was, $name; + } + elsif ($level == 7) { + push @ows, $name; + } + elsif ($level == 9) { + push @ads, $name; + } + if (3 <= $hierachie) { + if ($level == 6) { + push @was, "$name!"; + } + elsif ($level == 8) { + push @ows, "$name!"; + } + elsif ($level == 10) { + push @ads, "$name!"; + } + } + } + my $nads = $#ads + 1; + print '<div>', $q->b('AD'), "s ($nads St\374ck)"; + foreach $_ (@ads) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrow = $#ows + 1; + print '</div><br><br><div>', $q->b('OW'), "s ($nrow St\374ck)"; + foreach $_ (@ows) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrwa = $#was + 1; + print '</div><br>', $q->br, '<div>', $q->b("W\304"), "s ($nrwa St\374ck)"; + foreach $_ (@was) { + print $q->font({-'color', 'FFA500'}, ' ' . $_); + } + print qq[<hr>\n Die jeweiligen F\344higkeiten der Oberw\344chter (OW) und der W\344chter (W\304) sind unter\n "<a href="chat?request=htdocs&var=help_html">Chat-Befehle</a>"\n dokumentiert. Versteckte Superuser k\366nnen nur von anderen Superusern auf\ndieser Liste eingesehen werden!\n</div>\n</body>\n</html>\n]; +} +sub menu { + print "<div>\n <a href='chat?request=divcom&var=edit_profile_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Profil \344ndern</a>\n <a href='chat?request=divcom&var=edit_options_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Optionen</a>\n <a href='chat?request=divcom&var=list_alias_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Benutzer</a>\n <a href='chat?request=htdocs&var=help_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Befehle</a>\n <a href='chat?request=divcom&var=gb_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Board</a>\n <a href='chat?request=htdocs&var=superuser_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Superuser</a>\n <a href='chat?request=htdocs&var=logs_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Logs</a>\n <a href='chat?request=statistic&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Statistik</a>\n <a href='chat?request=htdocs&var=chatiquette_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Chatiquette</a>\n</div>\n<hr>\n"; +} +1; diff --git a/0.7.6/modules/input.pm b/0.7.6/modules/input.pm new file mode 100644 index 0000000..48df243 --- /dev/null +++ b/0.7.6/modules/input.pm @@ -0,0 +1,14 @@ +sub input { + &rm_away($alias, $room); + $maxVerlauf = '10' if $maxVerlauf eq undef; + $verlaufOrder = '1' if $verlaufOrder eq undef; + if ($tmp eq 'login') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat den Chat im Raum <b>$room</b> betreten ...</font></i>"); + } + print qq[<html>\n<head>\n<script language="JavaScript"><!--\n\n// Einstellungsvariablen\nmaxVerlauf = $maxVerlauf; // Anzahl der Eintr\344ge des Verlaufs\nmaxPreview = 20; // Zeichenl\344nge der Verlaufsvorschau\nverlaufOrder = $verlaufOrder; // Neue Nachrichten von: 0=oben, 1=unten\n//autoAwayTimeout = 5; // Sekunden, nach denen der User 'Away' gesetzt wird\n//autoQuitTimeout = 10; // Sekunden, nach denen der User den Chat verl\344sst\nautoAwayTimeout = 300; // Sekunden, nach denen der User 'Away' gesetzt wird\nautoQuitTimeout = 1200; // Sekunden, nach denen der User den Chat verl\344sst\n\n// Interne Variablen\nuserNotFocused = false; // Wenn User nicht schreibt\nuserAway = false; // Wenn User automatisch auf 'Away' gesetzt ist\nuserAwayTime = 0; // Sekunden, die User 'Away' ist\nfullVerlauf = new Array( maxVerlauf ); // Verlaufspuffer\n\nfunction delout()\n{\n addVerlauf (document.inf.msg.value); // Dem Verlauf eine Nachricht anh\344ngen\n document.inf.msg.focus(); // Fukus in das Eingabeform\n document.inf.msg.select(); // Text im Eigabeform markieren\n document.inf.submit(); // Formular absenden\n return false; // Abbrechen, damit das Frame nicht neu geladen wird\n}\n\nfunction CheckAuswahl()\n{\n id=document.verlaufform.verlauf.selectedIndex; // ID des ausgew\344hlten Feldes\n\n if (fullVerlauf[id-1] != null) // Nur, wenn das Feld nicht leer ist\n {\n document.inf.msg.value = fullVerlauf[id-1]; // Eintrag ins Textfeld\n }\n\n document.verlaufform.verlauf.selectedIndex = 0; // Ersten Eintrag (\334berschrift) ausw\344hlen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n\n return true;\n}\n\nfunction addVerlauf (msg)\n{\n if (msg == "") // Falls msg leer\n return false; // Aufruf ignorieren\n\n if (verlaufOrder) // neue Nachrichten von unten\n {\n for (i=0; i<(maxVerlauf-1); i++) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+1].text = document.verlaufform.verlauf.options[i+2].text;\n fullVerlauf[i] = fullVerlauf[i+1];\n }\n }\n else // neue Nachrichten von oben\n {\n for (i=(maxVerlauf-2); i>=0; i--) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+2].text = document.verlaufform.verlauf.options[i+1].text;\n fullVerlauf[i+1] = fullVerlauf[i];\n }\n }\n\n if (msg.length > maxPreview) // Vorschau zuschneiden\n pre = msg.slice(0, maxPreview-3) + "...";\n else\n pre = msg;\n\n if (verlaufOrder) // pos = Position des neuen Eintrags\n pos = maxVerlauf-1;\n else\n pos = 0\n\n document.verlaufform.verlauf.options[pos+1].text = pre; // Neue Vorschau anf\374gen\n fullVerlauf[pos] = msg; // Neuen Eintrag an den Verlauf anf\374gen\n\n// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag\n document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (\334berschrift)\n}\n\nfunction msgBlur()\n{\n userNotFocused = true;\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction msgFocus()\n{\n userNotFocused = false;\n if (userAway) // Wird ausgef\374hrt, falls User 'Away' war\n {\n ; // nop\n }\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction checkInterval()\n{\n// status = "userNotFocused=" + userNotFocused + "; userAway=" + userAway + "; userAwayTime=" + userAwayTime + ""; // Debug\n if (userNotFocused)\n {\n userAwayTime += 5; // Addiere 5, da nur alle 5Sek ausgef\374hrt\n if (!userAway)\n {\n if (autoAwayTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n if (document.inf.tmp.value != "away")\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2faway&tmp=autoaway","reload"); // 'Away' setzen\n userAway = true;\n }\n }\n else\n {\n if (autoQuitTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2fexit&tmp=autologout","reload"); // Chat beenden\n }\n }\n }\n\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden wieder aufrufen\n}\n\nfunction initFrame()\n{\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden aufrufen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n}\n//-->\n</script>\n]; + &style; + print qq[</head>\n<body class="blank" onload="initFrame();">\n <div align="left">\n <table border="0" cellpadding="0" cellspacing="0">\n <tr>\n <td>\n <form name="inf" target="reload" action="chat" onsubmit="return delout();">\n <input type="hidden" name="request" value="postmessage">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="room" value="$room">\n <input type="hidden" name="col" value="$col">\n <input type="hidden" name="secol" value="$secol">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="whisper" value="$whisper">\n <input type="hidden" name="tmp" value="$tmp">\n <input size="40" maxlength="300" name="msg" onBlur="msgBlur();" onFocus="msgFocus();">\n </form>\n </td>\n <td><form name="verlaufform">\n <script language="JavaScript"><!--\n document.write("<select size='1' name='verlauf' size='40' onChange='CheckAuswahl();'>");\n document.write("<option>- Nachrichten-Verlauf -</option>");\n for(i=0; i<maxVerlauf; i++) // Leere Verlaufsfelder generieren\n document.write("<option value>(leer)</option>");\n document.write("</select>");\n //-->\n </script>\n </form>\n </td>\n </tr>\n </table>\n </div>\n</body>\n</html>\n]; + $client->$shutdown(2); + exit 0; +} +1; diff --git a/0.7.6/modules/loggedin.pm b/0.7.6/modules/loggedin.pm new file mode 100644 index 0000000..dee4d97 --- /dev/null +++ b/0.7.6/modules/loggedin.pm @@ -0,0 +1,41 @@ +sub loggedin { + &start_html($loginplace, 'blank'); + print qq[<div>\n <font color='$col'>$alias</font>, sch\366n da\337 Du da bist :-), <a href='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder' style="text-decoration: underline; color: red">hier</a> kannst du die Seite aktualisieren.\n</div>\n<hr>\n<div>\n<a href="chat?request=stream&alias=$alias&room=$standardroom&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" style="text-decoration: underline; color: red">Hier</a>\nkannst du den Standardraum $standardroom betreten. <br><br>\n]; + opendir ROOMDIRS, 'data/online/rooms'; + local(@roomdirs) = readdir ROOMDIRS; + close ROOMDIRS; + foreach $_ (@roomdirs) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + my $room = $_; + + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + + opendir ROOMDIR, "data/online/rooms/$room"; + my(@roomdir) = readdir ROOMDIR; + close ROOMDIR; + + my $nr = $#roomdir - 1; + if ($door or $_ eq $loginplace) { + print $q->b($_), " $door ($nr) "; + } + else { + print $q->b($q->a({-'href', "chat?request=stream&alias=$alias&room=$_&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder"}, "$_")), " ($nr)"; + } + print " Raumthema: $rstat[1]" if $rstat[1] ne "\n"; + print $q->br; + foreach $_ (@roomdir) { + if ($_ ne '..' and $_ ne '.') { + my $col = &get_ident($_,3); + print "<a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid' target='$_' style='color: $col'>$_</a> "; + } + } + print $q->br, $q->br; + } + } + &gb_html($_[0],'loggedin'); +} +1; diff --git a/0.7.6/modules/online.pm b/0.7.6/modules/online.pm new file mode 100644 index 0000000..b59ae6e --- /dev/null +++ b/0.7.6/modules/online.pm @@ -0,0 +1,148 @@ +sub online { + &secure_checkid($alias, $tmpid); + my(@away) = &prove_away($alias, $room, 'return_list'); + for (;;) { + for ($i = 0; $i <= $#away; $i += 2) { + last if $away[$i] eq $alias or $room eq $loginplace; + } + open DATEI, "<data/online/users/$alias"; + my $oldstamp = <DATEI>; + close DATEI; + if ($oldstamp > time - 100) { + open DATEI, "<data/user/counts/$alias.online"; + my $online = <DATEI>; + close DATEI; + my $total = time - $oldstamp + $online; + open DATEI, ">data/user/counts/$alias.online"; + print DATEI $total; + close DATEI; + } + last; + } + unless (-d "data/online/rooms/$room") { + mkdir "data/online/rooms/$room", 511; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + open DATEI, '<data/online/prove'; + my $provetime = <DATEI>; + close DATEI; + + &check_online if $provetime < time - 40; + print <<END; + <html> + <head> + <meta http-equiv="refresh" content="20" URL="chat?request=online&room=$room&alias=$alias&tmpid=$tmpid"> + <style type="text/css">\n a { font-family: arial; font-size:11px; color: #ffffef; }\n a:hover { color: #ffffff; }\n </style>\n <style type="text/css" media="all">\n a { text-decoration: none; }\n a:hover { text-decoration:underline; } + </style> + </head> + <body bgcolor="$chatbg"> +END + + opendir ROOM, 'data/online/rooms/' . $room; + my(@room) = sort(readdir ROOM); + closedir ROOM; + + my $chatter = $#room - 1; + print "<font size='1' color='ffffff' face='arial'>$room ($chatter):</font><table>\n"; + + open FILE, "<data/online/rstat/$room"; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + + open FILE, '<data/hierachie'; + my(@userlevels) = (<FILE>, @rstat); + close FILE; + + open FILE, "<data/online/rstat/$room.away"; + my(@away) = <FILE>; + close FILE; + + my $hierachie; + foreach (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($name eq $alias) { + $hierachie = $level; + last; + } + } + + foreach my $nick (@room) { + if (-f "data/online/rooms/$room/$nick") { + my $inside = 0; + my $col = &get_ident($nick,3); + foreach $_ (@away) { + my($name, $awaymessage) = split(/<;/, $_, 3); + if ($name eq $nick) { + chomp $awaymessage; + print "<tr><td><a href=\"javascript:alert('$nick ist aus folgendem Grund abwesend:\n\n$awaymessage');\"><img border='0' title='$awaymessage' alt='$awaymessage' src='$gfxpath/away.gif'></a></td>"; + $inside = 2; + } + } + if ($inside == 0) { + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($nick eq $name) { + chomp $level; + $inside = 1; + if ($level == 1) { + print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>"; + last; + } + elsif ($level == 2) { + print "<tr><td><img title='Die Unschuld vom Land' alt='Die Unschuld vom Land' src='$gfxpath/uvl.gif'></td>"; + last; + } + elsif ($level == 3) { + print "<tr><td><img title='Temporärer Wächter' alt='Temporärer Wächter' src='$gfxpath/twa.gif'></td>"; + last; + } + elsif ($level == 5) { + print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>"; + last; + } + elsif ($level == 7) { + print "<tr><td><img title='oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>"; + last; + } + elsif ($level == 9) { + print "<tr><td><img title='Administrator' alt='Administrator' src='$gfxpath/adm.gif'></td>"; + last; + } + + if (5 <= $hierachie) { + if ($level == 6) { + print "<tr><td><img title='Wächter' alt='Unsichtbarer Wächter' src='$gfxpath/wa-i.gif'></td>"; + last; + } + elsif ($level == 8) { + print "<tr><td><img title='oberwächter' alt='Unsichtbarer Oberwächter' src='$gfxpath/ow-i.gif'></td>"; + last; + } + elsif ($level == 10) { + print "<tr><td><img title='Administrator' alt='Unsichtbarer Administrator' src='$gfxpath/adm-i.gif'></td>"; + last; + } + + } + print '<tr><td></td>'; + last; + } + } + } + if ($inside == 0) { + print '<tr><td></td>'; + } + print "<td><a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$nick&tmpid=$tmpid' target='$nick' style='color: $col'>$nick</a></td></tr>\n"; + } + } + print '</table></body></html>'; +} +1; diff --git a/0.7.6/modules/postmessage.pm b/0.7.6/modules/postmessage.pm new file mode 100644 index 0000000..5172b4f --- /dev/null +++ b/0.7.6/modules/postmessage.pm @@ -0,0 +1,90 @@ +sub postmessage { + if (not -e "data/online/rooms/$room/$alias" and $tmp ne 'autoaway' and $tmp ne 'autologout') { + &post_prv($alias, "<font color=ffffff>Du befindest Dich nicht im Raum <font color=ffa500>$room</font> und kannst dort auch keine Nachrichten posten!</font>"); + &reload_html; + } + elsif (length $msg > 300) { + &post_prv($alias, "<font color=ffffff>Deine Nachricht enth\344lt zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>"); + &reload_html; + } + if ($tmp eq 'away') { + &rm_away($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat sich zur\374ck gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'notaway';]); + } + $msg =~ s/</</g; + if (substr($msg, 0, 1) ne '/') { + unless ($tmp eq 'autoaway') { + foreach $_ ($col, $secol) { + &prove_color($alias, $_); + } + } + open MSGFILE, ">>data/msgs/$room"; + if (not $msg =~ s[/me/][<i>$alias</i>]g || $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g) { + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color='$col'>$alias: <font color='$secol'>$msg<br></font></font></b><;$alias<;\n"; + } + else { + $msg =~ s[/me/][<i>$alias</i>]g; + $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color=$secol>$msg</font></font></b><br><;$alias<;\n"; + } + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } + &log("<b><font color=$col>$alias: <font color=$secol>$msg</font></font></b>") if $room eq $standardroom; + &reload_html; + } + else { + &command($msg, $tmp); + } +} +sub post { + my($room, $msg2post, $alias, $secroom) = @_; + my(@rooms) = $room; + @rooms = ($room, $secroom) if $room ne $secroom; + foreach my $theroom (@rooms) { + open MSGFILE, ">>data/msgs/$theroom"; + print MSGFILE '!<;' . time . "<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$theroom"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$theroom/$_"; + } + } + &log($msg2post) if $room eq $standardroom; +} +sub post_prv { + my($alias2post, $msg2post) = @_; + my $roomofalias = &get_room($alias2post); + return 'false' if not $roomofalias; + open MSGFILE, ">>data/msgs/$roomofalias"; + print MSGFILE "$alias2post<;" . time . "<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$roomofalias"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$roomofalias/$_"; + } + return 'true'; +} +sub post_strmsg { + my($alias, $room, $command, $action) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . "<;$command<;$action<;!<;!<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} + +1; diff --git a/0.7.6/modules/shared.pm b/0.7.6/modules/shared.pm new file mode 100644 index 0000000..f68cc80 --- /dev/null +++ b/0.7.6/modules/shared.pm @@ -0,0 +1,338 @@ +sub reload_html { + print "<html><body bgcolor='$chatbg'></body></html>"; + $client->shutdown(2); + exit 0; +} +sub printfile { + my($file2print, $pagetitle, $bodyclass) = @_; + &start_html($pagetitle, $bodyclass) if $pagetitle ne ''; + &menu unless $bodyclass eq 'blank'; + open FILE2PRINT, "<$file2print"; + print "$_\n" while defined($_ = <FILE2PRINT>); + close FILE2PRINT; +} +sub start_html { + print "<html><head><title>$title - $_[0]</title>$_[2]"; + &style; + print '</head>'; + if ($_[1] eq 'start') { + print '<body onload="document.login.alias.focus();">'; + } + elsif ($_[1] ne '') { + print "<body class=$_[1]>"; + } + else { + print '<body>'; + } +} +sub log { + my $msg2log = $_[0]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + my $js; + ($msg2log, $js) = split(/<script/, $msg2log, 3); + open LOG, ">>data/logs/$days.$months.$years"; + print LOG "<br><font color=ffffef><i>($hours:$mins:$secs)</i></font> $msg2log\n"; + close LOG; +} +sub timestring { + my($mins, $hours) = (localtime)[1, 2]; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + return "$hours:$mins"; +} +sub timearray { + my($secs, $mins, $hours, $days, $months, $years) = (localtime)[(0, 1, 2, 3, 4, 5)]; + $months += 1; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + $secs = '0' . $secs if $secs < 10; + $days = '0' . $days if $days < 10; + $months = '0' . $months if $months < 10; + $years = $years - 100; + if ($years < 10) { + $years = '200' . $years; + } + else { + $years = '20' . $years; + } + return $secs, $mins, $hours, $days, $months, $years; +} +sub error { + my $error_msg = $_[0]; + &start_html("Error: ($error_msg)"); + print $q->div("Error: ($error_msg)"), $q->end_html; + open ERROR, '>>data/error'; + print ERROR "Alias: $alias TempID: $tmpid File. $0 PID: $$ Time: " . time . " Message: $error_msg \n"; + close ERROR; + $client->shutdown(2) if $client; + exit 0; +} +sub check_online { + open PROVE, '>data/online/prove'; + print PROVE time; + close PROVE; + opendir DIR, 'data/online/rooms'; + my(@roomdir) = readdir DIR; + closedir DIR; + foreach my $theroom (@roomdir) { + opendir DIR, "data/online/rooms/$theroom"; + my(@roomusers) = readdir DIR; + closedir DIR; + my $empty = 1; + foreach $user (@roomusers) { + if (-f "data/online/rooms/$theroom/$user") { + $empty = 0; + open USER, "<data/online/rooms/$theroom/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + unlink "data/online/$theroom/$user"; + open USER, "<data/online/users/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + &post($theroom, '<i><font color=ffffff>' . ×tring . " <font color='".&get_ident($user,3)."'>$user</font> hat den Chat verlassen ... </font></i>"); + if ($user ne $alias) { + &rm_alias($user, $theroom); + } + else { + unlink "data/online/rooms/$theroom/$user"; + } + } + } + } + } + opendir PIDS, "data/online/pids/$theroom"; + my(@pids) = readdir PIDS; + closedir PIDS; + if ($empty == 1) { + rmdir "data/online/rooms/$theroom"; + unlink "data/online/rstat/$theroom"; + unlink "data/online/rstat/$theroom.away"; + unlink "data/msgs/$theroom"; + foreach $_ (@pids) { + unlink "data/online/pids/$theroom/$_" if -f "data/online/pids/$theroom/$_"; + } + rmdir "data/online/pids/$theroom"; + } + } +} +sub rm_if_loggedin { + my $alias = shift; + my $room = &get_room($alias); + while ($room ne undef) { + &rm_alias($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$user</font> hat den Chat verlassen ... </font></i>"); + $room = &get_room($alias); + } +} +sub secure_checkid { + my($alias2check, $tmpid) = @_; + &error("Falsche TempID! $tmpid") unless -f "data/online/tmpid/$alias.$tmpid"; +} +sub rm_alias { + my($alias, $room) = @_; + unlink "data/online/rooms/$room/$alias"; + unlink "data/online/users/$alias"; + opendir TMPID, 'data/online/tmpid'; + my(@tmpid) = readdir TMPID; + close TMPID; + foreach $_ (@tmpid) { + unlink "data/online/tmpid/$_" if /^$alias\..+$/; + } + unlink "data/online/ident/$alias"; + &rm_rstat($alias, $room); +} +sub rm_rstat { + my($alias, $room) = @_; + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + my(@rstat2) = ($rstat[0], $rstat[1]); + for ($i = 2; $i <= $#rstat; ++$i) { + chomp $rstat[$i]; + push @rstat2, $rstat[$i] . "\n" unless $rstat[$i] =~ /^$alias<;/; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT @rstat2; + close RSTAT; +} +sub rm_away { + my($alias, $room) = @_; + open AWAY, "<data/online/rstat/$room.away"; + my(@away) = <AWAY>; + close AWAY; + my @away2; + foreach $_ (@away) { + my(@split) = split(/<;/, $_, 0); + push @away2, $_ if $alias ne $split[0]; + } + open AWAY, ">data/online/rstat/$room.away"; + print AWAY @away2; + close AWAY; +} +sub rm_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + my @new; + foreach $_ (@entry) { + push @new, $_ if $entry . "\n" ne $_; + } + if (@entry != @new) { + open ENTRY, ">data/$file"; + print ENTRY @new; + close ENTRY; + return 1; + } + else { + return; + } +} +sub add_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + foreach $_ (@entry) { + chomp $_; + return if $entry eq $_; + } + open ENTRY, ">>data/$file"; + print ENTRY $entry . "\n"; + close ENTRY; + return 1; +} +sub prove_color { + my($alias, $color) = @_; + my $length = length $color; + if ($length > 6 or $length < 6) { + &post_prv($alias, "<font color=ffffff>Ung\374ltige Hexadezimalfarbe.</font>"); + &reload_html; + } +} +sub kill_alias { + my($alias2kill, $alias) = @_; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + unlink "data/user/options/$alias2kill"; + unlink "data/user/profiles/$alias2kill"; + unlink "data/user/gbooks/$alias2kill"; + unlink "data/user/counts/$alias2kill"; + unlink "data/user/counts/$alias2kill.online"; + unlink "data/user/lastlogin/$alias2kill"; + unlink "data/user/memos/$alias2kill"; + &rm_entry($alias2kill, 'ban'); + open DEL, '>>data/kill'; + print DEL "($days.$months.$years $hours:$mins:$secs) $alias2kill wurde von $alias gekillt\n"; + close DEL; +} +sub random_color { + my(@digit) = ('F', 'C', 'A', 'B', (5, 6, 7, 8, 9)); + my $dig1 = rand @digit; + my $dig2 = rand @digit; + my $dig3 = rand @digit; + my $dig4 = rand @digit; + my $dig5 = rand @digit; + my $dig6 = rand @digit; + return $digit[$dig1] . $digit[$dig2] . $digit[$dig3] . $digit[$dig4] . $digit[$dig5] . $digit[$dig6]; +} +sub url_decode { + my $t = shift @_; + $t =~ s[/][]; + $t =~ tr/+/ /; + while ($t =~ s/%([a-f0-9][a-f0-9])/chr hex $1;/ie) { + (); + } + return $t; +} +sub url_encode { + my $t = shift @_; + while ($t =~ s/([^\w()'*~!.-])/sprintf '%%%02x', $1;/eg) { + (); + } + return $t; +} +sub calculate_hpm { + my($hits, $starttime) = @_; + return sprintf('%.2f', $hits / ((time - $starttime) / 60)); +} +sub calculate_uptime_hours { + my $starttime = shift @_; + return sprintf('%.2f', (time - $starttime) / 3600); +} +sub private_javascript { + my($alias, $room, $javascript) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . qq[<;!<;!<;<script language="JavaScript">$javascript</script><;\n]; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} +sub get_theme { + my $room = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + return '<b>Raumthema:</b>' . $rstat[1] if $rstat[1] ne undef; +} +sub get_room { + my $alias = shift @_; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $room (@dir) { + opendir DIR, "data/online/rooms/$room"; + my(@chatter) = readdir DIR; + closedir DIR; + foreach my $chatter (@chatter) { + return $room if $chatter eq $alias; + } + } + return undef; +} +sub get_ident { + my ($alias,$line) = @_; + open IDENT, "data/online/ident/$alias"; + my (@ident) = <IDENT>; + close IDENT; + chomp $ident[$line]; + return $ident[$line]; +} +sub get_online_users { + my @dir = &diropen('data/online/rooms'); + my @users; + + foreach my $room (@dir) { + next if $room =~ /\./; + my @room = &diropen("data/online/rooms/$room"); + + foreach (@room) { + push @users, $_ unless /\./; + } + } + return @users; +} +sub diropen { + my $dir = shift; + + opendir DIR, $dir; + my @dir = readdir(DIR); + closedir(DIR); + + return @dir; +} +sub debug { + open DEBUG, '>data/debug'; + while (@_) { + chomp $_; + print DEBUG "$_\n"; + } + close DEBUG; +} +1; diff --git a/0.7.6/modules/start.pm b/0.7.6/modules/start.pm new file mode 100644 index 0000000..3f0e435 --- /dev/null +++ b/0.7.6/modules/start.pm @@ -0,0 +1,252 @@ +sub start { + if ($var eq 'create_alias_html') { + &create_alias_html; + } + elsif ($var eq 'create_alias') { + &create_alias; + } + elsif ($var eq 'login_html') { + &login_html; + } + elsif ($var eq 'chatiquette_html') { + &chatiquette_html; + } + elsif ($alias eq '') { + &login_html; + } + else { + &checklogin; + } +} +sub login_html { + &check_online; + my $counter = undef; + open COUNT, '<data/count'; + $counter = <COUNT>; + close COUNT; + ++$counter; + open COUNT, '>data/count'; + flock COUNT, 2; + print COUNT $counter; + close COUNT; + + my(@users) = &get_online_users; + + opendir REGISTRED, 'data/user/options'; + my(@registred) = readdir REGISTRED; + closedir REGISTRED; + + my($logtin, $users) = ($#users + 1, $#registred - 1); + &start_html("Created & Copyright by Paul C. B\374tow", 'start'); + print qq[ <center>\n <table width=500>\n <tr>\n <td>\n <center>\n <table>\n <tr>\n <td>\n <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=240 HEIGHT=240>\n <param name=movie value="$gfxpath/yIntro.swf">\n <param name=loop value=false>\n <param name=menu value=false>\n <param name=quality value=high>\n <param name=scale value=noborder>\n <param name=wmode value=opaque>\n <param name=bgcolor value=$bgcolor>\n <embed src="$gfxpath/yIntro.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=240 HEIGHT=240 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </object>\n </td>\n <td>\n <div>\n yChat: Version $version\n <br><br>\n Letztes Update: $datum\n <br><br>\n Seitenaufrufe: $counter\n <br><br>\n Benutzer registriert: $users\n <br><br>\n Benutzer online: $logtin\n <br><br>\n Benutzerlimit: $limit\n <br><br>\n Page: <a href="http://www.yChat.org">www.yChat.org</a>\n <br><br><a href="http://www.webchat.de" target="_new"> <img src="http://www.webchat.de/webchat.gif" alt="[webchat]" title="[webchat]" border="0"></a><br>\n<img src="http://stats.topwebmaster.net/extern/de/snooper"></div></td>\n </tr>\n </table>\n </center>\n </div>\n <br>\n <br>\n]; + if ($tmp eq 'true') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Wahrscheinlich existiert Dein Alias "$alias" nicht,\n <br>\n Du hast Dich verschrieben oder das Passwort ist falsch.\n <br>\n Versuch es erneuert !\n </div>\n]; + } + elsif ($tmp eq 'quit') { + print qq[ <div>\n Du hast soeben den Chat verlassen.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autologout') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autokick') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat katapultiert. Grund: Du hast den Chat geflutet!\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'banned') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest aus dem Chat verbannt!!!\n <br>\n Z.z. kannst Du Dich leider nicht in den Chat einloggen.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'kick') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat katapultiert!\n <br>\n Schlechtes Verhalten mag die Ursache hierf\374r sein.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'selfkill') { + print qq[ <div>\n Du hast dich soeben ganz und gar aus dem System gel\366scht!\n <br>\n Wenn du dir einen neuen Nick angelen willst, dann einfach auf "Registrieren" klicken! :-)\n </div>\n]; + } + elsif ($tmp eq 'selfkill') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat ausgeloggt!\n <br>\n Ursache hierf\374r mag sein, da\337 der Chat voll war und Du Dich nicht am\n Geschehen beteiligt- und unn\366tige Chatkapazit\344ten in Anspruch\n genommen hast.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'full') { + print "<div class=b>ACHTUNG!</div><div>Der Chat ist leider voll! Bitte versuch Dich sp\344ter noch mal einzuloggen!</div>"; + } + elsif ($var eq 'create_alias') { + print q[<div>Du hast sich soeben in die Datenbank eingetragen. Einfach auf "Los Geht's" klicken :-)</div>]; + } + else { + print qq[ <div>\n Herzlich willkommen!\n <br>\n Einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + print qq[ <hr>\n <form name="login" action="chat" method="GET">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="tmp" value="true">\n <table>\n <tr>\n <td>\n <div>\n Dein Alias:\n <br>\n <input name="alias" value="$alias">\n </div>\n </td>\n <td>\n <div>\n Dein Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n </td>\n </tr>\n </table>\n <br>\n <br>\n <div>\n Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken!\n </div>\n <br>\n <table>\n <tr>\n <td>\n <font color="ffffff">\n <input type="submit" value="Los geht's!">\n </font>\n </form>\n </td>\n <td>\n <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias_html">\n <font color="ffffff">\n <input type="submit" value="Registrieren">\n </font>\n </form>\n </td>\n </tr>\n </table>\n <hr>\n]; + if ($logtin > 0) { + print q[<div>Folgende Personen sind eingeloggt:<br><font size='1'>]; + foreach $_ (@users) { + print "$_ " if -f "data/online/users/$_"; + } + print '</font></div>'; + } + print " </td>\n </tr>\n </table>\n </center>\n</body>\n</html>\n"; + unless (-d 'data/online/rooms') { + mkdir 'data/online/rooms', 511; + } +} +sub create_alias_html { + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq 'ip://' . $client->peerhost) { + $tmp = 'banned'; + &login_html; + $client->shutdown(2); + exit 0; + } + } + my $reload = $_[0]; + &start_html('Registration'); + print " <center>\n <table width=500>\n <tr>\n <td>\n"; + if ($reload eq 'alias_exists') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Der von Dir gew\344hlte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit\n einem anderen Benutzernamen !\n </div>\n <hr>\n]; + } + elsif ($reload eq 'pw_wrong') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Deine beiden Passworteingaben stimmen nicht \374berein. Bitte geb das Passwort erneuert an um sicherzugehen, da\337\n kein falsches Passwort abgespeichert wird !\n </div>\n <hr>\n"; + } + elsif ($reload eq 'alias_prohibited') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt illegale Zeichen. Bitte versuch einen anderen Benutzernamen!\n </div>\n <hr>\n]; + } + elsif ($reload eq 'alias_length') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!\n </div>\n <hr>\n]; + } + else { + print " <div>\n Hier kannst Du Dich registrieren. Bitte beachte, da\337 die Passworteingabefelder \374bereinstimmen!\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias">\n <div>\n Dein Alias:\n <font color="ffa500">\n (Mu\337 angegeben werden)\n </font>\n <br>\n <input name="alias" VALUE="$alias">\n </div>\n <br>\n <div>\n Dein gew\374nschtes Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n <br>\n <div>\n Geb hier Dein Passwort erneuert ein:\n <br>\n <input type="password" name="tmp">\n </div>\n <br>\n <font color=ffffff>\n <input type="submit" value="Registrieren">\n </font>\n <br>\n </form>\n <hr>\n <div>\n Um den Chat zu betreten m\374ssen die Daten nach der Registration auf der Startseite erneuert best\344tigt werden !\n </div>\n </td>\n </tr>\n </table>\n</center>\n</body>\n</html>\n]; +} +sub checklogin { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + closedir USERS; + my $users = $#users; + if ($users > $limit && 3 > &hierachie($alias)) { + $tmp = 'full'; + &login_html; + $client->shutdown(2); + exit 0; + } + my $lognotexists = 'true'; + opendir USERDIR, 'data/user/options'; + my(@userdir) = readdir USERDIR; + closedir USERDIR; + foreach $user (@userdir) { + if ($user eq $alias) { + open OPTIONS, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + foreach $_ (@options) { + chomp $_; + } + if ($options[0] eq $pw) { + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq $alias or $_ eq 'ip://' . $client->peerhost) { + if (-f "data/online/users/$admin") { + &post_prv($admin, "<font color=ffffff><font color=ffa500>$_</font> kann sich nicht einloggen (Ist verbannt)!!</font>"); + } + $tmp = 'banned'; + &login_html; + $client->shutdown(2); + exit 0; + } + } + if ($options[1] eq undef) { + $col = &random_color; + } + else { + $col = $options[1]; + } + if ($options[2] eq undef) { + $secol = &random_color; + } + else { + $secol = $options[2]; + } + if ($options[3] eq undef) { + $maxVerlauf = '10'; + } + else { + $maxVerlauf = $options[3]; + } + if ($options[4] eq undef) { + $verlaufOrder = '1'; + } + else { + $verlaufOrder = $options[4]; + } + &rm_if_loggedin($alias); + my(@digit) = (('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'), ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'), (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), '-', '.'); + my $num1 = rand @digit; + my $num2 = rand @digit; + my $num3 = rand @digit; + my $num4 = rand @digit; + my $num5 = rand @digit; + my $num6 = rand @digit; + my $num7 = rand @digit; + my $num8 = rand @digit; + my $num9 = rand @digit; + my $num10 = rand @digit; + $tmpid = $digit[$num1] . $digit[$num2] . $digit[$num3] . $digit[$num4] . $digit[$num5] . $digit[$num6] . $digit[$num7] . $digit[$num8] . $digit[$num9] . $digit[$num10]; + open TMPID, ">data/online/tmpid/$alias.$tmpid"; + print TMPID $alias; + close TMPID; + open IDENT, ">data/online/ident/$alias"; + print IDENT $client->peerhost . "\n$tmpid\n" . $client->peerhost . ':' . $client->peerport . "\n$col\n$secol"; + close IDENT; + open LASTLOGIN, ">data/user/lastlogin/$alias"; + print LASTLOGIN time; + close LASTLOGIN; + &frameset_html; + $client->shutdown(2); + exit 0; + } + else { + $lognotexists = 'false'; + } + } + } + &login_html; +} +sub create_alias { + if ($alias =~ /\W/ or $alias eq '') { + goto CREATE if $alias =~ /[-]/ and not $alias =~ /\W/; + &create_alias_html('alias_prohibited'); + $client->shutdown(2); + exit 0; + } + elsif ($pw ne $tmp) { + &create_alias_html('pw_wrong'); + $client->shutdown(2); + exit 0; + } + elsif (length $alias >= 15) { + &create_alias_html('alias_length'); + $client->shutdown(2); + exit 0; + } + CREATE: opendir USERDIR, 'data/user/options'; + my(@user) = readdir USERDIR; + close USERDIR; + foreach $user (@user) { + if ($user eq $alias) { + &create_alias_html('alias_exists'); + $client->shutdown(2); + exit 0; + } + } + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $pw . "\n"; + close OPTIONS; + &login_html; +} +sub frameset_html { + print qq[<html>\n <head>\n <title>\n $title\n </title>\n </head>\n<frameset border=0 frameborder=0 framespacing=0 cols="130,*">\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name="online" src="chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid">\n <frameset border=0 frameborder=0 framespacing=0 cols="70,*">\n <frame name="logo" src="chat?request=htdocs&var=logo_html" scrolling="no">\n <frame name="reload" src="chat?request=htdocs" scrolling="no">\n </frameset>\n </frameset>\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name='main' src='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder'>\n <frame name="input" src="chat?request=htdocs" scrolling="no">\n </frameset>\n</frameset>\n</html>\n]; +} +1; diff --git a/0.7.6/modules/statistic.pm b/0.7.6/modules/statistic.pm new file mode 100644 index 0000000..a0aad73 --- /dev/null +++ b/0.7.6/modules/statistic.pm @@ -0,0 +1,148 @@ +sub statistic { + &start_html('Statistiken'); + &menu; + print $q->div('yChat Statistiken'), $q->hr, $q->div($q->a({-'href', "chat?request=statistic&var=ranking&alias=$alias&tmpid=$tmpid"}, 'Rankings'), ' | ', $q->a({-'href', "chat?request=statistic&var=del&alias=$alias&tmpid=$tmpid"}, 'Loginstatistiken'), ' | ', $q->a({-'href', "chat?request=statistic&var=statistic&alias=$alias&tmpid=$tmpid"}, 'DB-Statistik'), ' | ', $q->a({-'href', "chat?request=statistic&var=var&alias=$alias&tmpid=$tmpid"}, 'Umgebungsvariablen')), $q->hr; + if ($var eq 'ranking') { + opendir COUNTS, 'data/user/counts'; + my(@counts) = readdir COUNTS; + closedir COUNTS; + print '<div>'; + my $nr_start = $start; + my $nr_end = $end; + my %online; + my $rank; + my $nr; + foreach $_ (@counts) { + if (-f "data/user/counts/$_") { + if (s/.online//g) { + open TOTAL, "<data/user/counts/$_.online"; + my $total = <TOTAL>; + close TOTAL; + $online{sprintf '%.2f', $total / 3600} = $_; + } + } + } + print '<div>', $q->b('Rankings:'), $q->br, '<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>'; + if (not $nr_start) { + $nr_start = 1; + } + if (not $nr_end) { + $nr_end = 20; + } + foreach $wert (reverse (sort { $a <=> $b } keys %online)) { + ++$nr; + if ($online{$wert} eq $alias) { + $rank = $nr; + last if $nr > $nr_end; + } + next if ($nr < $nr_start or $nr > $nr_end); + print q[<tr><td><font color='ffffff' size='1' face='arial'>] . $nr . q[</font></td><td><font color='ffffff' size='1' face='arial'> ] . $wert . "h </font></td><td> <a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n"; + } + print '</table>', $q->hr; + $nr_start -= 20; + $nr_end -= 20; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" if $nr_start > 0; + $nr_start += 40; + $nr_end += 40; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...", $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>"); + } + elsif ($var eq 'del') { + print '<div>', $q->b('Alte Benutzer löschen:'), $q->br, "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gel\366scht.", $q->br, $q->br; + opendir USER, 'data/user/options'; + my(@user) = readdir USER; + closedir USER; + @user = sort(@user); + my $i = 0; + my $j; + my $k = 0; + my $l = 0; + my $full = $tmp; + foreach $_ (@user) { + if (-f "data/user/lastlogin/$_") { + open LOGIN, "<data/user/lastlogin/$_"; + my $login = <LOGIN>; + close LOGIN; + $login = sprintf('%.2f', (time - $login) / 3600); + ++$j; + if (999 < $login and $login < 1440) { + ++$k; + print $q->font({-'color', 'ffa500'}, $q->b("$j($k) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 48) { + ++$l; + print $q->font({-'color', 'ffffef'}, $q->b("$j($l) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 1440) { + print "$j $_ Letztes Login vor: " . $login . 'h', $q->br, "\n" if $full ne undef; + } + else { + ++$k; + &kill_it($_, $i++, $login); + } + } + elsif (-f "data/user/options/$_") { + &kill_it($_, $i++); + } + } + print $q->hr if $full ne undef; + print '</div>', $q->div($q->b("$j Benutzer befinden sich in der Datenbank!", $q->br, $q->font({-'color', 'ffffef'}, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br, $q->font({-'color', 'ffa500'}, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br, $q->font({-'color', 'ff0000'}, "$i Benutzer wurden gerade eben gel\366scht!")), $q->br, $q->br, 'PS: Jeder registrierte Benutzername wird nur einmal gezählt!'); + print $q->br, $q->div('(', $q->a({-'href', "chat?request=statistic&var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, 'Vollständige Ansicht'), ')') if $full eq undef; + } + elsif ($var eq 'var') { + print '<div>', $q->b('Server Umgebungsvariablen:'), $q->br, $q->br, 'Die Serverumgebungsvariablen können nur von Oberwächtern oder höher eingesehen werden!', $q->br, $q->br; + if (7 <= &hierachie($alias)) { + while (($key, $value) = each %ENV) { + print "$key = $value\n", $q->br; + } + } + print '</div>'; + } + elsif ($var eq 'statistic') { + print $q->div($q->b('yChat-DB Statistik:')), $q->br; + $files = 0; + $size = 0; + $directorys = 1; + &zaehle('data'); + $size = sprintf('%.2f', $size / 1048576); + print $q->div("Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys"); + } + print $q->end_html; +} +sub zaehle { + local($dir, $data) = @_; + $dir = "$dir/$data" if $data ne undef; + opendir DATA, $dir; + local(@data) = readdir DATA; + closedir DATA; + $files2 = 0; + foreach $_ (@data) { + if (-f "$dir/$_") { + ++$files; + ++$files2; + $size += -s "$dir/$_"; + } + elsif (-d "$dir/$_" and $_ ne '.' and $_ ne '..') { + ++$directorys; + &zaehle($dir, $_); + } + } +} +sub kill_it { + my($rm, $nr, $login) = @_; + $login = 'XXXXXX' if $login eq undef; + print $q->font({-'color', 'ff0000'}, $q->b("$j($nr) $rm Letztes Login vor: " . $login . 'h (wurde gelöscht)')), $q->br, "\n"; + print q[<font size='1'>]; + print 'options ' if unlink "data/user/options/$rm"; + print 'profiles ' if unlink "data/user/profiles/$rm"; + print 'gbooks ' if unlink "data/user/gbooks/$rm"; + print 'counts ' if unlink "data/user/counts/$rm"; + print 'counts.online ' if unlink 'data/user/counts/' . $rm . '.online'; + print 'lastlogin ' if unlink "data/user/lastlogin/$rm"; + print 'memos' if unlink "data/user/memos/$rm"; + print '</font>', $q->hr, "\n"; + &zeit; + open DEL, '>>data/kill'; + print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n"; + close DEL; +} +1; diff --git a/0.7.6/modules/stream.pm b/0.7.6/modules/stream.pm new file mode 100644 index 0000000..2885d8b --- /dev/null +++ b/0.7.6/modules/stream.pm @@ -0,0 +1,170 @@ +sub stream { + unlink "data/online/rooms/$loginplace/$alias"; + &secure_checkid($alias, $tmpid); + my $pid = $$; + $SIG{'CHLD'} = 'IGNORE'; + ++$|; + print qq[<html>\n <head>\n<script language="JavaScript">\n<!--\n open('chat?request=online&room=$room&alias=$alias&tmpid=$tmpid','online');\n open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// Scroll-Routine von Anklepper (http://www.anklepper.de)\n// speziell f\374r yChat (http://www.yChat.de), Copyright 2000\nscrolling = true;\nmoves_steps = 4;\nmoves_interval = 4;\nfunction moves()\n{\n if( scrolling != false )\n window.scrollBy( 0, moves_steps );\n window.setTimeout( "moves()", moves_interval );\n}\nmoves();\n//-->\n</script>\n</head>\n<body bgcolor="$chatbg">\n]; + &check_online; + print "<font size=1 color=ffffff face=arial>$title - Letzte Änderung $datum\n; Der Chat wird geladen...\n<br>"; + sleep 1; + print "<b>Hallo <font color=$col>$alias</font></b>, mit dem Befehl /menu kannst du das Chat-Menü aufrufen!<br>"; + sleep 1; + print "Du befindest dich im Raum <b>$room</b>: " . get_theme($room) . "<br>\n"; + print "</font>\n"; + + if (-f "data/user/memos/$alias") { + open MEMOS, "<data/user/memos/$alias"; + my(@memos) = <MEMOS>; + close MEMOS; + my $memos; + foreach $_ (@memos) { + $memos .= $_; + } + print $memos; + unlink "data/user/memos/$alias"; + } + + my ($change_room, + $startime, + $flooding, + @ignore, + @flood); + + OPENMSGFILE: + $change_room = 0; + $startime = time; + $flooding = 0; + unless (-f "data/online/rstat/$room") { + open DATEI, ">data/online/rstat/$room"; + print DATEI "0\n\n$alias<;1\n"; + close DATEI; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + if (-e "data/msgs/$room") { + open MSGFILE, "<data/msgs/$room"; + mkdir 'data/online/pids', 511 unless -d 'data/online/pids'; + mkdir "data/online/pids/$room", 511 unless -d "data/online/pids/$room"; + open PID, ">data/online/pids/$room/$pid"; + print PID time; + close PID; + } + else { + sleep 1; + goto OPENMSGFILE; + } + &sendmsgs; + while (-f "data/online/users/$alias") { + local $SIG{'USR1'} = \&sendmsgs; + goto OPENMSGFILE if $change_room == 1; + unlink "data/online/rooms/$loginplace/$alias" + if (-f "data/online/rooms/$loginplace/$alias"); + sleep 15; + print "\n"; + } + sub sendmsgs { + for ($curpos = tell MSGFILE; defined($_ = <MSGFILE>); $curpos = tell MSGFILE) { + my($address, $stamp, $command, $action, $message, $from) = split(/<;/, $_, 7); + if ($address =~ /$\!/ or $address eq $alias) { + if ($stamp > $startime) { + if ($command eq 'col') { + ($col, $secol) = split(/;/, $action, 3); + } + elsif ($command eq 'cr') { + unlink "data/online/pids/$room/$pid"; + $room = $action; + close MSGFILE; + $change_room = 1; + } + elsif ($command eq 'ig') { + my @temp; + my $add2list = 1; + foreach $_ (@ignore) { + if ($action ne $_) { + push @temp, $_; + } + else { + $add2list = 0; + } + } + if ($add2list == 1) { + push @ignore, $action; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias ignoriert!</font>"); + } + else { + @ignore = @temp; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun nicht mehr ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias nicht mehr ignoriert!</font>"); + } + } + elsif ($command eq 'igl') { + my $ignored; + foreach $_ (@ignore) { + $ignored .= "$_ "; + } + if ($#ignore == -1) { + print "<font color='#ffffff'>Momentan wird keine Person von dir ignoriert!</font><br>\n"; + } + else { + print "<font color='#ffffff'>Folgende Personen werden von dir ignoriert: <font color='#ffa500'>$ignored</font>!</font><br>\n"; + } + } + elsif ($command eq 'quit') { + print "<script language='JavaScript'>\n"; + print "open('chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid','online');\n"; + print "open('chat?request=htdocs','input');\n"; + print "open('chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');\n"; + print "</script>\n"; + last; + } + elsif ($change_room != 1) { + my $ignored = 0; + foreach $_ (@ignore) { + if ($_ eq $from) { + $ignored = 1; + last; + } + } + if ($ignored != 1) { + print "$message\n"; + } + else { + $address =~ s/!//; + &post_prv_extra($from, "<font color='#ff0000'>Du wirst von $alias ignoriert!</font>") if $address eq $alias; + } + } + push @flood, $address . $command . $action . $message . $from; + if ($flood[0] eq $flood[1] and $flood[0] eq $flood[2] and $flood[0] eq $flood[3]) { + print "<i><font color=red>$from flutet den Chat !</font></i><br>\n"; + if ($from eq $alias and $flooding++ and $flooding >= 4) { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='ffa500'><b>Das System</b></font> katapultiert <font color='".&get_ident($alias,3)."'>$alias</font>> wegen Fluten des Chats nach draussen ... </font></i>", $alias); + print "<script language='JavaScript'>open('chat?request=start&tmp=autokick','_top');</script>\n"; + &rm_alias($alias, $room); + } + } + else { + $flooding = 0; + } + shift @flood if $#flood > 2; + } + } + } + seek MSGFILE, $curpos, 0; + } + unlink "data/online/pids/$room/$pid"; +} +sub post_prv_extra { + my($alias, $message) = @_; + my $helpid = fork; + if ($helpid == 0) { + &post_prv($alias, $message); + exit 0; + } +} +1; diff --git a/0.7.6/modules/webchat.pm b/0.7.6/modules/webchat.pm new file mode 100644 index 0000000..90f8731 --- /dev/null +++ b/0.7.6/modules/webchat.pm @@ -0,0 +1,22 @@ +sub webchat { + my @rooms = &diropen('data/online/rooms'); + my $output; + + foreach my $room (@rooms) { + next if ($room =~ /\./); + my @users = &diropen("data/online/rooms/$room") or print "$!\n"; + + foreach my $user (@users) { + next if ($user =~ /\./); + open FILE, "data/online/rooms/$room/$user"; + my $timestamp = <FILE>; + close FILE; + chomp $timestamp; + + $output = $output . "($user)($timestamp)($room)\n"; + } + } + + print $output; +} +1; diff --git a/0.7.6/setup.sh b/0.7.6/setup.sh new file mode 100644 index 0000000..342e9c7 --- /dev/null +++ b/0.7.6/setup.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +mke2fs /dev/ram0 +mke2fs /dev/ram1 + +mkdir data +cd data +mkdir {logs,msgs,user,online} +mount /dev/ram0 msgs +mount /dev/ram1 online +cd user +mkdir {counts,memos,options,profiles,gbooks,lastlogin} +cd ../online +mkdir {rstat,rooms,pids,users,ident,tmpid} +cd .. +cdhmod 777 * -R +chown paul * -R + diff --git a/0.7.6/templates/chatiq.sno b/0.7.6/templates/chatiq.sno new file mode 100644 index 0000000..2a024f5 --- /dev/null +++ b/0.7.6/templates/chatiq.sno @@ -0,0 +1 @@ +<div><h2>Chatiquette</h2></div><hr><div>Hier einige Grundlagen ...</div><style type="text/css"> li { color: #ffffff }</style><ul><li><div>Vergiss nie, dass am anderen Ende auch nur Menschen sitzen. Diese mögen es gar nicht, angepöbelt, beleidigt oder in sonstiger Weise angegriffen zu werden.</div></li><li><div>Störend ist auch immer, wenn ein privater Streit im Chat ausgetragen wird. Tragt eure privaten Sachen ausserhalb des Chats aus.<br>Selbst wenn es nur Spass ist - weiss der Rest im Chat das?</div></li><li><div>Dauergeschrei fällt auch immer wieder störend auf. Was in Grossbuchstaben geschrieben wird, wird als Schreien bezeichnet.</div></li><li><div>Unsere ganz besonderen Spezialisten wollen auch immer wieder rausfliegen. Um das zu erreichen, senden sie die ganze Zeit Unsinn.</div></li><li><div>Diskussionen sind dagegen kein Problem. Dafür ist ein Chat ja da. Sobald allerdings das Thema der Diskussion zu sehr entgleist, sollte die Diskussion in einen etwas weniger öffentlichen Raum verlegt werden.</div></li></ul><div>Daraus ergeben sich folgende Regeln:</div><ul><li><div>keinen beleidigenden Wortschatz verwenden</div></li><li><div>obzöner und verfassungsfeindlicher Wortschatz fällt auch weg</div></li><li><div>streitet euch woanders oder in einem privaten Raum</div></li><li><div>schreit nich so viel</div></li><li><div>schreibt keinen Unsinn, der so aussieht, als ob eure Katze über die Tastatur gelaufen ist</div></li><li><div>schreibt nicht zu schnell hintereinander, besonders nicht dasselbe</div></li><li><div>verlagert die Diskussion, wenn sich jemand gestört fühlt</div></li><li><div>Diese Liste ist nicht vollständig. Mit dem gesunden Menschenverstand sollte es eigentlich möglich sein, sich die nicht aufgeführten Punkte zu denken.</div></li></ul><div>So - nach den ganzen "lass-es-bessers" noch ein paar Überlebenstips:</div><ul><li><div>beachte die oben stehenden Punkte ;-)</div></li><li><div>es macht sich immer gut, beim Reinkommen mal zu grüssen</div></li><li><div>warte nicht, bis man/frau dich anspricht - werde selbst aktiv und gib deinen Senf dazu</div></li><li><div>es gibt meist kein allgemein anerkanntes Gesprächsthema - lies dich einfach rein</div></li><li><div>die frage "wer will chatten" ist eigentlich überflüssig in einem Chat (wir warten doch alle nur aufs Ufo ;-)</div></li><li><div>fang nich sofort mit den W-Fragen (woher, wie alt, weiblich oder männlich?) an - es stört einige Leute</div></li></ul><div>Problematisch für die Wächter und Oberwächter ist:</div><ul><li><div>"der nervt mich - schmeiss den mal raus" ist oft nicht nachvollziehbar, weil der WÄ oder OW die Vorgeschichte - die vielleicht ausserhalb des yChat stattgefunden hat - nicht kennt oder keinen Beweis dafür hat.</div></li></ul><hr><div><h2>Richtlinien für den gestressten WÄ und OW:</h2></div><ul><li><div>Du hast die Macht - aber mißbrauche sie nicht!</div></li><li><div>Leute, die ganz offensichtlich stören wollen und dabei den Chatbetrieb massiv behindern, sofort rausschmeissen! Kriterien dazu:</div><ul><li><div>Fluten des Chats</div></li><li><div>Wiederholung von Parolen</div></li><li><div>Exzessive Nutzung von zufälligen Buchstaben-/Zeichenfolgen</div></li><li><div>usw...</div></li></ul></li><li><div>Bei den anderen vorher noch eine Warnung aussprechen...</div></li><li><div>Nicht vergessen: auch für euch gelten die oben aufgeführten Regeln!</div></li><li><div>Vergabe von Raumbesetzer- und Wächterrechten:<br>(dies gilt für RB-Vergabe in der Cyberbar, WÄ allgemein)</div><ul><li><div>Um RB oder WÄ betteln wird schon mal gar nicht beachtet.</div></li><li><div>Wer WÄ wird, soll sichs verdienen - z.B. durch häufiges Helfen bei Neulingen.</div></li><li><div>Ein WÄ sollte schon öfter im Chat sein.</div></li><li><div>Oberwächter zu werden ist sehr schwierig. Frag gar nicht erst danach ;-)</div></li></ul></ul><div>Wer meint, von einem Wächter oder Oberwächter ungerecht behandelt worden zu sein (z.B. weil dieser wegen persönlichen Streitigkeiten rausschmeisst), richte seine Klage an einen Oberwächter oder direkt an den obersten Boss: Snooper (<a href="mailto:admin@ychat.de">admin@ychat.de</a>).</div>
\ No newline at end of file diff --git a/0.7.6/templates/colors.sno b/0.7.6/templates/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.7.6/templates/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.7.6/templates/help.sno b/0.7.6/templates/help.sno new file mode 100644 index 0000000..e1f6de9 --- /dev/null +++ b/0.7.6/templates/help.sno @@ -0,0 +1,79 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table border=1> +<tr><th><div>SU</div></th><th><div>Befehl</div></th><th><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. Wird gar keine Farbe angegeben, dann wird eine zufällige generiert!</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>/exit</div></td><td><div>Komplett aus dem System ausloggen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/getcol <font color=red>Alias</font></div></td><td><div>Zeigt an welche Farb-Codes <font color=red>Alias</font> zum Chatten verwendet</div></td></tr> +<tr><td><div>NC</div></td><td><div>/hits</div></td><td><div>Zeigt an vor wieviel Stunden der Chat-Server neugestartet wurde und die Hits und Hits per Minute seit dieser Zeit</div></td></tr> +<tr><td><div>NC</div></td><td><div>/ig <font color=red>Alias</font></div></td><td><div>Setzt/entfernt <font color=red>Alias</font> auf/aus die/der Ignorierliste. Wird das Argument weggelassen, so wird die Liste aller ignorierten Personen angezeigt</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>Chat 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>/selfkill</div></td><td><div>Sich selbst ganz und gar aus dem System entfernen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/sep <font color=red>Raumname</font></div></td><td><div>In den Raum <font color=red>Raumnamen</font> wechseln und gleichzeitig absperren</div></td></tr> +<tr><td><div>NC</div></td><td><div>/uptime</div></td><td><div>Siehe Befehl "/hits"</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 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>/banip <font color=red>Alias</font></div></td><td><div>Die IP-Nummer von <font color=red>Alias</font> verbannen</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/rbanip ip://<font color=red>x.x.x.x</font></div></td><td><div>Die IP-Nummer <font color=red>x.x.x.x</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>/img</div></td><td><div>Versteckt/reaktiviert das eigene Superuser-Logo im Online-Frame</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>/o <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird aus dem Chat ausgeloggt!</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/sl <font color=red>Raum</font></div></td><td><div>Einen anderen <font color=ffa500>Raum</font> absperren</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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=red>Raum</font> ein <font color=ffa500>Thema</font > geben</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/status <font color=ffa500>Alias</font></div></td><td><div>Zeigt den Superuserstatus von <font color=ffa500>Alias</font> an</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> +<tr><td><div><font color=green>OW</font></div></td><td><div>/twa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum temporären Wächter ernennen</div></td></tr> +<tr><td><div><font color=green>OW</font></div></td><td><div>/rtwa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom temporären Wächter zum normalen Chatter degradieren</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/cool <font color=red>Nachricht</font></div></td><td><div>Gibt für den aktuellen Raum eine Systemmeldung aus</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/id <font color=red>Alias</font></div></td><td><div>Zeigt TempID von <font color=red>Alias</font> an</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/ow <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Oberwächter ernennen</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/row <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom Oberwächter zum normalen Chatter degradieren</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/pw <font color=red>Alias</font></div></td><td><div>Zeigt das Passwort von <font color=red>Alias</font> an</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 ausgeführt 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 ledeglich 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><br> + Nur Oberwächer können Logdateien der Cyberbar lesen!<br><br> + Oberwächter ernennt nur der Systemadministrator! Dieser wiederum hat weitere spezielle Befehle die geheim sind und die nur ihm + vorbehalten sind und ihm das Administrieren erleichtert. +</div> +</body> +</html> diff --git a/0.7.6/ychatd.pl b/0.7.6/ychatd.pl new file mode 100644 index 0000000..75b6983 --- /dev/null +++ b/0.7.6/ychatd.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl +use CGI; +$q = new CGI; +use config; +use modules::commands; +use modules::changeroom; +use modules::divcom; +use modules::hierachie; +use modules::htdocs; +use modules::input; +use modules::loggedin; +use modules::online; +use modules::postmessage; +use modules::shared; +use modules::start; +use modules::statistic; +use modules::stream; +use modules::webchat; +use IO::Socket; +$SIG{'CHLD'} = 'IGNORE'; +$mainsocket = 'IO::Socket::INET'->new('LocalHost', "$localhost", 'LocalPort', $localport, 'Porto', 'tcp', 'Listen', $limit + 10, 'Reuse', 1); +die "Kann Server-Socket nicht erzeugen: $!\n" unless $mainsocket; +print "yChat wurde auf $localhost:$localport gestartet...\n"; +$STARTIME = time; +while ($client = $mainsocket->accept) { + ++$HITS; + $pid = fork; + if ($pid == 0) { + print $client "HTTP/1.1 200 OK\nContent-type:text/html\n\n"; + while (defined($buffer = <$client>)) { + my $requeststring; + my(@tmp) = split(/\s+/, $buffer, 0); + if ($tmp[0] eq 'GET') { + $requeststring = $tmp[1]; + } + @tmp = split(/\?/, $requeststring, 0); + @tmp = split(/&/, $tmp[1], 0); + my %variables; + foreach $_ (@tmp) { + my(@tmp) = split(/=/, $_, 0); + next if $tmp[0] eq 'admin' or $tmp[0] eq 'mogeladmin'; + $tmp[0] =~ s[/][]; + $variables{$tmp[0]} = &url_decode($tmp[1]); + } + foreach $_ (keys %variables) { + eval "\$$_ = '" . $variables{$_} . q[']; + } + *STDOUT = $client; + if ($request) { + &secure_checkid($alias, $tmpid) if $request != 'start'; + eval "&$request"; + } + else { + &start; + } + $client->shutdown(2); + exit 0; + } + } +} diff --git a/0.8.0/INSTALL.txt b/0.8.0/INSTALL.txt new file mode 100644 index 0000000..ee0cf3b --- /dev/null +++ b/0.8.0/INSTALL.txt @@ -0,0 +1,63 @@ +So wird der Perl yChat Version 0.8.0 installiert: + +1. Die tar.gz Datei in ein beliebiges Verzeichnis entpacken und +dort hineinwechseln. Am besten einen neuen Benutzer yC anlegen +und das Archiv dorthinein entpacken. + +2. In das entpackte Verzeichnis wechseln. Dort finden Sie die +Shell-Datei setup.sh. Öffnen Sie diese und editieren sie dort +den letzten Befehl +chmod yC * -R +so, daß yC durch den Usernamen ersetzt wird, unter dem der yChat +letzendlich gestartet werden soll. + +3. Wenn sie auf dem Server Root-Zugriff haben, dann können sie +den Chat über Ramdisk (schneller) laufen lassen. Wechseln +Sie deshalb den user nach root und führen Sie dann das Shell +Skript mit ./setup.sh aus. +Wenn sie kein Root-Zugriff haben, können sie das Skript +auch ausführen, wobei keine Ramdisks angelegt werden. + +4. Kopieren sie den Unterordner "yC-web-docs" in ein Verzeichnis +auf das öffentlich via HTTP zugegriffen wird (z.B. htdocs +von Apache). + +5. Nun hat das Skript alle Unterverzeichnisse erstellt. Jetzt +müssen Sie die Datei config.pm öffnen und dort die Variablen +$localport, $localhost und $gfxpath editieren. Hierbei setzen +Sie den Localport auf den Port über den der yChat-Server laufen +soll und den Localhost auf die IP-Nummer Ihren Servers. Bei +FX-Path geben sie die URL an, unter der sie auf die Grafiken +via HTTP zugreifen können. + +6. Nun können sie den Chat starten. Dafür geben sie lediglich +ein: +perl ychatd.pl & +Achten sie darauf, daß sie dies nicht als root- sondern als +einen anderen User tun (z.B. user yC den Sie angelegt haben +sollten, wenn Sie sich an meinen Vorschlag gehalten haben). +Wenn Sie den Chat gestartet haben, können sie ihn via einem +beliebigen Webbrowser unter http://ihrlocalhost:ihrlocalport +erreichen. + +7. Wenn sie sich einen Nick registriert haben, können sie sich +zum Administrator machen indem Sie die Datei data/hierachie +anlegen und dort in die erste Zeile folgendes schreiben: +ihrnick<;9 + +Die weiteren Befehle finden sie im Chat wenn sie den Befehl +/menu eingeben und dann auf "Befehle" klicken. + +Bei Fragen Mail an snooper@ychat.de, +MfG, +Paul. + + +PS: Ich werde nicht mehr sehr viel am Perl yChat programmieren. +Geplant ist eine evtl. 0.8.1er Release, in der man nicht mehr +auf die Groß- und Kleinschreibung der Nicks achten muß. + +Des Weiteren programmiere ich ein neues Chat-System, welches +vollständig auf Java basiert. Wenn der Server gerade gehen sollte, +dann ist eine Beta stets unter www.yChat.org einsehbar. Unter +www.yChat.de läuft der Perl yChat weiter. diff --git a/0.8.0/config.pm b/0.8.0/config.pm new file mode 100755 index 0000000..36af482 --- /dev/null +++ b/0.8.0/config.pm @@ -0,0 +1,43 @@ +# yChat - Copyright by Paul C. Bütow +########################### Dieser Teil bestimmt die Standart-Variabeln. +##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.) +########################### +$limit = 50; # Benutzerlimit +$datum = "19.06.02"; # Datum der letzten Änderung (ändern erwünscht) +$version = "0.8.0"; # Bitte Hauptversionsnummer nicht ändern +$title = "yChat [$version]"; # Erscheint in der Browser-Leiste oben +$standardroom = "Cyberbar"; # Standardchatraum +$loginplace = "Lounge"; # Bezeichnung der Startseite nach dem Login +$localhost = "62.75.136.147";# Host oder IP# des Chat-Servers +$localport = 2000; # Port über den fer Chat-Server läuft +$gfxpath = "http://$localhost/yChat"; # URL der Binärdaten (Grafiken etc.) +$bgcolor = "#3E535B"; # Hintergrundfarbe der HTML-Seiten +$chatbg = "#000000"; # Hintergrundfarbe des Chat-Frames +$cryptkey = "kASD73jnS"; # Hiermit wetden die PW's verschlüsselt. + +# PS: Um einen Chat-Administrator anzulegen, dann die Datei data/hierachie +# anlegen, in eine Zeile muß folgendes eingetragen werden: "Nickname<;7" +# (Natürlich ohne Anführungsstriche) Nickname ist somit Chat-Administrator +# und kann Oberwächter und Wächter bestimmen! + +sub style { +print <<ENDCSS; +<style type="text/css"> + body { background-color: $bgcolor } + body.blank { background-color: $chatbg } + body.online { background-color: $chatbg } + div { font-family: arial, geneva, verdana, helvetiva; font-size: 12px; color: #ffffff } + div.b { font-weight: bold; color: #ffa500 } + a { color: #ffffef; } + a:hover { color: #ffffff; } + p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; } +</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; background-color: #ffffff; 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 +} +1; diff --git a/0.8.0/modules/changeroom.pm b/0.8.0/modules/changeroom.pm new file mode 100755 index 0000000..4a5e787 --- /dev/null +++ b/0.8.0/modules/changeroom.pm @@ -0,0 +1,67 @@ +sub change_room { + my($method, $newroom, $oldroom, $alias2) = @_; + if ($newroom eq $oldroom) { + &post_prv($alias, "<font color='ffffff'>Du befindest dich bereits im Raum <font color='ffa500'>$newroom</font>!</font>"); + &reload_html; + } + elsif ($newroom eq $loginplace) { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verlässt den Chat und geht in die <b>$loginplace</b> ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &check_online; + &reload_html; + } + open RSTAT, "<data/online/rstat/$newroom"; + my(@rstat) = <RSTAT>; + close RSTAT; + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$newroom</font> ist leider abgesperrt!</font>"); + &reload_html; + } + } + &private_javascript($alias, $room, "parent.input.document.inf.room.value = '$newroom';open('chat?request=online&room=$newroom&alias=$alias&tmpid=$tmpid','online');"); + open MSGFILE, ">>data/msgs/$newroom"; + print MSGFILE "$alias<;" . time . "<;!<;!<;<;\n"; + close MSGFILE; + open MSGFILE, ">>data/msgs/$room"; + if ($method eq 'j') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'ju') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du folgst <font color='".&get_ident($alias2,3)."'>$alias2</font> aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'sep') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrst ab...</font></i><br><;\n"; + } + close MSGFILE; + &post_strmsg($alias, $room, 'cr', $newroom); + $room = $oldroom; + my $tmpstamp = time; + if ($method eq 'j') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'ju') { + my $col2 = &get_ident($alias2,3); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> folgt <font color='$col2'>$alias2</font> in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> und folgt <font color='$col2'>$alias2</font> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'sep') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> und sperrt ab...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrt ab...</font></i>", $alias); + } + elsif ($method eq 'beam') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> in den Raum <b>$newroom</b>...</font></i>", $alias2); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> aus dem Raum <b>$oldroom</b> herein nach <b>$room</b>...</font></i>", $alias2); + } + unlink "data/online/rooms/$oldroom/$alias"; + &rm_rstat($alias, $oldroom); + &check_online; +} +1; diff --git a/0.8.0/modules/commands.pm b/0.8.0/modules/commands.pm new file mode 100755 index 0000000..8d6211b --- /dev/null +++ b/0.8.0/modules/commands.pm @@ -0,0 +1,867 @@ +sub command { + $_[0] = $_[0] . ' '; + $_[0] = substr($_[0], 1, length($_[0]) - 1); + my(@cmd) = split(/ /, $_[0], 0); + my $cmd = substr($_[0], 0, index($_[0], ' ')); + my $tmp = $_[1]; + sub lock { + my $method = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $lock = "0\n"; + if ($room eq $standardroom) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ohne Erfolg ab ...</font></i>", $alias); + } + else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ab ...</font></i>", $alias) if $method ne 'separee'; + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum auf ...</font></i>", $alias) if $method ne 'separee'; + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $lock; + close RSTAT; + } + &reload_html; + } + if ($cmd eq 'about') { + &post_prv($alias, "<font color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. B\374tow (2000 - 2002).</font>"); + &reload_html; + } + elsif ($cmd eq 'away') { + for ($i = 1; $i <= $#cmd; ++$i) { + $away_msg = $away_msg . ' ' . $cmd[$i]; + } + my $room = &get_room($alias); + if ($tmp eq 'autoaway') { + $away_msg = "$alias wurde vom System agbemeldet ..."; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> meldet <font color='".&get_ident($alias,3)."'>$alias</font> wegen Inaktivität ab ...</i></font>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> meldet sich ab (<font color='$col'>$away_msg</font> ) ...</i></font>", $alias); + } + open AWAY, ">>data/online/rstat/$room.away"; + print AWAY "$alias<;$away_msg\n"; + close AWAY; + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'away'; parent.online.location.reload();]); + &reload_html; + } + elsif ($cmd eq 'clear') { + &post_prv($alias, "<script language='JavaScript'>window.open('chat?request=stream&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');</script>"); + &reload_html; + } + elsif ($cmd eq 'col') { + my $col, $secol; + if ($cmd[1] ne undef) { + $col = $cmd[1]; + &prove_color($alias, $col); + my $tmpsecol = $cmd[2]; + my $length = length $tmpsecol; + if ($tmpsecol eq '' or $length < 6 or $length > 6) { + $secol = $col; + } + else { + $secol = $tmpsecol; + } + } + else { + $col = &random_color; + $secol = &random_color; + } + open OPTIONS, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $options[0] . $col . "\n" . $secol; + close OPTIONS; + open IDENT, "<data/online/ident/$alias"; + my(@ident) = <IDENT>; + close IDENT; + open IDENT, ">data/online/ident/$alias"; + print IDENT $ident[0] . $ident[1] . $ident[2] . "$col\n$secol"; + close IDENT; + &post($room, '<i><font color=ffffff>' . ×tring . "</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt...</font></i>", $alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &reload_html; + } + elsif ($cmd eq 'date') { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + &post_prv($alias, "<font color=ffffff>Heute ist der $days.$months. Jahr $years. Es ist genau $hours:$mins Uhr und $secs Sekunden.</font>"); + &reload_html; + } + elsif ($cmd eq 'exit') { + my $room = &get_room($alias); + if ($tmp eq 'autologout') { + &private_javascript($alias, $room, q[open('chat?request=start&tmp=autologout','_top');]); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> loggt <font color='".&get_ident($alias,3)."'>$alias</font> wegen Inaktivität aus ... </font></i>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt sich ganz aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=quit','_top');]); + } + &rm_alias($alias, $room); + &rm_away($alias, $room); + &reload_html; + } + elsif ($cmd eq 'getcol') { + my $cols2show = $cmd[1]; + if (-f "data/user/options/$cols2show") { + open FILE, "<data/user/options/$cols2show"; + my(@file) = <FILE>; + close FILE; + chomp $file[1]; + chomp $file[2]; + &post_prv($alias, "<font color='ffa500'>$cols2show <font color='ffffff'> verwendet als 1. Farbe <font color='$file[1]'>$file[1]</font> und als 2. Farbe <font color='$file[2]'>$file[2]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$cols2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'hits' or $cmd eq 'uptime') { + &post_prv($alias, "<font color=ffffff>Uptime: $startime " . &calculate_uptime_hours($STARTIME) . "h; $HITS Hits; " . &calculate_hpm($HITS, $STARTIME) . ' Hits pro Minute</font>'); + &reload_html; + } + elsif ($cmd eq 'ig') { + my $alias2ignore = $cmd[1]; + if ($alias2ignore) { + if (-f "data/user/options/$alias2ignore") { + if (3 <= &hierachie($alias2ignore)) { + &post_prv($alias, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'> kann nicht ignoriert werden!</font>"); + } + else { + &post_strmsg($alias, $room, 'ig', $alias2ignore); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'>existiert nicht in der Datenbank!</font>"); + } + } + else { + &post_strmsg($alias, $room, 'igl'); + } + &reload_html; + } + elsif ($cmd eq 'j' or $cmd eq 'sep') { + if ($cmd[1] =~ /\W/ or $cmd[1] eq '') { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> enth\344lt illegale Zeichen!</font>"); + &reload_html; + } + else { + if ($cmd eq 'j') { + &change_room('j', $cmd[1], $room); + &reload_html; + } + else { + if ($cmd[1] eq $standardroom) { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> ist ein Standardraum und kann nicht als Separee eröffnet werden!</font>"); + } + else { + &change_room('sep', $cmd[1], $room); + &lock('separee'); + } + &reload_html; + } + } + } + elsif ($cmd eq 'me' or $cmd eq 'm') { + my $me_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $me_msg = $me_msg . ' ' . $cmd[$i]; + } + $me_msg =~ s[/me/][<i>$alias</i>]g; + $me_msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if ($cmd eq 'm') { + &post($room, "<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>", $alias); + } + else { + &post($room, "<b><font color=$col><i>$alias</i> $me_msg</font></b>", $alias); + } + &reload_html; + } + elsif ($cmd eq 'memo') { + my $alias2memo = $cmd[1]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if (-f "data/user/options/$alias2memo") { + my $memo_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $memo_msg = $memo_msg . ' ' . $cmd[$i]; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>"); + open MEMO, ">>data/user/memos/$alias2memo"; + print MEMO "<font color=ffffff>($days.$months.$years - $hours:$mins:$secs) <font color=$col>$alias</font> hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>\n"; + close MEMO; + &reload_html; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'menu') { + &private_javascript($alias, $room, "window.open('chat?request=htdocs&alias=$alias&var=menu_html&room=$standardroom&col=$col&secol=$secol&tmpid=$tmpid','_new','width=500,height=500,screenX=100,screenY=100,scrollbars');"); + &reload_html; + } + elsif ($cmd eq 'online') { + my $alias2prove = $cmd[1]; + my $totaltime = &get_online_time($alias2prove); + if ($totaltime ne false) { + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>"); + } + else { + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'q') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verlässt den Chat ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &rm_away($alias, $room); + &check_online; + &reload_html; + } + elsif ($cmd eq 'rmgb') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das eigene G\344stebuch ...</font></i>", $alias); + unlink "data/user/gbooks/$alias"; + &reload_html; + } + elsif ($cmd eq 's') { + my $msg2scream; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2scream = $msg2scream . ' ' . $cmd[$i]; + } + $msg2scream =~ s/\344/\304/g; + $msg2scream =~ s/\366/\326/g; + $msg2scream =~ s/\374/\334/g; + $msg2scream = "\U$msg2scream\E"; + &post($room, "<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'seen') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + if (-f "data/user/lastlogin/$alias2prove") { + open LASTLOGIN, "<data/user/lastlogin/$alias2prove"; + my $lastlogin = <LASTLOGIN>; + close LASTLOGIN; + my $timestamp = sprintf('%.2f', (time - $lastlogin) / 3600); + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>"); + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich seit der Einf\374hrung dieses Befehls noch nie eingeloggt!</font></font>"); + } + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'selfkill') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> entfernt sich ganz und gar aus dem System und loggt sich aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=selfkill','_top');]); + &kill_alias($alias); + &reload_html; + } + elsif ($cmd eq 'w') { + my $theme = &get_theme($room); + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my($is, $nr) = ('t', 0); + my $persons; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-f "data/online/rooms/$room/$_") { + $persons = $persons . ' ' . "<font color='".&get_ident($_,3)."'>$_</font>"; + ++$nr; + } + } + &post_prv($alias, "<font color=ffffff>Der aktuelle <b>Raum:</b> $room $theme $door ($nr): $persons</font>"); + &reload_html; + } + elsif ($cmd eq 'wc' or $cmd eq 'wc/') { + my $raum = $cmd[1]; + my $persons; + if ($raum eq '' and $cmd eq 'wc') { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + close USERS; + foreach $_ (@users) { + $persons = $persons . ' ' . "<font color='".&get_ident($_,3)."'>$_</font>" if -f "data/online/users/$_"; + } + my $nr = $#users - 1; + my($nrs, $is) = ('', 'ist'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'sind'; + } + &post_prv("$alias", "<font color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: $persons</font>"); + } + elsif ($raum eq '' and $cmd eq 'wc/') { + my $msg2post; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + opendir DIR, "data/online/rooms/$_"; + my(@dir2) = readdir DIR; + closedir DIR; + open RSTAT, "<data/online/rstat/$_"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my $nr = $#dir2 - 1; + $msg2post = $msg2post . "<tr><td><b><font size=2 color='ffffff'>$_ $door ($nr) [" . $rstat[1] . q(]: </font></b></td></tr><tr><td><font size=2 color='ffa500'>); + foreach $chatter (@dir2) { + $msg2post = $msg2post . "<font color='".&get_ident($chatter,3)."'>$chatter</font> " if -f "data/online/rooms/$_/$chatter"; + } + print '</font></td>'; + } + } + &post_prv($alias, "<font color=ffffff>Folgende Räume sind offen:</font><table>$msg2post</table>"); + } + elsif ($raum ne '') { + my $persons; + opendir DIR, "data/online/rooms/$raum"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + $persons = $persons . ' ' . "<font color='".&get_ident($chatter,3)."'>$_</font>" if -f "data/online/rooms/$raum/$_"; + } + my($nr, $is) = ($#dir - 1, 't'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'n'; + } + &post_prv($alias, "<font color=ffffff> $nr Person$nrs befinde$is sich im Raum <b>$raum</b> $persons</font>"); + } + &reload_html; + } + elsif ($cmd eq 'wj' or $cmd eq 'ju') { + my $alias2search = $cmd[1]; + my $roomofalias = &get_room($alias2search); + if ($roomofalias) { + if ($cmd eq 'wj') { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff>befindet sich im Raum <b>$roomofalias</b> !</font></font>"); + } + else { + &change_room('ju', $roomofalias, $room, $alias2search); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff> ist nicht eingeloggt!</font></font>"); + } + &reload_html; + } + elsif (1 <= &hierachie($alias, $room)) { + if ($cmd eq 'l') { + &lock; + } + elsif ($cmd eq 'su') { + my $alias2su = $cmd[1]; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2su) { + open DATEI, "<data/online/rstat/$room"; + my(@rstat) = <DATEI>; + close DATEI; + if (1 <= hierachie($alias2su, $room)) { + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color='ffffff'> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, W\304 oder OW)</font>"); + &reload_html; + } + open RSTAT, ">>data/online/rstat/$room"; + print RSTAT "$alias2su<;1\n"; + close RSTAT; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verleiht <font color='".&get_ident($alias2su,3)."'>$alias2su</font> Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &reload_html; + } + } + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + &reload_html; + } + elsif ($cmd eq 'rsu') { + my $alias2rsu = $cmd[1]; + if (1 == hierachie($alias2rsu, $room)) { + &rm_rstat($alias2rsu, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entzieht <font color='".&get_ident($alias2rsu,3)."'>$alias2rsu</font> die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rsu <font color='ffffff'>ist gar kein Raumbesetzer!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 't') { + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $theme; + if ($cmd[1] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, q[<i><font color='ffffff'>] . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums ...</font></i>", $alias); + } + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i] . "\n"; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $theme; + close RSTAT; + &reload_html; + } + elsif (3 <= &hierachie($alias, $room)) { + if ($cmd eq 'ban' or $cmd eq 'banip') { + my $alias2ban = $cmd[1]; + my $hierachie = &hierachie($alias2ban); + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + if ($cmd[1] eq undef) { + my $nr = @ban; + my $banned; + foreach $_ (@ban) { + chomp $_; + $banned .= " $_"; + } + &post_prv($alias, "<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color='ff0000'>$banned</font></font>"); + &reload_html; + } + elsif (-f "data/user/options/$alias2ban") { + if (3 <= $hierachie) { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color='ffffff'>kann nicht verbannt werden!</font></font>"); + &reload_html; + } + if ($cmd eq 'ban') { + if (&add_entry($alias2ban, 'ban') == 1) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verbannt <b>$alias2ban</b> aus dem Chat ...</font></i>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>"); + } + } + elsif ($cmd eq 'banip') { + open DATEI, "<data/online/ident/$alias2ban"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + if (add_entry("ip://$ipnr", 'ban') == 1) { + &post_prv($alias, "<font color='ffffff'>IP-Nummer von <font color='ffa500'>$alias2ban</font> (<font color='ff0000'>$ipnr</font>) wurde verbannt!</font></i>"); + } + else { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$ipnr</font> von <font color='ffa500'>$alias2ban</font> ist bereits verbannt!</font></font>"); + } + &reload_html; + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff> kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'rban' or $cmd eq 'rbanip') { + my $alias2rban = $cmd[1]; + open BAN, '<data/ban'; + @ban = <BAN>; + close BAN; + foreach $ban (@ban) { + if (&rm_entry($alias2rban, 'ban') == 1) { + if ($alias2rban =~ /ip:/) { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$alias2rban</font> wurde aus der Banliste ausgetragen!</font></font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entbannt <font color='".&get_ident($alias2rban,3)."'>$alias2rban</font> ...</font></i>", $alias); + } + &reload_html; + } + } + &post_prv($alias, "<font color='ff0000'>$alias2rban <font color='ffffff'>ist nicht verbannt!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'img') { + my $hierachie = &hierachie($alias, $room); + &hierachie_rm($alias); + if ($hierachie == 3) { + &post_prv($alias, q[<font color='ffffff'>Als temporärer Wächter kannst du dein Superuserlogo nicht verstecken!</font>]); + } + elsif ($hierachie % 2 > 0) { + &post_prv($alias, q[<font color='ffffff'>Dein Superuserlogo wurde versteckt!</font>]); + &hierachie_add($alias, $hierachie + 1); + } + else { + &post_prv("$alias", q[<font color='ffffff'>Dein Superuserlogo wurde wieder sichtbar gemacht!</font></font>]); + &hierachie_add($alias, $hierachie - 1); + } + &reload_html; + } + elsif ($cmd eq 'ip') { + my $alias2prove = $cmd[1]; + opendir DIR, 'data/online/ident'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2prove) { + open DATEI, "<data/online/ident/$alias2prove"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + &post_prv($alias, "<font color='ffa500'>$_<font color='ffffff'> hat die IP-Nummer <font color='ff0000'>$ipnr</font> !</font></font>"); + } + } + &reload_html; + } + elsif ($cmd eq 'k' or $cmd eq 'o') { + my $alias2kick = $cmd[1]; + if (-f "data/online/users/$alias2kick") { + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $raum (@dir) { + opendir DIR, "data/online/rooms/$raum"; + my(@dir2) = readdir DIR; + closedir DIR; + foreach my $chatter (@dir2) { + if ($chatter eq $alias2kick) { + my $hierachie2 = &hierachie($alias2kick); + if (&hierachie($alias) <= &hierachie($alias2kick)) { + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> besitzt einen höheren oder gleichen Rang und kann nicht gekickt/ausgeloggt werden!</font></font>"); + } + else { + if ($cmd eq 'k') { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=kick","_top");</script>'); + } + else { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=logout","_top");</script>'); + } + $_ = undef if $room eq $raum; + if ($cmd eq 'k') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> katapultiert <font color='".&get_ident($alias2kick,3)."'>$alias2kick</font> aus dem Chat ...</font></i>", $alias, $raum); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt <font color='".&get_ident($alias2kick,3)."'>$alias2kick</font> aus dem Chat aus ...</font></i>", $alias, $alias); + } + &rm_alias($alias2kick, $raum); + &check_online; + } + &reload_html; + } + } + } + } + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> ist nicht anwesend und kann nicht aus dem System katapultiert werden werden!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'sl') { + my $sl_room = $cmd[1]; + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + open RSTAT, "<data/online/rstat/$sl_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen ab ...</font></i>", $alias, $sl_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen auf ...</font></i>", $alias, $sl_room); + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$sl_room"; + print RSTAT $lock; + close RSTAT; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$sl_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'ss') { + my $ss_room = $cmd[1]; + if (-e "data/online/rooms/$ss_room") { + my $ss_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $ss_msg = $ss_msg . ' ' . $cmd[$i]; + } + my $msg2scream = "\U$ss_msg\E"; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> ruft in den Raum <b>$ss_room</b> hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>", $alias, $ss_room); + &reload_html; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$ss_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'st') { + my $st_room = $cmd[1]; + if (-e "data/online/rooms/$st_room") { + my $theme; + if ($cmd[2] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum <b>$st_room</b> das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias, $st_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums <b>$st_room</b> ...</font></i>", $alias, $st_room); + } + open RSTAT, "<data/online/rstat/$st_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$st_room"; + print RSTAT $theme; + close RSTAT; + } + else { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'status') { + my $alias2level = $cmd[1]; + &post_prv($alias, "<font color='ffa500'>$alias2level <font color='ffffff'>hat den Superuserstatus <font color='ff0000'>".&hierachie($alias2level, &get_room($alias2level))."</font> !</font></font>"); + &reload_html; + } + elsif (7 <= &hierachie($alias)) { + if ($cmd eq 'kill') { + my $alias2kill = $cmd[1]; + if (-f "data/user/options/$alias2kill") { + if (7 <= &hierachie($alias2kill)) { + &post_prv($alias, "<font color='ffa500'>$alias2kill</font> <font color='ffffff'>hat einen höheren Rang und kann nicht aus dem System entfernt werden !</font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col>$alias</font> killt <b>$alias2kill</b> ganz und gar aus dem System ...</font></i>", $alias); + &kill_alias($alias2kill, $alias); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2kill <font color='ffffff'> existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'sys') { + my $sys_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $sys_msg = $sys_msg . ' ' . $cmd[$i]; + } + $sys_msg = q[<i><font color='ffffff'>] . ×tring . " </font></i> <b><font size=2 color='red'>SYSTEMNACHRICHT</font></b><i><font color='ffffff'>: $sys_msg ...</font></i>"; + opendir ROOMS, 'data/msgs'; + my(@rooms) = readdir ROOMS; + close ROOMS; + foreach $_ (@rooms) { + &post($_, $sys_msg, $alias) unless /\./; + } + &log($sys_msg); + &reload_html; + } + elsif ($cmd eq 'twa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + my $room2 = &get_room($alias2wa); + if (3 <= &hierachie($alias2wa, $room2)) { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum temporären Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add_rstat($alias2wa, 3, $room2); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2wa,3)."'>$alias2wa</font> zum <font color='ff0000'>temporären</font> W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'rtwa') { + my $alias2rwa = $cmd[1]; + my $room2 = &get_room($alias2rwa); + if (3 == &hierachie($alias2rwa, $room2)) { + &hierachie_rm_rstat($alias2rwa, $room2); + + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2rwa,3)."'>$alias2rwa</font> vom <font color='ff0000'>temporären</font> W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein temporärer W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'wa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + if (5 <= &hierachie($alias2wa)) { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2wa, 5); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2wa,3)."'>$alias2wa</font> zum W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'rwa') { + my $alias2rwa = $cmd[1]; + my $hierachie = &hierachie($alias2rwa); + if (5 == $hierachie or 6 == $hierachie) { + &hierachie_rm($alias2rwa); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2rwa,3)."'>$alias2rwa</font> vom W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif (9 <= &hierachie($alias)) { + if ($cmd eq 'ow') { + my $alias2ow = $cmd[1]; + if (-f "data/user/options/$alias2ow") { + if (7 <= &hierachie($alias2ow)) { + &post_prv($alias, "<font color='ffa500'>$alias2ow <font color='ffffff'>kann nicht zum Oberwächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2ow, 7); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2ow,3)."'>$alias2ow</font> zum Oberwächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'row') { + my $alias2row = $cmd[1]; + my $hierachie = &hierachie($alias2row); + if (7 == $hierachie or 8 == $hierachie) { + &hierachie_rm($alias2row); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2row,3)."'>$alias2row</font> vom Oberw\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2row <font color=ffffff>ist kein Oberw\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'pw') { + my $pw2show = $cmd[1]; + if (-f "data/user/options/$pw2show") { + open PW, "<data/user/options/$pw2show"; + my(@pw) = <PW>; + close PW; + chomp $pw[0]; + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> hat das Passwort <font color='ff0000'>$pw[0]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'id' or $cmd eq 'agent') { + my $id2show = $cmd[1]; + if (-f "data/online/ident/$id2show") { + if ($cmd eq 'id') { + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> hat die Temp-ID <font color='ff0000'>".&get_ident($id2show, 1)."</font> !</font></font>"); + } + else { + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> verwendet <font color='ff0000'>".&get_ident($id2show, 2)."</font> !</font></font>"); + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> ist nicht eingeloggt !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'cool') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . " $msg2post</font></i>", $alias); + &reload_html; + } + elsif ($cmd eq 'rev') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post = reverse($msg2post); + &post($room, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'arks') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post =~ s/i/1/gi; + $msg2post =~ s/e/3/gi; + $msg2post =~ s/a/4/gi; + $msg2post =~ s/s/5/gi; + $msg2post =~ s/g/6/gi; + $msg2post =~ s/t/7/gi; + $msg2post =~ s/b/8/gi; + $msg2post =~ s/o/0/gi; + &post($room, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'ultra') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + my @letters = split '', "$alias: $msg2post"; + $msg2post = undef; + foreach (@letters) { + $msg2post .= "<font color='".&random_color."'>$_</font>"; + } + &post($room, "<b>$msg2post</b>", $alias); + &reload_html; + } + } + } + } + } + my($alias2post, $msg2post, $action); + if ($cmd eq 'msg') { + $alias2post = $cmd[1]; + for ($i = 2; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + elsif ($cmd eq '') { + $alias2post = $whisper; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + else { + $alias2post = $cmd; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + $msg2post =~ s[/me/][<i>$alias</i>]g; + $msg2post =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if (-f "data/online/users/$alias2post" and not -f "data/online/rooms/$loginplace/$alias2post") { + &post_prv($alias, "<b><font color='$col'><i>Zu $alias2post gefl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &post_prv($alias2post, "<b><font color='$col'><i>$alias fl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &private_javascript($alias, $room, "parent.input.document.inf.whisper.value = '$alias2post';"); + &reload_html; + } + &post_prv($alias, qq[ <font color=ffffff>Benutzer oder Befehl <font color=ffa500>$alias2post</font> ist nicht anwesend/verf\374gbar! Bitte den Befehl "/menu" eingeben, um das Chat-Menü zu öffnen.</font></font>]); + &reload_html; +} +1; diff --git a/0.8.0/modules/divcom.pm b/0.8.0/modules/divcom.pm new file mode 100755 index 0000000..8e17cbe --- /dev/null +++ b/0.8.0/modules/divcom.pm @@ -0,0 +1,288 @@ +sub divcom { + if ($var eq 'list_alias_html') { + &list_alias_html; + } + elsif ($var eq 'alias_html') { + &alias_html; + } + elsif ($var eq 'edit_profile_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_profile_html'); + } + elsif ($var eq 'edit_options_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_options_html'); + } + elsif ($var eq 'gb_html') { + &gb_html; + } + elsif ($var eq 'post_gb') { + &secure_checkid($alias, $tmpid); + &post_gb; + } + elsif ($var eq 'edit_profile') { + &secure_checkid($alias, $tmpid); + &edit('edit_profile'); + } + elsif ($var eq 'edit_options') { + &secure_checkid($alias, $tmpid); + &edit('edit_options'); + } + elsif ($var eq 'rm_gb_alias') { + &secure_checkid($alias, $tmpid); + &rm_gb; + } + else { + &error('Parameter fehlt'); + } +} +sub gb_html { + my ($message,$method) = @_; + unless ($method eq 'loggedin') { + &start_html('Benutzerboard'); + &menu(); + } + if ($message eq 'post_empty') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </i>\n einen Text und poste\n <u>dann</u>\n !\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_less') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Ein Eintrag muss mindestens aus 30 Zeichen bestehen ...\n </div>\n <hr>\n"; + + } + elsif ($message eq 'post_ok') { + print " <div class=b>\n Meldung:\n </div>\n <div>\n Vielen Dank f\374r Deinen Beitrag. Wenn Du willst, kannst Du jetzt gleich noch einen Eintrag posten ...\n </div>\n <hr>\n"; + } + else { + print " <div>\n Falls Du Anregungen oder Verbesserungsvorschl\344ge f\374r die Community hast, dann poste doch einen kleinen Eintrag :-)\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="col" value="$col">\n<input type="hidden" name="secol" value="$secol">\n<input type="hidden" name="maxVerlauf" value="$maxVerlauf">\n<input type="hidden" name="verlaufOrder" value="$verlaufOrder">\n<input type="hidden" name="request" value="divcom">\n <input type="hidden" name="method" value="$method">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="guestbook">\n <input type="hidden" name="id" value="y">\n <input size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e 'data/guestbook') { + &error("Konnte dat/guestbook nicht \366ffnen") unless open DATEI, '<data/guestbook'; + @datei = <DATEI>; + close DATEI; + print $q->div(@datei); + } + print $q->end_html; +} +sub post_gb { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if ($msg eq '') { + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_empty'); + } else { + &gb_html('post_empty'); + } + } + else { + &alias_html('post_empty'); + } + $client->shutdown(2); + exit 0; + } + if (length($msg) < 30) { + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_less'); + } else { + &gb_html('post_less'); + } + } + else { + &alias_html('post_less'); + } + $client->shutdown(2); + exit 0; + } + + $msg =~ s/</</g; + $msg =~ s/\n/<br>/g; + my $tmpath = ''; + if ($id eq 'y') { + $tmpath = 'data/guestbook'; + } + else { + $tmpath = "data/user/gbooks/$tmp"; + } + open GB, "$tmpath"; + my(@gb) = <GB>; + close GB; + pop @gb if $#gb > 99; + my(@newdatei) = "<br><b>$alias schrieb am $days.$months.$years um $hours:$mins:$secs ...</b><br>$msg<br>\n"; + push @newdatei, @gb; + open GB, ">$tmpath"; + print GB @newdatei; + close GB; + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_ok'); + } else { + &gb_html('post_ok'); + } + $client->shutdown(2); + exit 0; + } + &post_prv ($tmp, "<font color=ffffff>$alias hat soeben einen Pin in Dein Profil geh\344ngt ... </font>"); + &alias_html; + $client->shutdown(2); + exit 0; +} +sub rm_gb { + open GB, "<data/user/gbooks/$alias"; + my(@gbfile) = <GB>; + close GB; + my(@newgbfile) = (); + for ($i = 0; $i <= $#gbfile; ++$i) { + push @newgbfile, $gbfile[$i] if $i != $id; + } + open GB, ">data/user/gbooks/$alias"; + print GB @newgbfile; + close GB; + &alias_html('rm_ok'); +} +sub list_alias_html { + &start_html('Alle Benutzer'); + opendir REGISTERED, 'data/user/options'; + my(@users) = readdir REGISTERED; + closedir REGISTERED; + my(@liste) = sort(@users); + my $nr = $#users - 1; + &menu(); + print " <div>\n Es sind z.Z. genau $nr Benutzernamen in der Datenbank vorhanden! (Sortiert nach #, A-Z, a-z)\n </div>\n <hr>\n <div>\n"; + foreach $_ (@liste) { + if (-f "data/user/options/$_") { + print $q->a({-'href', "chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid"}, "$_"), ' '; + } + } + print " </div>\n</body>\n</html>\n"; +} +sub alias_html { + my $message = $_[0]; + open COUNTS, "<data/user/counts/$tmp"; + local $counter = <COUNTS>; + close COUNTS; + ++$counter; + open COUNTS, ">data/user/counts/$tmp"; + print COUNTS $counter; + close COUNTS; + &start_html($tmp); + &menu(); + print ""; + if ($message eq 'rm_ok') { + print " <div class=b>\n Meldung:\n </div>\n <div>\n Der von Dir gew\344hlte Eintrag wurde erfolgreich gel\366scht.\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_empty') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </u>\n einen Text und poste\n <u>dann</u>\n !\n <hr>\n"; + } + open PROFILE, "<data/user/profiles/$tmp"; + @data = <PROFILE>; + close PROFILE; + print qq[ <div>\n Dieses Profil wurde insgesamt schon $counter mal aufgerufen !\n <br><br>Alias: $tmp\n <br><br>Nachname: $data[0]\n <br><br>Vorname: $data[1]\n <br><br>Alter: $data[2]\n <br><br>Wohnort: $data[3]\n <br><br>E-Mail:\n <a href="mailto:$data[4]">$data[4]</a>\n <br><br>ICQ-Nummer: $data[5]\n <br><br>Homepage: <a href="$data[6]" target="_new">$data[6]</a>\n <br><br>Weiteres:<br>$data[7]\n <hr>\n Hier kannst Du $tmp eine Nachricht hinterlassen!\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n <input type="text" size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e "data/user/gbooks/$tmp") { + &error("Konnte data/user/gbooks/$tmp nicht \366ffnen") unless open DATEI, "<data/user/gbooks/$tmp"; + @datei = <DATEI>; + close DATEI; + my $nr = 1; + if ($alias ne $tmp) { + foreach $_ (@datei) { + print "<br>Eintrag # $nr: $_"; + ++$nr; + } + } + else { + print qq[ <table>\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="rm_gb_alias">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n]; + for ($i = 0; $i <= $#datei; ++$i) { + print qq[ <tr>\n <td>\n <input type="radio" name="id" value="$i">\n </td>\n <td>\n <div class=q>\n <br>\n Eintrag # $nr:\n $datei[$i]\n </div>\n </td>\n </tr>\n]; + ++$nr; + } + print qq[ </table>\n <table>\n <tr>\n <td>\n <font color=ffffff>\n <input type="submit" value="Markierten Eintrag l\366schen">\n </font>\n </td>\n <td>\n <font color=ffffff>\n <input type="reset" value="Markierung r\374ckg\344ngig machen">\n </font>\n </td>\n </tr>\n </table>\n </form>\n]; + } + } + print $q->end_html; +} +sub edit_html { + my($method, $message) = @_; + &start_html("Benutzerprofil \344ndern"); + if ($method eq 'edit_options_html') { + open DATEI, "<data/user/options/$alias"; + } + elsif ($method eq 'edit_profile_html') { + open DATEI, "<data/user/profiles/$alias"; + } + @data = <DATEI>; + close DATEI; + foreach $_ (@data) { + chomp $_; + } + &menu(); + if ($method eq 'edit_options_html') { + if ($message eq 'edit_options_ok') { + print "<div class=b>\n Hinweis:\n</div>\n<div>\n Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um\n weiterzuchatten einfach Fenster schliessen!\n</div>\n<hr>\n"; + } + elsif ($message eq 'edit_pw_wrong') { + print "<div class=b>\n ACHTUNG!\n</div>\n<div>\n Du hast soeben versucht, dein Passwort zu \344ndern. Jedoch stimmte die Erste Eingabe nicht mit der Zweiten \374berein.\n Bitte versuch es erneuert ...\n</div>\n<hr>\n"; + } + else { + print $q->div('Hier kannst Du Deine Chat-Optionen editieren!'), $q->hr; + } + print qq[<script lang="javascript" type="text/javascript">\n<!--\n\nfunction radioWert(rObj) {\n for (var i=0; i<rObj.length; i++) if (rObj[i].checked) return rObj[i].value;\n return false;\n}\n\nfunction insertcode( code ) {\n document.optionen.elements[radioWert(document.optionen.eingabe)].value = code;\n}\n\n//-->\n</script>\n\n<form name="optionen" action="chat">\n <input type="hidden" name="var" value="edit_options">\n <table>\n <tr>\n <td>\n <div>\n Dein Passwort\n <font color=ffa500>\n (Gut merken !!)\n </font>\n <br>\n <input type="password" name="id" value="$data[0]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n Geb hier das Passwort erneuert ein:\n <br>\n <input type="password" name="tmp" value="$data[0]">\n </div>\n </td>\n </tr>\n </table>\n <hr>\n <div>Einstellungen f\374r den Nachrichten-Verlauf</div>\n <table>\n <tr>\n <td>\n <br>\n <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div>\n <font color=ffffff>\n <select name="maxVerlauf" size="1">\n <option value="$data[3]">$data[3]\n]; + for ($i = 1; $i <= 50; ++$i) { + print qq[<option value="$i">$i]; + } + print qq[ </select>\n </font>\n </td>\n </tr>\n <tr>\n <td>\n <br>\n<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div>\n <font color=ffffff>\n <select name="verlaufOrder" size="1">\n <option value="$data[4]">Bisherige Einstellung ($data[4])\n <option value="0">Neue Verlaufnachrichten oben (0)\n <option value="1">Neue Verlaufnachrichten unten (1)\n </select>\n </font>\n </td>\n </tr>\n </table>\n<br>\n <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div>\n <hr>\n <table>\n <tr>\n <td>\n <div>\n <input type="radio" name="eingabe" value="col" checked>\n Auswahl von Farbe 1\n <br>\n (Farbe Deines Nicks):\n <br>\n <input name="col" size="6" maxlength="6" value="$data[1]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n <input type="radio" name="eingabe" value="secol">\n Auswahl von Farbe 2\n <br>\n (Farbe Deiner Nachrichten):\n <br>\n <input name="secol" size="6" maxlength="6" value="$data[2]">\n </div>\n </td>\n </tr>\n </table>\n<br>\n <div>\n Beliebige Auswahl markieren und Farbe w\344hlen. Um Deine Optionen abzuspeichern,\n auf "Daten \344ndern" klicken!\n </div>\n <br>\n]; + open COLORS, '<templates/colors.sno'; + @colors = <COLORS>; + close COLORS; + print @colors; + } + elsif ($method eq 'edit_profile_html') { + if ($message eq 'edit_profile_ok') { + print " <div class=b>\n Hinweis:\n </div>\n <div>\n Du hast soeben Dein Profil erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren:\n <hr>\n"; + } + else { + print $q->div('Hier kannst Du Dein Profil editieren!'), $q->hr; + } + print qq[ <form action="chat">\n <input type="hidden" name="var" value="edit_profile">\n <div>\n Dein Nachname:\n <br>\n <input name="nachname" value="$data[0]">\n </div>\n <br>\n <div>\n Dein Vorname:\n <br>\n <input name="vorname" value="$data[1]">\n </div>\n <br>\n <div>\n Dein Alter:\n <br>\n <input name="alter" value="$data[2]">\n </div>\n <br>\n <div>\n Dein Wohnort:\n <br>\n <input name="wohnort" value="$data[3]">\n </div>\n <br>\n <div>\n Deine E-Mail Adresse:\n <br>\n <input name="email" value="$data[4]">\n </div>\n <br>\n <div>\n Deine ICQ-Nummer:\n <br>\n <input name="icq" value="$data[5]">\n </div>\n <br>\n <div>\n Deine Homepage:\n <br>\n <input name="homepage" value="$data[6]">\n </div>\n <br>\n <div>\n Weiteres:\n <br>\n <textarea rows="5" cols="40"name="weiteres" wrap="virtual">$data[7]</textarea>\n </div>\n]; + } + print qq[ <hr>\n <font color=ffffff>\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="room" value="$room">\n <input type="submit" value="Daten \344ndern ...">\n </font>\n </form>\n</body>\n</html>\n]; +} +sub edit { + my $method = $_[0]; + if ($method eq 'edit_profile') { + my $url = $homepage; + $url =~ s[^http://*][]; + $url =~ s[=][]; + $url =~ s["][]; + open PROFILE, ">data/user/profiles/$alias"; + my $profile = "$nachname\n$vorname\n$alter\n$wohnort\n$email\n$icq\nhttp://$url\n$weiteres"; + $profile =~ s/</</g; + print PROFILE $profile; + close PROFILE; + &edit_html('edit_profile_html', 'edit_profile_ok'); + } + elsif ($method eq 'edit_options') { + if ($id ne $tmp) { + &edit_html('edit_options_html', 'edit_pw_wrong'); + $client->shutdown(2); + exit 0; + } + $id = crypt $id, $cryptkey; + open OPTIONS, ">data/user/options/$alias"; + my $options = "$id\n$col\n$secol\n$maxVerlauf\n$verlaufOrder"; + $options =~ s/</</g; + print OPTIONS $options; + close OPTIONS; + open IDENT, "<data/online/ident/$alias"; + my (@ident) = <IDENT>; + close IDENT; + open IDENT, ">data/online/ident/$alias"; + print IDENT $ident[0] . $ident[1] . $ident[2] . "$col\n$secol"; + close IDENT; + my $room = &get_room($alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> <font color='$secol'>hat seine Chat-Einstellungen geändert</font> ...</font></i>", $alias); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &edit_html('edit_options_html', 'edit_options_ok'); + } +} +1; diff --git a/0.8.0/modules/hierachie.pm b/0.8.0/modules/hierachie.pm new file mode 100755 index 0000000..b6f5732 --- /dev/null +++ b/0.8.0/modules/hierachie.pm @@ -0,0 +1,77 @@ +sub hierachie { + my($alias, $room) = @_; + open FILE, "<data/online/rstat/$room"; + flock FILE, 2; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + open FILE, '<data/hierachie'; + flock FILE, 2; + my(@hierachie) = <FILE>; + close FILE; + my(@userlevels) = (@hierachie, @rstat); + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($name eq $alias) { + chomp $level; + return $level; + } + } + return 0; +} +sub hierachie_rm { + my $alias = shift @_; + my @return; + open FILE, '<data/hierachie'; + my(@hierachie) = <FILE>; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, '>data/hierachie'; + print FILE @return; + close FILE; +} +sub hierachie_rm_rstat { + my($alias, $room) = @_; + my @return; + return unless open FILE, "<data/online/rstat/$room"; + my(@hierachie) = <FILE>; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, ">data/online/rstat/$room"; + print FILE @return; + close FILE; +} +sub hierachie_add { + my($alias, $level) = @_; + &hierachie_rm($alias); + open FILE, '>>data/hierachie'; + print FILE "$alias<;$level\n"; + close FILE; +} +sub hierachie_add_rstat { + my($alias, $level, $room) = @_; + &hierachie_rm_rstat($alias, $room); + return unless open FILE, ">>data/online/rstat/$room"; + print FILE "$alias<;$level\n"; + close FILE; +} +sub prove_away { + my($alias, $room) = @_; + return unless open AWAY, "<data/online/rstat/$room.away"; + @away = <AWAY>; + close AWAY; + my $name, $away; + foreach $_ (@away) { + if (/^$alias.*/) { + ($name, $away) = split(/<; /, $_, 3); + chomp $away; + return $away; + } + } +} +1; diff --git a/0.8.0/modules/htdocs.pm b/0.8.0/modules/htdocs.pm new file mode 100755 index 0000000..4f1bbeb --- /dev/null +++ b/0.8.0/modules/htdocs.pm @@ -0,0 +1,127 @@ +sub htdocs { + if ($var eq 'help_html') { + &printfile('templates/help.sno', 'Alle Chatbefehle'); + } + elsif ($var eq 'logo_html') { + &start_html('Logo'); + &logo_html; + } + elsif ($var eq 'menu_html') { + &menu_html; + } + elsif ($var eq 'logs_html') { + &logs_html; + } + elsif ($var eq 'view_logs_html') { + &secure_checkid($alias, $tmpid); + &printfile("data/logs/$tmp", 'Logdatei', 'blank') if 7 <= &hierachie($alias); + } + elsif ($var eq 'superuser_html') { + &secure_checkid($alias, $tmpid); + &superuser_html; + } + elsif ($var eq 'chatiquette_html') { + &printfile('templates/chatiq.sno', 'Chatiquette'); + print $q->end_html; + } + else { + print $q->start_html(-'bgcolor', '000000'), $q->end_html; + } +} +sub menu_html { + &start_html("Men\374"); + print "<div>\n Von hier aus kannst du alle Untermen\374punkte des Systems erreichen:\n</div>\n<hr>\n"; + &menu(); + print "</body>\n</html>"; +} +sub logo_html { + print qq[ <layer top=-3 left=0><div style="position:absolute; top:5; left:10">\n <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"\n codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"\n WIDTH=48 HEIGHT=48>\n <PARAM NAME=movie VALUE="$gfxpath/ySymbol.swf">\n <PARAM NAME=loop VALUE=false>\n <PARAM NAME=menu VALUE=false>\n <PARAM NAME=quality VALUE=high>\n <PARAM NAME=scale VALUE=noborder>\n <PARAM NAME=wmode VALUE=opaque>\n <PARAM NAME=bgcolor VALUE=$bgcolor>\n <EMBED src="$gfxpath/ySymbol.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=48 HEIGHT=48 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </OBJECT>\n </div></layer>\n]; + print $q->end_html; +} +sub logs_html { + &start_html('Logdateien'); + &menu; + print "<div>\n Hier befinden sich alle Logdateien\n</div>\n<hr>\n"; + if (5 <= &hierachie($alias)) { + print $q->div(qq[Folgende Logdateien des Raumes "$standardroom" k\366nnen nur von Oberw\344chtern oder h\366her gelesen werden (Sortiert nach A-Z, a-z):]), $q->br; + opendir LOGS, 'data/logs'; + my(@logs) = readdir LOGS; + closedir LOGS; + my(@sortedir) = sort(@logs); + foreach $_ (@sortedir) { + if (-f "data/logs/$_") { + print $q->a({-'href', "chat?request=htdocs&alias=$alias&var=view_logs_html&tmp=$_&tmpid=$tmpid", -'target', '_new'}, "$_"), ' '; + } + } + } + else { + print $q->div("Logdateien k\366nnen nur von Oberw\344chtern (OW) gelesen werden. Du bist jedoch ein W\344chter (W\304) oder ein", qq["Normaler Chatter". Oberw\344chter k\366nnen alles nachlesen, was \366ffentlich im Raum "Cyberbar" gechattet wurde.]), $q->hr; + } + print $q->end_html; +} +sub superuser_html { + &start_html ('Superuser'); + &menu; + print "<div>Hallo $alias. Du bist als "; + my $hierachie = &hierachie($alias); + if (9 <= $hierachie) { + print $q->b('Administrator'), ' (AD) eingetragen.</div><br>', $q->br; + } + elsif (7 <= $hierachie) { + print $q->b("Oberw\344chter"), ' (OW) eingetragen.</div><br>', $q->br; + } + elsif (5 <= $hierachie) { + print $q->b("W\344chter"), " (W\304) eingetragen.</div><br>", $q->br; + } + else { + print $q->b('normaler Chatter'), ' (NC) eingetragen.</div><br>', $q->br; + } + open FILE, 'data/hierachie'; + my(@hierachie) = <FILE>; + close FILE; + my @ows, @was, @ads; + foreach $_ (@hierachie) { + my($name, $level) = split(/<;/, $_, 3); + chomp $level; + if ($level == 5) { + push @was, $name; + } + elsif ($level == 7) { + push @ows, $name; + } + elsif ($level == 9) { + push @ads, $name; + } + if (3 <= $hierachie) { + if ($level == 6) { + push @was, "$name!"; + } + elsif ($level == 8) { + push @ows, "$name!"; + } + elsif ($level == 10) { + push @ads, "$name!"; + } + } + } + my $nads = $#ads + 1; + print '<div>', $q->b('AD'), "s ($nads St\374ck)"; + foreach $_ (@ads) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrow = $#ows + 1; + print '</div><br><br><div>', $q->b('OW'), "s ($nrow St\374ck)"; + foreach $_ (@ows) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrwa = $#was + 1; + print '</div><br>', $q->br, '<div>', $q->b("W\304"), "s ($nrwa St\374ck)"; + foreach $_ (@was) { + print $q->font({-'color', 'FFA500'}, ' ' . $_); + } + print qq[<hr>\n Die jeweiligen F\344higkeiten der Oberw\344chter (OW) und der W\344chter (W\304) sind unter\n "<a href="chat?request=htdocs&var=help_html">Chat-Befehle</a>"\n dokumentiert. Versteckte Superuser k\366nnen nur von anderen Superusern auf\ndieser Liste eingesehen werden!\n</div>\n</body>\n</html>\n]; +} +sub menu { + print "<div>\n <a href='chat?request=divcom&var=edit_profile_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Profil \344ndern</a>\n <a href='chat?request=divcom&var=edit_options_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Optionen</a>\n <a href='chat?request=divcom&var=list_alias_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Benutzer</a>\n <a href='chat?request=htdocs&var=help_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Befehle</a>\n <a href='chat?request=divcom&var=gb_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Board</a>\n <a href='chat?request=htdocs&var=superuser_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Superuser</a>\n <a href='chat?request=htdocs&var=logs_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Logs</a>\n <a href='chat?request=statistic&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Statistik</a>\n <a href='chat?request=htdocs&var=chatiquette_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Chatiquette</a>\n</div>\n<hr>\n"; +} +1; diff --git a/0.8.0/modules/input.pm b/0.8.0/modules/input.pm new file mode 100755 index 0000000..48df243 --- /dev/null +++ b/0.8.0/modules/input.pm @@ -0,0 +1,14 @@ +sub input { + &rm_away($alias, $room); + $maxVerlauf = '10' if $maxVerlauf eq undef; + $verlaufOrder = '1' if $verlaufOrder eq undef; + if ($tmp eq 'login') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat den Chat im Raum <b>$room</b> betreten ...</font></i>"); + } + print qq[<html>\n<head>\n<script language="JavaScript"><!--\n\n// Einstellungsvariablen\nmaxVerlauf = $maxVerlauf; // Anzahl der Eintr\344ge des Verlaufs\nmaxPreview = 20; // Zeichenl\344nge der Verlaufsvorschau\nverlaufOrder = $verlaufOrder; // Neue Nachrichten von: 0=oben, 1=unten\n//autoAwayTimeout = 5; // Sekunden, nach denen der User 'Away' gesetzt wird\n//autoQuitTimeout = 10; // Sekunden, nach denen der User den Chat verl\344sst\nautoAwayTimeout = 300; // Sekunden, nach denen der User 'Away' gesetzt wird\nautoQuitTimeout = 1200; // Sekunden, nach denen der User den Chat verl\344sst\n\n// Interne Variablen\nuserNotFocused = false; // Wenn User nicht schreibt\nuserAway = false; // Wenn User automatisch auf 'Away' gesetzt ist\nuserAwayTime = 0; // Sekunden, die User 'Away' ist\nfullVerlauf = new Array( maxVerlauf ); // Verlaufspuffer\n\nfunction delout()\n{\n addVerlauf (document.inf.msg.value); // Dem Verlauf eine Nachricht anh\344ngen\n document.inf.msg.focus(); // Fukus in das Eingabeform\n document.inf.msg.select(); // Text im Eigabeform markieren\n document.inf.submit(); // Formular absenden\n return false; // Abbrechen, damit das Frame nicht neu geladen wird\n}\n\nfunction CheckAuswahl()\n{\n id=document.verlaufform.verlauf.selectedIndex; // ID des ausgew\344hlten Feldes\n\n if (fullVerlauf[id-1] != null) // Nur, wenn das Feld nicht leer ist\n {\n document.inf.msg.value = fullVerlauf[id-1]; // Eintrag ins Textfeld\n }\n\n document.verlaufform.verlauf.selectedIndex = 0; // Ersten Eintrag (\334berschrift) ausw\344hlen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n\n return true;\n}\n\nfunction addVerlauf (msg)\n{\n if (msg == "") // Falls msg leer\n return false; // Aufruf ignorieren\n\n if (verlaufOrder) // neue Nachrichten von unten\n {\n for (i=0; i<(maxVerlauf-1); i++) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+1].text = document.verlaufform.verlauf.options[i+2].text;\n fullVerlauf[i] = fullVerlauf[i+1];\n }\n }\n else // neue Nachrichten von oben\n {\n for (i=(maxVerlauf-2); i>=0; i--) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+2].text = document.verlaufform.verlauf.options[i+1].text;\n fullVerlauf[i+1] = fullVerlauf[i];\n }\n }\n\n if (msg.length > maxPreview) // Vorschau zuschneiden\n pre = msg.slice(0, maxPreview-3) + "...";\n else\n pre = msg;\n\n if (verlaufOrder) // pos = Position des neuen Eintrags\n pos = maxVerlauf-1;\n else\n pos = 0\n\n document.verlaufform.verlauf.options[pos+1].text = pre; // Neue Vorschau anf\374gen\n fullVerlauf[pos] = msg; // Neuen Eintrag an den Verlauf anf\374gen\n\n// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag\n document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (\334berschrift)\n}\n\nfunction msgBlur()\n{\n userNotFocused = true;\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction msgFocus()\n{\n userNotFocused = false;\n if (userAway) // Wird ausgef\374hrt, falls User 'Away' war\n {\n ; // nop\n }\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction checkInterval()\n{\n// status = "userNotFocused=" + userNotFocused + "; userAway=" + userAway + "; userAwayTime=" + userAwayTime + ""; // Debug\n if (userNotFocused)\n {\n userAwayTime += 5; // Addiere 5, da nur alle 5Sek ausgef\374hrt\n if (!userAway)\n {\n if (autoAwayTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n if (document.inf.tmp.value != "away")\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2faway&tmp=autoaway","reload"); // 'Away' setzen\n userAway = true;\n }\n }\n else\n {\n if (autoQuitTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2fexit&tmp=autologout","reload"); // Chat beenden\n }\n }\n }\n\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden wieder aufrufen\n}\n\nfunction initFrame()\n{\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden aufrufen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n}\n//-->\n</script>\n]; + &style; + print qq[</head>\n<body class="blank" onload="initFrame();">\n <div align="left">\n <table border="0" cellpadding="0" cellspacing="0">\n <tr>\n <td>\n <form name="inf" target="reload" action="chat" onsubmit="return delout();">\n <input type="hidden" name="request" value="postmessage">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="room" value="$room">\n <input type="hidden" name="col" value="$col">\n <input type="hidden" name="secol" value="$secol">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="whisper" value="$whisper">\n <input type="hidden" name="tmp" value="$tmp">\n <input size="40" maxlength="300" name="msg" onBlur="msgBlur();" onFocus="msgFocus();">\n </form>\n </td>\n <td><form name="verlaufform">\n <script language="JavaScript"><!--\n document.write("<select size='1' name='verlauf' size='40' onChange='CheckAuswahl();'>");\n document.write("<option>- Nachrichten-Verlauf -</option>");\n for(i=0; i<maxVerlauf; i++) // Leere Verlaufsfelder generieren\n document.write("<option value>(leer)</option>");\n document.write("</select>");\n //-->\n </script>\n </form>\n </td>\n </tr>\n </table>\n </div>\n</body>\n</html>\n]; + $client->$shutdown(2); + exit 0; +} +1; diff --git a/0.8.0/modules/loggedin.pm b/0.8.0/modules/loggedin.pm new file mode 100755 index 0000000..848505d --- /dev/null +++ b/0.8.0/modules/loggedin.pm @@ -0,0 +1,41 @@ +sub loggedin { + &start_html($loginplace, 'blank'); + print qq[<div>\n <font color='$col'>$alias</font>, sch\366n da\337 Du da bist :-), <a href='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder' style="text-decoration: underline; color: red">hier</a> kannst du die Seite aktualisieren.\n</div>\n<hr>\n<div>\n<a href="chat?request=stream&alias=$alias&room=$standardroom&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" style="text-decoration: underline; color: red; font-size:20px">Hier</a>\nkannst du den Standardraum $standardroom betreten. <br><br>\n]; + opendir ROOMDIRS, 'data/online/rooms'; + local(@roomdirs) = readdir ROOMDIRS; + close ROOMDIRS; + foreach $_ (@roomdirs) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + my $room = $_; + + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + + opendir ROOMDIR, "data/online/rooms/$room"; + my(@roomdir) = readdir ROOMDIR; + close ROOMDIR; + + my $nr = $#roomdir - 1; + if ($door or $_ eq $loginplace) { + print $q->b($_), " $door ($nr) "; + } + else { + print $q->b($q->a({-'href', "chat?request=stream&alias=$alias&room=$_&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder"}, "$_")), " ($nr)"; + } + print " Raumthema: $rstat[1]" if $rstat[1] ne "\n"; + print $q->br; + foreach $_ (@roomdir) { + if ($_ ne '..' and $_ ne '.') { + my $col = &get_ident($_,3); + print "<a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid' target='$_' style='color: $col'>$_</a> "; + } + } + print $q->br, $q->br; + } + } + &gb_html($_[0],'loggedin'); +} +1; diff --git a/0.8.0/modules/online.pm b/0.8.0/modules/online.pm new file mode 100755 index 0000000..4c87fb0 --- /dev/null +++ b/0.8.0/modules/online.pm @@ -0,0 +1,167 @@ +sub online { + &secure_checkid($alias, $tmpid); + my(@away) = &prove_away($alias, $room, 'return_list'); + for (;;) { + for ($i = 0; $i <= $#away; $i += 2) { + last if ($away[$i] eq $alias || $room eq $loginplace); + } + open DATEI, "<data/online/users/$alias"; + my $oldstamp = <DATEI>; + close DATEI; + if ($oldstamp > time - 100) { + open DATEI, "<data/user/counts/$alias.online"; + my $online = <DATEI>; + close DATEI; + my $total = time - $oldstamp + $online; + open DATEI, ">data/user/counts/$alias.online"; + print DATEI $total; + close DATEI; + } + last; + } + unless (-d "data/online/rooms/$room") { + mkdir "data/online/rooms/$room", 511; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + open DATEI, '<data/online/prove'; + my $provetime = <DATEI>; + close DATEI; + + &check_online if $provetime < time - 40; + print <<END; + <html> + <head> + <meta http-equiv="refresh" content="20" URL="chat?request=online&room=$room&alias=$alias&tmpid=$tmpid"> + <style type="text/css">\n a { font-family: arial; font-size:11px; color: #ffffef; }\n a:hover { color: #ffffff; }\n </style>\n <style type="text/css" media="all">\n a { text-decoration: none; }\n a:hover { text-decoration:underline; } + </style> + </head> + <body bgcolor="$chatbg"> +END + + opendir ROOM, 'data/online/rooms/' . $room; + my(@room) = readdir(ROOM); + closedir ROOM; + + my $chatter = $#room - 1; + print "<font size='1' color='ffffff' face='arial'>$room ($chatter):</font><table>\n"; + + open FILE, "<data/online/rstat/$room"; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + + open FILE, '<data/hierachie'; + my(@userlevels) = (<FILE>, @rstat); + close FILE; + + open FILE, "<data/online/rstat/$room.away"; + my(@away) = <FILE>; + close FILE; + + my $hierachie; + foreach (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($name eq $alias) { + $hierachie = $level; + last; + } + } + + my %alias; + foreach (@room) { + if (-f "data/online/rooms/$room/$_") { + open IDENT, "data/online/ident/$_"; + my @ident = <IDENT>; + close IDENT; + chomp $ident[2]; + chomp $ident[3]; + $alias{$ident[2]} = [$_, $ident[3]]; + + } + } + + @room = undef; + foreach my $value (reverse (sort { $a <=> $b } keys %alias)) { + push @room, ${$alias{$value}}[0] + } + + foreach my $nick (@room) { + if (-f "data/online/rooms/$room/$nick") { + my $inside = 0; + my $col = &get_ident($nick,3); + foreach $_ (@away) { + my($name, $awaymessage) = split(/<;/, $_, 3); + if ($name eq $nick) { + chomp $awaymessage; + $awaymessage =~ s/=//ig; + print "<tr><td><img border='0' title='$awaymessage' alt='$awaymessage' src='$gfxpath/away.gif'></td>"; + $inside = 2; + } + } + if ($inside == 0) { + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($nick eq $name) { + chomp $level; + $inside = 1; + if ($level == 1) { + print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>"; + last; + } + elsif ($level == 2) { + print "<tr><td><img title='Die Unschuld vom Land' alt='Die Unschuld vom Land' src='$gfxpath/uvl.gif'></td>"; + last; + } + elsif ($level == 3) { + print "<tr><td><img title='Temporärer Wächter' alt='Temporärer Wächter' src='$gfxpath/twa.gif'></td>"; + last; + } + elsif ($level == 5) { + print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>"; + last; + } + elsif ($level == 7) { + print "<tr><td><img title='oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>"; + last; + } + elsif ($level == 9) { + print "<tr><td><img title='Administrator' alt='Administrator' src='$gfxpath/adm.gif'></td>"; + last; + } + + if (5 <= $hierachie) { + if ($level == 6) { + print "<tr><td><img title='Wächter' alt='Unsichtbarer Wächter' src='$gfxpath/wa-i.gif'></td>"; + last; + } + elsif ($level == 8) { + print "<tr><td><img title='oberwächter' alt='Unsichtbarer Oberwächter' src='$gfxpath/ow-i.gif'></td>"; + last; + } + elsif ($level == 10) { + print "<tr><td><img title='Administrator' alt='Unsichtbarer Administrator' src='$gfxpath/adm-i.gif'></td>"; + last; + } + + } + print '<tr><td></td>'; + last; + } + } + } + if ($inside == 0) { + print '<tr><td></td>'; + } + print "<td><a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$nick&tmpid=$tmpid' target='$nick' style='color: $col'>$nick</a></td></tr>\n"; + } + } + print '</table></body></html>'; +} +1; diff --git a/0.8.0/modules/postmessage.pm b/0.8.0/modules/postmessage.pm new file mode 100755 index 0000000..f787534 --- /dev/null +++ b/0.8.0/modules/postmessage.pm @@ -0,0 +1,90 @@ +sub postmessage { + if (not -e "data/online/rooms/$room/$alias" and $tmp ne 'autoaway' and $tmp ne 'autologout') { + &post_prv($alias, "<font color=ffffff>Du befindest Dich nicht im Raum <font color=ffa500>$room</font> und kannst dort auch keine Nachrichten posten!</font>"); + &reload_html; + } + elsif (length $msg > 300) { + &post_prv($alias, "<font color=ffffff>Deine Nachricht enth\344lt zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>"); + &reload_html; + } + if ($tmp eq 'away') { + &rm_away($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat sich zur\374ck gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'notaway';]); + } + $msg =~ s/</</g; + if (substr($msg, 0, 1) ne '/') { + unless ($tmp eq 'autoaway') { + foreach $_ ($col, $secol) { + &prove_color($alias, $_); + } + } + open MSGFILE, ">>data/msgs/$room"; + if (not $msg =~ s[/me/][<i>$alias</i>]g || $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g) { + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color='$col'>$alias: <font color='$secol'>$msg<br></font></font></b><;$alias<;\n"; + } + else { + $msg =~ s[/me/][<i>$alias</i>]g; + $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color=$secol>$msg</font></font></b><br><;$alias<;\n"; + } + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } + &log("<b><font color=$col>$alias: <font color=$secol>$msg</font></font></b>") if $room eq $standardroom; + &reload_html; + } + else { + &command($msg, $tmp); + } +} +sub post { + my($room, $msg2post, $alias, $secroom) = @_; + my(@rooms) = $room; + push @rooms, $secroom if $room ne $secroom; + foreach my $theroom (@rooms) { + open MSGFILE, ">>data/msgs/$theroom"; + print MSGFILE '!<;' . time . "<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$theroom"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$theroom/$_"; + } + } + &log($msg2post) if $room eq $standardroom; +} +sub post_prv { + my($alias2post, $msg2post) = @_; + my $roomofalias = &get_room($alias2post); + return 'false' if not $roomofalias; + open MSGFILE, ">>data/msgs/$roomofalias"; + print MSGFILE "$alias2post<;" . time . "<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$roomofalias"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$roomofalias/$_"; + } + return 'true'; +} +sub post_strmsg { + my($alias, $room, $command, $action) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . "<;$command<;$action<;!<;!<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} + +1; diff --git a/0.8.0/modules/shared.pm b/0.8.0/modules/shared.pm new file mode 100755 index 0000000..e458953 --- /dev/null +++ b/0.8.0/modules/shared.pm @@ -0,0 +1,353 @@ +sub reload_html { + print "<html><body bgcolor='$chatbg'></body></html>"; + &del_awake(); + $client->shutdown(2); + exit 0; +} +sub printfile { + my($file2print, $pagetitle, $bodyclass) = @_; + &start_html($pagetitle, $bodyclass) if $pagetitle ne ''; + &menu unless $bodyclass eq 'blank'; + open FILE2PRINT, "<$file2print"; + print "$_\n" while defined($_ = <FILE2PRINT>); + close FILE2PRINT; +} +sub start_html { + print "<html><head><title>$title - $_[0]</title>$_[2]"; + &style; + print '</head>'; + if ($_[1] eq 'start') { + print '<body onload="document.login.alias.focus();">'; + } + elsif ($_[1] ne '') { + print "<body class=$_[1]>"; + } + else { + print '<body>'; + } +} +sub log { + my $msg2log = $_[0]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + my $js; + $hours--; + ($msg2log, $js) = split(/<script/, $msg2log, 3); + open LOG, ">>data/logs/$days.$months.$years"; + print LOG "<br><font color=ffffef><i>($hours:$mins:$secs)</i></font> $msg2log\n"; + close LOG; +} +sub timestring { + my($mins, $hours) = (localtime)[1, 2]; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + return "$hours:$mins"; +} +sub timearray { + my($secs, $mins, $hours, $days, $months, $years) = (localtime)[(0, 1, 2, 3, 4, 5)]; + $months += 1; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + $secs = '0' . $secs if $secs < 10; + $days = '0' . $days if $days < 10; + $months = '0' . $months if $months < 10; + $years = $years - 100; + if ($years < 10) { + $years = '200' . $years; + } + else { + $years = '20' . $years; + } + return $secs, $mins, $hours, $days, $months, $years; +} +sub error { + my $error_msg = $_[0]; + &start_html("Error: ($error_msg)"); + print $q->div("Error: ($error_msg)"), $q->end_html; + open ERROR, '>>data/error'; + print ERROR "Alias: $alias TempID: $tmpid File. $0 PID: $$ Time: " . time . " Message: $error_msg \n"; + close ERROR; + $client->shutdown(2) if $client; + exit 0; +} +sub check_online { + open PROVE, '>data/online/prove'; + print PROVE time; + close PROVE; + opendir DIR, 'data/online/rooms'; + my(@roomdir) = readdir DIR; + closedir DIR; + foreach my $theroom (@roomdir) { + opendir DIR, "data/online/rooms/$theroom"; + my(@roomusers) = readdir DIR; + closedir DIR; + my $empty = 1; + foreach $user (@roomusers) { + if (-f "data/online/rooms/$theroom/$user") { + $empty = 0; + open USER, "<data/online/rooms/$theroom/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + unlink "data/online/$theroom/$user"; + open USER, "<data/online/users/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + &post($theroom, '<i><font color=ffffff>' . ×tring . " <font color='".&get_ident($user,3)."'>$user</font> hat den Chat verlassen ... </font></i>"); + if ($user ne $alias) { + &rm_alias($user, $theroom); + } + else { + unlink "data/online/rooms/$theroom/$user"; + } + } + } + } + } + opendir PIDS, "data/online/pids/$theroom"; + my(@pids) = readdir PIDS; + closedir PIDS; + if ($empty == 1) { + rmdir "data/online/rooms/$theroom"; + unlink "data/online/rstat/$theroom"; + unlink "data/online/rstat/$theroom.away"; + unlink "data/msgs/$theroom"; + foreach $_ (@pids) { + unlink "data/online/pids/$theroom/$_" if -f "data/online/pids/$theroom/$_"; + } + rmdir "data/online/pids/$theroom"; + } + } +} +sub rm_if_loggedin { + my $alias = shift; + my $room = &get_room($alias); + while ($room ne undef) { + &rm_alias($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$user</font> hat den Chat verlassen ... </font></i>"); + $room = &get_room($alias); + } +} +sub secure_checkid { + my($alias2check, $tmpid) = @_; + &error("Falsche TempID! $tmpid") unless -f "data/online/tmpid/$alias.$tmpid"; +} +sub rm_alias { + my($alias, $room) = @_; + unlink "data/online/rooms/$room/$alias"; + unlink "data/online/users/$alias"; + opendir TMPID, 'data/online/tmpid'; + my(@tmpid) = readdir TMPID; + close TMPID; + foreach $_ (@tmpid) { + unlink "data/online/tmpid/$_" if /^$alias\..+$/; + } + unlink "data/online/ident/$alias"; + &rm_rstat($alias, $room); +} +sub rm_rstat { + my($alias, $room) = @_; + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + my(@rstat2) = ($rstat[0], $rstat[1]); + for ($i = 2; $i <= $#rstat; ++$i) { + chomp $rstat[$i]; + push @rstat2, $rstat[$i] . "\n" unless $rstat[$i] =~ /^$alias<;/; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT @rstat2; + close RSTAT; +} +sub rm_away { + my($alias, $room) = @_; + open AWAY, "<data/online/rstat/$room.away"; + my(@away) = <AWAY>; + close AWAY; + my @away2; + foreach $_ (@away) { + my(@split) = split(/<;/, $_, 0); + push @away2, $_ if $alias ne $split[0]; + } + open AWAY, ">data/online/rstat/$room.away"; + print AWAY @away2; + close AWAY; +} +sub rm_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + my @new; + foreach $_ (@entry) { + push @new, $_ if $entry . "\n" ne $_; + } + if (@entry != @new) { + open ENTRY, ">data/$file"; + print ENTRY @new; + close ENTRY; + return 1; + } + else { + return; + } +} +sub add_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + foreach $_ (@entry) { + chomp $_; + return if $entry eq $_; + } + open ENTRY, ">>data/$file"; + print ENTRY $entry . "\n"; + close ENTRY; + return 1; +} +sub prove_color { + my($alias, $color) = @_; + my $length = length $color; + if ($length > 6 or $length < 6) { + &post_prv($alias, "<font color=ffffff>Ung\374ltige Hexadezimalfarbe.</font>"); + &reload_html; + } +} +sub kill_alias { + my($alias2kill, $alias) = @_; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + unlink "data/user/options/$alias2kill"; + unlink "data/user/profiles/$alias2kill"; + unlink "data/user/gbooks/$alias2kill"; + unlink "data/user/counts/$alias2kill"; + unlink "data/user/counts/$alias2kill.online"; + unlink "data/user/lastlogin/$alias2kill"; + unlink "data/user/memos/$alias2kill"; + &rm_entry($alias2kill, 'ban'); + open DEL, '>>data/kill'; + print DEL "($days.$months.$years $hours:$mins:$secs) $alias2kill wurde von $alias gekillt\n"; + close DEL; +} +sub random_color { + my(@digit) = ('F', 'C', 'A', 'B', (5, 6, 7, 8, 9)); + my $dig1 = rand @digit; + my $dig2 = rand @digit; + my $dig3 = rand @digit; + my $dig4 = rand @digit; + my $dig5 = rand @digit; + my $dig6 = rand @digit; + return $digit[$dig1] . $digit[$dig2] . $digit[$dig3] . $digit[$dig4] . $digit[$dig5] . $digit[$dig6]; +} +sub url_decode { + my $t = shift @_; + $t =~ s[/][]; + $t =~ tr/+/ /; + while ($t =~ s/%([a-f0-9][a-f0-9])/chr hex $1;/ie) { + (); + } + return $t; +} +sub url_encode { + my $t = shift @_; + while ($t =~ s/([^\w()'*~!.-])/sprintf '%%%02x', $1;/eg) { + (); + } + return $t; +} +sub calculate_hpm { + my($hits, $starttime) = @_; + return sprintf('%.2f', $hits / ((time - $starttime) / 60)); +} +sub calculate_uptime_hours { + my $starttime = shift @_; + return sprintf('%.2f', (time - $starttime) / 3600); +} +sub private_javascript { + my($alias, $room, $javascript) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . qq[<;!<;!<;<script language="JavaScript">$javascript</script><;\n]; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} +sub get_theme { + my $room = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + return '<b>Raumthema:</b>' . $rstat[1] if $rstat[1] ne undef; +} +sub get_room { + my $alias = shift @_; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $room (@dir) { + opendir DIR, "data/online/rooms/$room"; + my(@chatter) = readdir DIR; + closedir DIR; + foreach my $chatter (@chatter) { + return $room if $chatter eq $alias; + } + } + return undef; +} +sub get_ident { + my ($alias,$line) = @_; + open IDENT, "data/online/ident/$alias"; + my (@ident) = <IDENT>; + close IDENT; + chomp $ident[$line]; + return $ident[$line]; +} +sub get_online_users { + my @dir = &diropen('data/online/rooms'); + my @users; + + foreach my $room (@dir) { + next if $room =~ /\./; + my @room = &diropen("data/online/rooms/$room"); + + foreach (@room) { + push @users, $_ unless /\./; + } + } + return @users; +} +sub get_online_time { + my $alias = shift; + if (-f "data/user/options/$alias") { + open ONLINE, "<data/user/counts/$alias.online"; + my $online = <ONLINE>; + close ONLINE; + return sprintf('%.2f', $online / 3600); + } + return false; +} +sub diropen { + my $dir = shift; + + opendir DIR, $dir; + my @dir = readdir(DIR); + closedir(DIR); + + return @dir; +} +sub del_awake { + unlink "data/online/awake/$$"; +} +sub debug { + open DEBUG, '>>debug'; + while (@_) { + chomp $_; + print DEBUG "$_\n"; + } + close DEBUG; +} +1; diff --git a/0.8.0/modules/start.pm b/0.8.0/modules/start.pm new file mode 100755 index 0000000..4fe416b --- /dev/null +++ b/0.8.0/modules/start.pm @@ -0,0 +1,264 @@ +sub start { + if ($var eq 'create_alias_html') { + &create_alias_html; + } + elsif ($var eq 'create_alias') { + &create_alias; + } + elsif ($var eq 'login_html') { + &login_html; + } + elsif ($var eq 'chatiquette_html') { + &chatiquette_html; + } + elsif ($alias eq '') { + &login_html; + } + else { + &checklogin; + } +} +sub login_html { + &check_online; + my $counter = undef; + open COUNT, '<data/count'; + $counter = <COUNT>; + close COUNT; + ++$counter; + open COUNT, '>data/count'; + flock COUNT, 2; + print COUNT $counter; + close COUNT; + + my(@users) = &get_online_users; + + opendir REGISTRED, 'data/user/options'; + my(@registred) = readdir REGISTRED; + closedir REGISTRED; + + my($logtin, $users) = ($#users + 1, $#registred - 1); + &start_html("Created & Copyright by Paul C. B\374tow", 'start'); + print qq[ <center>\n <table width=500>\n <tr>\n <td>\n <center>\n <table>\n <tr>\n <td>\n <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=240 HEIGHT=240>\n <param name=movie value="$gfxpath/yIntro.swf">\n <param name=loop value=false>\n <param name=menu value=false>\n <param name=quality value=high>\n <param name=scale value=noborder>\n <param name=wmode value=opaque>\n <param name=bgcolor value=$bgcolor>\n <embed src="$gfxpath/yIntro.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=240 HEIGHT=240 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </object>\n </td>\n <td>\n <div>\n yChat: Version $version\n <br><br>\n Letztes Update: $datum\n <br><br>\n Seitenaufrufe: $counter\n <br><br>\n Benutzer registriert: $users\n <br><br>\n Benutzer online: $logtin\n <br><br>\n Benutzerlimit: $limit\n <br><br>\n Beta-yChat: <a href="http://www.java.yChat.de">www.java.yChat.de</a>\n <br><br><a href="http://www.webchat.de" target="_new"> <img src="http://www.webchat.de/webchat.gif" alt="[webchat]" title="[webchat]" border="0"></a><br>\n<img src="http://stats.topwebmaster.net/extern/de/snooper"></div></td>\n </tr>\n </table>\n </center>\n </div>\n <br>\n <br>\n]; + if ($tmp eq 'true') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Wahrscheinlich existiert Dein Alias "$alias" nicht,\n <br>\n Du hast Dich verschrieben oder das Passwort ist falsch.\n <br>\n Versuch es erneuert !\n </div>\n]; + } + elsif ($tmp eq 'quit') { + print qq[ <div>\n Du hast soeben den Chat verlassen.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autologout') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autokick') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat katapultiert. Grund: Du hast den Chat geflutet!\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'banned') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest aus dem Chat verbannt!!!\n <br>\n Z.z. kannst Du Dich leider nicht in den Chat einloggen.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'kick') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat katapultiert!\n <br>\n Schlechtes Verhalten mag die Ursache hierf\374r sein.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'selfkill') { + print qq[ <div>\n Du hast dich soeben ganz und gar aus dem System gel\366scht!\n <br>\n Wenn du dir einen neuen Nick angelen willst, dann einfach auf "Registrieren" klicken! :-)\n </div>\n]; + } + elsif ($tmp eq 'selfkill') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat ausgeloggt!\n <br>\n Ursache hierf\374r mag sein, da\337 der Chat voll war und Du Dich nicht am\n Geschehen beteiligt- und unn\366tige Chatkapazit\344ten in Anspruch\n genommen hast.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'full') { + print "<div class=b>ACHTUNG!</div><div>Der Chat ist leider voll! Bitte versuch Dich sp\344ter noch mal einzuloggen!</div>"; + } + elsif ($var eq 'create_alias') { + print q[<div>Du hast sich soeben in die Datenbank eingetragen. Einfach auf "Los Geht's" klicken :-)</div>]; + } + else { + print qq[ <div>\n Herzlich willkommen!\n <br>\n Einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + print qq[ <hr>\n <form name="login" method="GET">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="tmp" value="true">\n <table>\n <tr>\n <td>\n <div>\n Dein Alias:\n <br>\n <input name="alias" value="$alias">\n </div>\n </td>\n <td>\n <div>\n Dein Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n </td>\n </tr>\n </table>\n <br>\n <br>\n <div>\n Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken!\n </div>\n <br>\n <table>\n <tr>\n <td>\n <font color="ffffff">\n <input type="submit" value="Los geht's!">\n </font>\n </form>\n </td>\n <td>\n <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias_html">\n <font color="ffffff">\n <input type="submit" value="Registrieren">\n </font>\n </form>\n </td>\n </tr>\n </table>\n <hr>\n]; + if ($logtin > 0) { + print q[<div>Folgende Personen sind eingeloggt:<br><font size='1'>]; + foreach $_ (@users) { + print "$_ " if -f "data/online/users/$_"; + } + print '</font></div>'; + } + print " </td>\n </tr>\n </table>\n </center>\n</body>\n</html>\n"; + unless (-d 'data/online/rooms') { + mkdir 'data/online/rooms', 511; + } +} +sub create_alias_html { + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq 'ip://' . $client->peerhost) { + $tmp = 'banned'; + &login_html; + &del_away(); + $client->shutdown(2); + exit 0; + } + } + my $reload = $_[0]; + &start_html('Registration'); + print " <center>\n <table width=500>\n <tr>\n <td>\n"; + if ($reload eq 'alias_exists') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Der von Dir gew\344hlte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit\n einem anderen Benutzernamen !\n </div>\n <hr>\n]; + } + elsif ($reload eq 'pw_wrong') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Deine beiden Passworteingaben stimmen nicht \374berein. Bitte geb das Passwort erneuert an um sicherzugehen, da\337\n kein falsches Passwort abgespeichert wird !\n </div>\n <hr>\n"; + } + elsif ($reload eq 'alias_prohibited') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt illegale Zeichen. Bitte versuch einen anderen Benutzernamen!\n </div>\n <hr>\n]; + } + elsif ($reload eq 'alias_length') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!\n </div>\n <hr>\n]; + } + else { + print " <div>\n Hier kannst Du Dich registrieren. Bitte beachte, da\337 die Passworteingabefelder \374bereinstimmen!\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias">\n <div>\n Dein Alias:\n <font color="ffa500">\n (Mu\337 angegeben werden)\n </font>\n <br>\n <input name="alias" VALUE="$alias">\n </div>\n <br>\n <div>\n Dein gew\374nschtes Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n <br>\n <div>\n Geb hier Dein Passwort erneuert ein:\n <br>\n <input type="password" name="tmp">\n </div>\n <br>\n <font color=ffffff>\n <input type="submit" value="Registrieren">\n </font>\n <br>\n </form>\n <hr>\n <div>\n Um den Chat zu betreten m\374ssen die Daten nach der Registration auf der Startseite erneuert best\344tigt werden !\n </div>\n </td>\n </tr>\n </table>\n</center>\n</body>\n</html>\n]; +} +sub checklogin { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + closedir USERS; + my $users = $#users; + if ($users > $limit && 3 > &hierachie($alias)) { + $tmp = 'full'; + &login_html; + &del_away(); + $client->shutdown(2); + exit 0; + } + my $lognotexists = 'true'; + opendir USERDIR, 'data/user/options'; + my(@userdir) = readdir USERDIR; + closedir USERDIR; + foreach $user (@userdir) { + if ($user eq $alias) { + open OPTIONS, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + foreach $_ (@options) { + chomp $_; + } + if ((crypt $pw, $cryptkey) eq $options[0] || $options[0] eq $pw) { + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq $alias or $_ eq 'ip://' . $client->peerhost) { + if (-f "data/online/users/$admin") { + &post_prv($admin, "<font color=ffffff><font color=ffa500>$_</font> kann sich nicht einloggen (Ist verbannt)!!</font>"); + } + $tmp = 'banned'; + &login_html; + &del_away(); + $client->shutdown(2); + exit 0; + } + } + if ($options[1] eq undef) { + $col = &random_color; + } + else { + $col = $options[1]; + } + if ($options[2] eq undef) { + $secol = &random_color; + } + else { + $secol = $options[2]; + } + if ($options[3] eq undef) { + $maxVerlauf = '10'; + } + else { + $maxVerlauf = $options[3]; + } + if ($options[4] eq undef) { + $verlaufOrder = '1'; + } + else { + $verlaufOrder = $options[4]; + } + &rm_if_loggedin($alias); + # Sorry weil so ausführlich, der Code-Optimizer formulierte dies um! + my(@digit) = (('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'), ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'), (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), '.'); + my $num1 = rand @digit; + my $num2 = rand @digit; + my $num3 = rand @digit; + my $num4 = rand @digit; + my $num5 = rand @digit; + my $num6 = rand @digit; + my $num7 = rand @digit; + my $num8 = rand @digit; + my $num9 = rand @digit; + my $num10 = rand @digit; + my $num11 = rand @digit; + my $num12 = rand @digit; + $tmpid = $digit[$num1] . $digit[$num2] . $digit[$num3] . $digit[$num4] . $digit[$num5] . $digit[$num6] . $digit[$num7] . $digit[$num8] . $digit[$num9] . $digit[$num10] . $digit[$num11] . $digit[$num12]; + open TMPID, ">data/online/tmpid/$alias.$tmpid"; + print TMPID $alias; + close TMPID; + open IDENT, ">data/online/ident/$alias"; + print IDENT $client->peerhost . "\n$tmpid\n" . &get_online_time($alias) . "\n$col\n$secol\n"; + close IDENT; + open LASTLOGIN, ">data/user/lastlogin/$alias"; + print LASTLOGIN time; + close LASTLOGIN; + &frameset_html; + &del_away(); + $client->shutdown(2); + exit 0; + } + else { + $lognotexists = 'false'; + } + } + } + &login_html; +} +sub create_alias { + if ($alias =~ /\W/ or $alias eq '') { + goto CREATE if $alias =~ /[-]/ and not $alias =~ /\W/; + &create_alias_html('alias_prohibited'); + &del_away(); + $client->shutdown(2); + exit 0; + } + elsif ($pw ne $tmp) { + &create_alias_html('pw_wrong'); + &del_away(); + $client->shutdown(2); + exit 0; + } + elsif (length $alias >= 15) { + &create_alias_html('alias_length'); + &del_away(); + $client->shutdown(2); + exit 0; + } + CREATE: opendir USERDIR, 'data/user/options'; + my(@user) = readdir USERDIR; + close USERDIR; + foreach $user (@user) { + if ($user eq $alias) { + &create_alias_html('alias_exists'); + &del_away(); + $client->shutdown(2); + exit 0; + } + } + $pw = crypt $pw, $cryptkey; + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $pw . "\n"; + close OPTIONS; + &login_html; +} +sub frameset_html { + print qq[<html>\n <head>\n <title>\n $title\n </title>\n </head>\n<frameset border=0 frameborder=0 framespacing=0 cols="130,*">\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name="online" src="chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid">\n <frameset border=0 frameborder=0 framespacing=0 cols="70,*">\n <frame name="logo" src="chat?request=htdocs&var=logo_html" scrolling="no">\n <frame name="reload" src="chat?request=htdocs" scrolling="no">\n </frameset>\n </frameset>\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name='main' src='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder'>\n <frame name="input" src="chat?request=htdocs" scrolling="no">\n </frameset>\n</frameset>\n</html>\n]; +} +1; diff --git a/0.8.0/modules/statistic.pm b/0.8.0/modules/statistic.pm new file mode 100755 index 0000000..a0aad73 --- /dev/null +++ b/0.8.0/modules/statistic.pm @@ -0,0 +1,148 @@ +sub statistic { + &start_html('Statistiken'); + &menu; + print $q->div('yChat Statistiken'), $q->hr, $q->div($q->a({-'href', "chat?request=statistic&var=ranking&alias=$alias&tmpid=$tmpid"}, 'Rankings'), ' | ', $q->a({-'href', "chat?request=statistic&var=del&alias=$alias&tmpid=$tmpid"}, 'Loginstatistiken'), ' | ', $q->a({-'href', "chat?request=statistic&var=statistic&alias=$alias&tmpid=$tmpid"}, 'DB-Statistik'), ' | ', $q->a({-'href', "chat?request=statistic&var=var&alias=$alias&tmpid=$tmpid"}, 'Umgebungsvariablen')), $q->hr; + if ($var eq 'ranking') { + opendir COUNTS, 'data/user/counts'; + my(@counts) = readdir COUNTS; + closedir COUNTS; + print '<div>'; + my $nr_start = $start; + my $nr_end = $end; + my %online; + my $rank; + my $nr; + foreach $_ (@counts) { + if (-f "data/user/counts/$_") { + if (s/.online//g) { + open TOTAL, "<data/user/counts/$_.online"; + my $total = <TOTAL>; + close TOTAL; + $online{sprintf '%.2f', $total / 3600} = $_; + } + } + } + print '<div>', $q->b('Rankings:'), $q->br, '<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>'; + if (not $nr_start) { + $nr_start = 1; + } + if (not $nr_end) { + $nr_end = 20; + } + foreach $wert (reverse (sort { $a <=> $b } keys %online)) { + ++$nr; + if ($online{$wert} eq $alias) { + $rank = $nr; + last if $nr > $nr_end; + } + next if ($nr < $nr_start or $nr > $nr_end); + print q[<tr><td><font color='ffffff' size='1' face='arial'>] . $nr . q[</font></td><td><font color='ffffff' size='1' face='arial'> ] . $wert . "h </font></td><td> <a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n"; + } + print '</table>', $q->hr; + $nr_start -= 20; + $nr_end -= 20; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" if $nr_start > 0; + $nr_start += 40; + $nr_end += 40; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...", $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>"); + } + elsif ($var eq 'del') { + print '<div>', $q->b('Alte Benutzer löschen:'), $q->br, "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gel\366scht.", $q->br, $q->br; + opendir USER, 'data/user/options'; + my(@user) = readdir USER; + closedir USER; + @user = sort(@user); + my $i = 0; + my $j; + my $k = 0; + my $l = 0; + my $full = $tmp; + foreach $_ (@user) { + if (-f "data/user/lastlogin/$_") { + open LOGIN, "<data/user/lastlogin/$_"; + my $login = <LOGIN>; + close LOGIN; + $login = sprintf('%.2f', (time - $login) / 3600); + ++$j; + if (999 < $login and $login < 1440) { + ++$k; + print $q->font({-'color', 'ffa500'}, $q->b("$j($k) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 48) { + ++$l; + print $q->font({-'color', 'ffffef'}, $q->b("$j($l) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 1440) { + print "$j $_ Letztes Login vor: " . $login . 'h', $q->br, "\n" if $full ne undef; + } + else { + ++$k; + &kill_it($_, $i++, $login); + } + } + elsif (-f "data/user/options/$_") { + &kill_it($_, $i++); + } + } + print $q->hr if $full ne undef; + print '</div>', $q->div($q->b("$j Benutzer befinden sich in der Datenbank!", $q->br, $q->font({-'color', 'ffffef'}, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br, $q->font({-'color', 'ffa500'}, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br, $q->font({-'color', 'ff0000'}, "$i Benutzer wurden gerade eben gel\366scht!")), $q->br, $q->br, 'PS: Jeder registrierte Benutzername wird nur einmal gezählt!'); + print $q->br, $q->div('(', $q->a({-'href', "chat?request=statistic&var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, 'Vollständige Ansicht'), ')') if $full eq undef; + } + elsif ($var eq 'var') { + print '<div>', $q->b('Server Umgebungsvariablen:'), $q->br, $q->br, 'Die Serverumgebungsvariablen können nur von Oberwächtern oder höher eingesehen werden!', $q->br, $q->br; + if (7 <= &hierachie($alias)) { + while (($key, $value) = each %ENV) { + print "$key = $value\n", $q->br; + } + } + print '</div>'; + } + elsif ($var eq 'statistic') { + print $q->div($q->b('yChat-DB Statistik:')), $q->br; + $files = 0; + $size = 0; + $directorys = 1; + &zaehle('data'); + $size = sprintf('%.2f', $size / 1048576); + print $q->div("Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys"); + } + print $q->end_html; +} +sub zaehle { + local($dir, $data) = @_; + $dir = "$dir/$data" if $data ne undef; + opendir DATA, $dir; + local(@data) = readdir DATA; + closedir DATA; + $files2 = 0; + foreach $_ (@data) { + if (-f "$dir/$_") { + ++$files; + ++$files2; + $size += -s "$dir/$_"; + } + elsif (-d "$dir/$_" and $_ ne '.' and $_ ne '..') { + ++$directorys; + &zaehle($dir, $_); + } + } +} +sub kill_it { + my($rm, $nr, $login) = @_; + $login = 'XXXXXX' if $login eq undef; + print $q->font({-'color', 'ff0000'}, $q->b("$j($nr) $rm Letztes Login vor: " . $login . 'h (wurde gelöscht)')), $q->br, "\n"; + print q[<font size='1'>]; + print 'options ' if unlink "data/user/options/$rm"; + print 'profiles ' if unlink "data/user/profiles/$rm"; + print 'gbooks ' if unlink "data/user/gbooks/$rm"; + print 'counts ' if unlink "data/user/counts/$rm"; + print 'counts.online ' if unlink 'data/user/counts/' . $rm . '.online'; + print 'lastlogin ' if unlink "data/user/lastlogin/$rm"; + print 'memos' if unlink "data/user/memos/$rm"; + print '</font>', $q->hr, "\n"; + &zeit; + open DEL, '>>data/kill'; + print DEL "($day.$month.$year $hours:$min:$sec) $rm wurde automatisch gekillt [$alias]\n"; + close DEL; +} +1; diff --git a/0.8.0/modules/stream.pm b/0.8.0/modules/stream.pm new file mode 100755 index 0000000..2885d8b --- /dev/null +++ b/0.8.0/modules/stream.pm @@ -0,0 +1,170 @@ +sub stream { + unlink "data/online/rooms/$loginplace/$alias"; + &secure_checkid($alias, $tmpid); + my $pid = $$; + $SIG{'CHLD'} = 'IGNORE'; + ++$|; + print qq[<html>\n <head>\n<script language="JavaScript">\n<!--\n open('chat?request=online&room=$room&alias=$alias&tmpid=$tmpid','online');\n open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// Scroll-Routine von Anklepper (http://www.anklepper.de)\n// speziell f\374r yChat (http://www.yChat.de), Copyright 2000\nscrolling = true;\nmoves_steps = 4;\nmoves_interval = 4;\nfunction moves()\n{\n if( scrolling != false )\n window.scrollBy( 0, moves_steps );\n window.setTimeout( "moves()", moves_interval );\n}\nmoves();\n//-->\n</script>\n</head>\n<body bgcolor="$chatbg">\n]; + &check_online; + print "<font size=1 color=ffffff face=arial>$title - Letzte Änderung $datum\n; Der Chat wird geladen...\n<br>"; + sleep 1; + print "<b>Hallo <font color=$col>$alias</font></b>, mit dem Befehl /menu kannst du das Chat-Menü aufrufen!<br>"; + sleep 1; + print "Du befindest dich im Raum <b>$room</b>: " . get_theme($room) . "<br>\n"; + print "</font>\n"; + + if (-f "data/user/memos/$alias") { + open MEMOS, "<data/user/memos/$alias"; + my(@memos) = <MEMOS>; + close MEMOS; + my $memos; + foreach $_ (@memos) { + $memos .= $_; + } + print $memos; + unlink "data/user/memos/$alias"; + } + + my ($change_room, + $startime, + $flooding, + @ignore, + @flood); + + OPENMSGFILE: + $change_room = 0; + $startime = time; + $flooding = 0; + unless (-f "data/online/rstat/$room") { + open DATEI, ">data/online/rstat/$room"; + print DATEI "0\n\n$alias<;1\n"; + close DATEI; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + if (-e "data/msgs/$room") { + open MSGFILE, "<data/msgs/$room"; + mkdir 'data/online/pids', 511 unless -d 'data/online/pids'; + mkdir "data/online/pids/$room", 511 unless -d "data/online/pids/$room"; + open PID, ">data/online/pids/$room/$pid"; + print PID time; + close PID; + } + else { + sleep 1; + goto OPENMSGFILE; + } + &sendmsgs; + while (-f "data/online/users/$alias") { + local $SIG{'USR1'} = \&sendmsgs; + goto OPENMSGFILE if $change_room == 1; + unlink "data/online/rooms/$loginplace/$alias" + if (-f "data/online/rooms/$loginplace/$alias"); + sleep 15; + print "\n"; + } + sub sendmsgs { + for ($curpos = tell MSGFILE; defined($_ = <MSGFILE>); $curpos = tell MSGFILE) { + my($address, $stamp, $command, $action, $message, $from) = split(/<;/, $_, 7); + if ($address =~ /$\!/ or $address eq $alias) { + if ($stamp > $startime) { + if ($command eq 'col') { + ($col, $secol) = split(/;/, $action, 3); + } + elsif ($command eq 'cr') { + unlink "data/online/pids/$room/$pid"; + $room = $action; + close MSGFILE; + $change_room = 1; + } + elsif ($command eq 'ig') { + my @temp; + my $add2list = 1; + foreach $_ (@ignore) { + if ($action ne $_) { + push @temp, $_; + } + else { + $add2list = 0; + } + } + if ($add2list == 1) { + push @ignore, $action; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias ignoriert!</font>"); + } + else { + @ignore = @temp; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun nicht mehr ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias nicht mehr ignoriert!</font>"); + } + } + elsif ($command eq 'igl') { + my $ignored; + foreach $_ (@ignore) { + $ignored .= "$_ "; + } + if ($#ignore == -1) { + print "<font color='#ffffff'>Momentan wird keine Person von dir ignoriert!</font><br>\n"; + } + else { + print "<font color='#ffffff'>Folgende Personen werden von dir ignoriert: <font color='#ffa500'>$ignored</font>!</font><br>\n"; + } + } + elsif ($command eq 'quit') { + print "<script language='JavaScript'>\n"; + print "open('chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid','online');\n"; + print "open('chat?request=htdocs','input');\n"; + print "open('chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');\n"; + print "</script>\n"; + last; + } + elsif ($change_room != 1) { + my $ignored = 0; + foreach $_ (@ignore) { + if ($_ eq $from) { + $ignored = 1; + last; + } + } + if ($ignored != 1) { + print "$message\n"; + } + else { + $address =~ s/!//; + &post_prv_extra($from, "<font color='#ff0000'>Du wirst von $alias ignoriert!</font>") if $address eq $alias; + } + } + push @flood, $address . $command . $action . $message . $from; + if ($flood[0] eq $flood[1] and $flood[0] eq $flood[2] and $flood[0] eq $flood[3]) { + print "<i><font color=red>$from flutet den Chat !</font></i><br>\n"; + if ($from eq $alias and $flooding++ and $flooding >= 4) { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='ffa500'><b>Das System</b></font> katapultiert <font color='".&get_ident($alias,3)."'>$alias</font>> wegen Fluten des Chats nach draussen ... </font></i>", $alias); + print "<script language='JavaScript'>open('chat?request=start&tmp=autokick','_top');</script>\n"; + &rm_alias($alias, $room); + } + } + else { + $flooding = 0; + } + shift @flood if $#flood > 2; + } + } + } + seek MSGFILE, $curpos, 0; + } + unlink "data/online/pids/$room/$pid"; +} +sub post_prv_extra { + my($alias, $message) = @_; + my $helpid = fork; + if ($helpid == 0) { + &post_prv($alias, $message); + exit 0; + } +} +1; diff --git a/0.8.0/modules/webchat.pm b/0.8.0/modules/webchat.pm new file mode 100755 index 0000000..90f8731 --- /dev/null +++ b/0.8.0/modules/webchat.pm @@ -0,0 +1,22 @@ +sub webchat { + my @rooms = &diropen('data/online/rooms'); + my $output; + + foreach my $room (@rooms) { + next if ($room =~ /\./); + my @users = &diropen("data/online/rooms/$room") or print "$!\n"; + + foreach my $user (@users) { + next if ($user =~ /\./); + open FILE, "data/online/rooms/$room/$user"; + my $timestamp = <FILE>; + close FILE; + chomp $timestamp; + + $output = $output . "($user)($timestamp)($room)\n"; + } + } + + print $output; +} +1; diff --git a/0.8.0/setup.sh b/0.8.0/setup.sh new file mode 100755 index 0000000..460655c --- /dev/null +++ b/0.8.0/setup.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +mke2fs /dev/ram0 +mke2fs /dev/ram1 + +mkdir data +cd data +mkdir {logs,msgs,user,online} +mount /dev/ram0 msgs +mount /dev/ram1 online +cd user +mkdir {counts,memos,options,profiles,gbooks,lastlogin} +cd ../online +mkdir {rstat,rooms,pids,users,ident,tmpid,awake} +cd .. + +chmod 700 * -R +chown yC * -R diff --git a/0.8.0/templates/chatiq.sno b/0.8.0/templates/chatiq.sno new file mode 100755 index 0000000..2a024f5 --- /dev/null +++ b/0.8.0/templates/chatiq.sno @@ -0,0 +1 @@ +<div><h2>Chatiquette</h2></div><hr><div>Hier einige Grundlagen ...</div><style type="text/css"> li { color: #ffffff }</style><ul><li><div>Vergiss nie, dass am anderen Ende auch nur Menschen sitzen. Diese mögen es gar nicht, angepöbelt, beleidigt oder in sonstiger Weise angegriffen zu werden.</div></li><li><div>Störend ist auch immer, wenn ein privater Streit im Chat ausgetragen wird. Tragt eure privaten Sachen ausserhalb des Chats aus.<br>Selbst wenn es nur Spass ist - weiss der Rest im Chat das?</div></li><li><div>Dauergeschrei fällt auch immer wieder störend auf. Was in Grossbuchstaben geschrieben wird, wird als Schreien bezeichnet.</div></li><li><div>Unsere ganz besonderen Spezialisten wollen auch immer wieder rausfliegen. Um das zu erreichen, senden sie die ganze Zeit Unsinn.</div></li><li><div>Diskussionen sind dagegen kein Problem. Dafür ist ein Chat ja da. Sobald allerdings das Thema der Diskussion zu sehr entgleist, sollte die Diskussion in einen etwas weniger öffentlichen Raum verlegt werden.</div></li></ul><div>Daraus ergeben sich folgende Regeln:</div><ul><li><div>keinen beleidigenden Wortschatz verwenden</div></li><li><div>obzöner und verfassungsfeindlicher Wortschatz fällt auch weg</div></li><li><div>streitet euch woanders oder in einem privaten Raum</div></li><li><div>schreit nich so viel</div></li><li><div>schreibt keinen Unsinn, der so aussieht, als ob eure Katze über die Tastatur gelaufen ist</div></li><li><div>schreibt nicht zu schnell hintereinander, besonders nicht dasselbe</div></li><li><div>verlagert die Diskussion, wenn sich jemand gestört fühlt</div></li><li><div>Diese Liste ist nicht vollständig. Mit dem gesunden Menschenverstand sollte es eigentlich möglich sein, sich die nicht aufgeführten Punkte zu denken.</div></li></ul><div>So - nach den ganzen "lass-es-bessers" noch ein paar Überlebenstips:</div><ul><li><div>beachte die oben stehenden Punkte ;-)</div></li><li><div>es macht sich immer gut, beim Reinkommen mal zu grüssen</div></li><li><div>warte nicht, bis man/frau dich anspricht - werde selbst aktiv und gib deinen Senf dazu</div></li><li><div>es gibt meist kein allgemein anerkanntes Gesprächsthema - lies dich einfach rein</div></li><li><div>die frage "wer will chatten" ist eigentlich überflüssig in einem Chat (wir warten doch alle nur aufs Ufo ;-)</div></li><li><div>fang nich sofort mit den W-Fragen (woher, wie alt, weiblich oder männlich?) an - es stört einige Leute</div></li></ul><div>Problematisch für die Wächter und Oberwächter ist:</div><ul><li><div>"der nervt mich - schmeiss den mal raus" ist oft nicht nachvollziehbar, weil der WÄ oder OW die Vorgeschichte - die vielleicht ausserhalb des yChat stattgefunden hat - nicht kennt oder keinen Beweis dafür hat.</div></li></ul><hr><div><h2>Richtlinien für den gestressten WÄ und OW:</h2></div><ul><li><div>Du hast die Macht - aber mißbrauche sie nicht!</div></li><li><div>Leute, die ganz offensichtlich stören wollen und dabei den Chatbetrieb massiv behindern, sofort rausschmeissen! Kriterien dazu:</div><ul><li><div>Fluten des Chats</div></li><li><div>Wiederholung von Parolen</div></li><li><div>Exzessive Nutzung von zufälligen Buchstaben-/Zeichenfolgen</div></li><li><div>usw...</div></li></ul></li><li><div>Bei den anderen vorher noch eine Warnung aussprechen...</div></li><li><div>Nicht vergessen: auch für euch gelten die oben aufgeführten Regeln!</div></li><li><div>Vergabe von Raumbesetzer- und Wächterrechten:<br>(dies gilt für RB-Vergabe in der Cyberbar, WÄ allgemein)</div><ul><li><div>Um RB oder WÄ betteln wird schon mal gar nicht beachtet.</div></li><li><div>Wer WÄ wird, soll sichs verdienen - z.B. durch häufiges Helfen bei Neulingen.</div></li><li><div>Ein WÄ sollte schon öfter im Chat sein.</div></li><li><div>Oberwächter zu werden ist sehr schwierig. Frag gar nicht erst danach ;-)</div></li></ul></ul><div>Wer meint, von einem Wächter oder Oberwächter ungerecht behandelt worden zu sein (z.B. weil dieser wegen persönlichen Streitigkeiten rausschmeisst), richte seine Klage an einen Oberwächter oder direkt an den obersten Boss: Snooper (<a href="mailto:admin@ychat.de">admin@ychat.de</a>).</div>
\ No newline at end of file diff --git a/0.8.0/templates/colors.sno b/0.8.0/templates/colors.sno new file mode 100755 index 0000000..3640b9e --- /dev/null +++ b/0.8.0/templates/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.8.0/templates/help.sno b/0.8.0/templates/help.sno new file mode 100755 index 0000000..e1f6de9 --- /dev/null +++ b/0.8.0/templates/help.sno @@ -0,0 +1,79 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table border=1> +<tr><th><div>SU</div></th><th><div>Befehl</div></th><th><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. Wird gar keine Farbe angegeben, dann wird eine zufällige generiert!</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>/exit</div></td><td><div>Komplett aus dem System ausloggen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/getcol <font color=red>Alias</font></div></td><td><div>Zeigt an welche Farb-Codes <font color=red>Alias</font> zum Chatten verwendet</div></td></tr> +<tr><td><div>NC</div></td><td><div>/hits</div></td><td><div>Zeigt an vor wieviel Stunden der Chat-Server neugestartet wurde und die Hits und Hits per Minute seit dieser Zeit</div></td></tr> +<tr><td><div>NC</div></td><td><div>/ig <font color=red>Alias</font></div></td><td><div>Setzt/entfernt <font color=red>Alias</font> auf/aus die/der Ignorierliste. Wird das Argument weggelassen, so wird die Liste aller ignorierten Personen angezeigt</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>Chat 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>/selfkill</div></td><td><div>Sich selbst ganz und gar aus dem System entfernen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/sep <font color=red>Raumname</font></div></td><td><div>In den Raum <font color=red>Raumnamen</font> wechseln und gleichzeitig absperren</div></td></tr> +<tr><td><div>NC</div></td><td><div>/uptime</div></td><td><div>Siehe Befehl "/hits"</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 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>/banip <font color=red>Alias</font></div></td><td><div>Die IP-Nummer von <font color=red>Alias</font> verbannen</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/rbanip ip://<font color=red>x.x.x.x</font></div></td><td><div>Die IP-Nummer <font color=red>x.x.x.x</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>/img</div></td><td><div>Versteckt/reaktiviert das eigene Superuser-Logo im Online-Frame</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>/o <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird aus dem Chat ausgeloggt!</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/sl <font color=red>Raum</font></div></td><td><div>Einen anderen <font color=ffa500>Raum</font> absperren</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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=red>Raum</font> ein <font color=ffa500>Thema</font > geben</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/status <font color=ffa500>Alias</font></div></td><td><div>Zeigt den Superuserstatus von <font color=ffa500>Alias</font> an</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> +<tr><td><div><font color=green>OW</font></div></td><td><div>/twa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum temporären Wächter ernennen</div></td></tr> +<tr><td><div><font color=green>OW</font></div></td><td><div>/rtwa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom temporären Wächter zum normalen Chatter degradieren</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/cool <font color=red>Nachricht</font></div></td><td><div>Gibt für den aktuellen Raum eine Systemmeldung aus</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/id <font color=red>Alias</font></div></td><td><div>Zeigt TempID von <font color=red>Alias</font> an</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/ow <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Oberwächter ernennen</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/row <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom Oberwächter zum normalen Chatter degradieren</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/pw <font color=red>Alias</font></div></td><td><div>Zeigt das Passwort von <font color=red>Alias</font> an</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 ausgeführt 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 ledeglich 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><br> + Nur Oberwächer können Logdateien der Cyberbar lesen!<br><br> + Oberwächter ernennt nur der Systemadministrator! Dieser wiederum hat weitere spezielle Befehle die geheim sind und die nur ihm + vorbehalten sind und ihm das Administrieren erleichtert. +</div> +</body> +</html> diff --git a/0.8.0/yC-web-docs/adm-i.gif b/0.8.0/yC-web-docs/adm-i.gif Binary files differnew file mode 100755 index 0000000..3f45598 --- /dev/null +++ b/0.8.0/yC-web-docs/adm-i.gif diff --git a/0.8.0/yC-web-docs/adm.gif b/0.8.0/yC-web-docs/adm.gif Binary files differnew file mode 100755 index 0000000..d7b68d9 --- /dev/null +++ b/0.8.0/yC-web-docs/adm.gif diff --git a/0.8.0/yC-web-docs/away.gif b/0.8.0/yC-web-docs/away.gif Binary files differnew file mode 100755 index 0000000..c001883 --- /dev/null +++ b/0.8.0/yC-web-docs/away.gif diff --git a/0.8.0/yC-web-docs/blank.gif b/0.8.0/yC-web-docs/blank.gif Binary files differnew file mode 100755 index 0000000..dc1f36f --- /dev/null +++ b/0.8.0/yC-web-docs/blank.gif diff --git a/0.8.0/yC-web-docs/ow-i.gif b/0.8.0/yC-web-docs/ow-i.gif Binary files differnew file mode 100755 index 0000000..71584dd --- /dev/null +++ b/0.8.0/yC-web-docs/ow-i.gif diff --git a/0.8.0/yC-web-docs/ow.gif b/0.8.0/yC-web-docs/ow.gif Binary files differnew file mode 100755 index 0000000..b30e8f9 --- /dev/null +++ b/0.8.0/yC-web-docs/ow.gif diff --git a/0.8.0/yC-web-docs/rb.gif b/0.8.0/yC-web-docs/rb.gif Binary files differnew file mode 100755 index 0000000..321341c --- /dev/null +++ b/0.8.0/yC-web-docs/rb.gif diff --git a/0.8.0/yC-web-docs/twa.gif b/0.8.0/yC-web-docs/twa.gif Binary files differnew file mode 100755 index 0000000..b80cea4 --- /dev/null +++ b/0.8.0/yC-web-docs/twa.gif diff --git a/0.8.0/yC-web-docs/uvl.gif b/0.8.0/yC-web-docs/uvl.gif Binary files differnew file mode 100755 index 0000000..b9208d6 --- /dev/null +++ b/0.8.0/yC-web-docs/uvl.gif diff --git a/0.8.0/yC-web-docs/wa-i.gif b/0.8.0/yC-web-docs/wa-i.gif Binary files differnew file mode 100755 index 0000000..9e9a113 --- /dev/null +++ b/0.8.0/yC-web-docs/wa-i.gif diff --git a/0.8.0/yC-web-docs/wa.gif b/0.8.0/yC-web-docs/wa.gif Binary files differnew file mode 100755 index 0000000..553984c --- /dev/null +++ b/0.8.0/yC-web-docs/wa.gif diff --git a/0.8.0/yC-web-docs/yIntro.swf b/0.8.0/yC-web-docs/yIntro.swf Binary files differnew file mode 100755 index 0000000..81d9015 --- /dev/null +++ b/0.8.0/yC-web-docs/yIntro.swf diff --git a/0.8.0/yC-web-docs/ySymbol.swf b/0.8.0/yC-web-docs/ySymbol.swf Binary files differnew file mode 100755 index 0000000..2b899bb --- /dev/null +++ b/0.8.0/yC-web-docs/ySymbol.swf diff --git a/0.8.0/ychatd.pl b/0.8.0/ychatd.pl new file mode 100755 index 0000000..f804436 --- /dev/null +++ b/0.8.0/ychatd.pl @@ -0,0 +1,94 @@ +#!/usr/bin/perl +use CGI; +$q = new CGI; + +use config; +use modules::commands; +use modules::changeroom; +use modules::divcom; +use modules::hierachie; +use modules::htdocs; +use modules::input; +use modules::loggedin; +use modules::online; +use modules::postmessage; +use modules::shared; +use modules::start; +use modules::statistic; +use modules::stream; +use modules::webchat; +use IO::Socket; +use Socket; +use POSIX; + +$SIG{'CHLD'} = 'IGNORE'; + +$mainsocket = 'IO::Socket::INET'->new('LocalHost', "$localhost", 'LocalPort', $localport, 'Porto', 'tcp', 'Listen', $limit + 10, 'Reuse', 1); +die "Kann Server-Socket nicht erzeugen: $!\n" unless $mainsocket; + +print "yChat wurde auf $localhost:$localport gestartet...\n"; + +$STARTIME = time; + +#Debugging only +#open AWAKE, ">data/online/awake/-$$-"; +#print AWAKE "$STARTIME - Daemon"; +#close AWAKE; + +while ($client = $mainsocket->accept) { + print $client "HTTP/1.1 200 OK\nContent-type:text/html\n\n"; + + ++$HITS; + $pid = fork; + if ($pid == 0) { + my @reqheader; + + $rv = $client->recv($reqheader[0], POSIX::BUFSIZ, 0); + @reqheader = split "\n", $reqheader[0]; + + my $requeststring; + my(@tmp) = split(/\s+/, $reqheader[0], 0); + + if ($tmp[0] eq 'GET') { + $requeststring = $tmp[1]; + + } else { + $requeststring = 'chat?'.$reqheader[-1]; + } + + #Debug only + #open AWAKE, ">data/online/awake/$$"; + #print AWAKE $requeststring; + #close AWAKE; + + @tmp = split(/\?/, $requeststring, 0); + @tmp = split(/&/, $tmp[1], 0); + my %variables; + + foreach $_ (@tmp) { + my(@tmp) = split(/=/, $_, 0); + next if $tmp[0] eq 'admin' or $tmp[0] eq 'mogeladmin'; + $tmp[0] =~ s[/][]; + $variables{$tmp[0]} = &url_decode($tmp[1]); + } + + foreach $_ (keys %variables) { + $variables{$_} =~ s/'/\\'/g; + my $eval = "\$$_ = '" . $variables{$_} . "';"; + # print "$eval\n"; + eval $eval; + } + *STD = *STDOUT; + *STDOUT = $client; + if ($request) { + &secure_checkid($alias, $tmpid) if $request != 'start'; + eval "&$request"; + } + else { + &start; + } + &del_awake(); + $client->shutdown(2); + exit 0; + } +} diff --git a/0.8.1/config.pm b/0.8.1/config.pm new file mode 100755 index 0000000..3b3007f --- /dev/null +++ b/0.8.1/config.pm @@ -0,0 +1,43 @@ +# yChat - Copyright by Paul C. Bütow +########################### Dieser Teil bestimmt die Standart-Variabeln. +##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.) +########################### +$limit = 50; # Benutzerlimit +$datum = "19.02.03"; # Datum der letzten Änderung (ändern erwünscht) +$version = "0.8.1"; # Bitte Hauptversionsnummer nicht ändern +$title = "yChat [$version]"; # Erscheint in der Browser-Leiste oben +$standardroom = "Cyberbar"; # Standardchatraum +$loginplace = "Lounge"; # Bezeichnung der Startseite nach dem Login +$localhost = "62.75.136.147";# Host oder IP# des Chat-Servers +$localport = 2000; # Port über den fer Chat-Server läuft +$gfxpath = "http://$localhost/yChat"; # URL der Binärdaten (Grafiken etc.) +$bgcolor = "#3E535B"; # Hintergrundfarbe der HTML-Seiten +$chatbg = "#000000"; # Hintergrundfarbe des Chat-Frames +$cryptkey = "ka:jASD73jnS"; # Hiermit wetden die PW's verschlüsselt. + +# PS: Um einen Chat-Administrator anzulegen, dann die Datei data/hierachie +# anlegen, in eine Zeile muß folgendes eingetragen werden: "Nickname<;7" +# (Natürlich ohne Anführungsstriche) Nickname ist somit Chat-Administrator +# und kann Oberwächter und Wächter bestimmen! + +sub style { +print <<ENDCSS; +<style type="text/css"> + body { background-color: $bgcolor } + body.blank { background-color: $chatbg } + body.online { background-color: $chatbg } + div { font-family: arial, geneva, verdana, helvetiva; font-size: 12px; color: #ffffff } + div.b { font-weight: bold; color: #ffa500 } + a { color: #ffffef; } + a:hover { color: #ffffff; } + p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; } +</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; background-color: #ffffff; 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 +} +1; diff --git a/0.8.1/data/hierachie b/0.8.1/data/hierachie new file mode 100755 index 0000000..8f5f747 --- /dev/null +++ b/0.8.1/data/hierachie @@ -0,0 +1,12 @@ +red_pepper<;2 +Snoop<;3 +Lantara<;8 +SMX<;5 +bilke<;6 +Stoffel<;6 +Romeo3008<;5 +Chatter<;5 +Cozmo<;7 +Snooper<;9 +Tekkie<;7 +Peacemaker<;7 diff --git a/0.8.1/modules/changeroom.pm b/0.8.1/modules/changeroom.pm new file mode 100755 index 0000000..4a5e787 --- /dev/null +++ b/0.8.1/modules/changeroom.pm @@ -0,0 +1,67 @@ +sub change_room { + my($method, $newroom, $oldroom, $alias2) = @_; + if ($newroom eq $oldroom) { + &post_prv($alias, "<font color='ffffff'>Du befindest dich bereits im Raum <font color='ffa500'>$newroom</font>!</font>"); + &reload_html; + } + elsif ($newroom eq $loginplace) { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verlässt den Chat und geht in die <b>$loginplace</b> ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &check_online; + &reload_html; + } + open RSTAT, "<data/online/rstat/$newroom"; + my(@rstat) = <RSTAT>; + close RSTAT; + if ($rstat[0] eq "1\n") { + if (3 <= &hierachie($alias)) { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$newroom</font> ist leider abgesperrt!</font>"); + &reload_html; + } + } + &private_javascript($alias, $room, "parent.input.document.inf.room.value = '$newroom';open('chat?request=online&room=$newroom&alias=$alias&tmpid=$tmpid','online');"); + open MSGFILE, ">>data/msgs/$newroom"; + print MSGFILE "$alias<;" . time . "<;!<;!<;<;\n"; + close MSGFILE; + open MSGFILE, ">>data/msgs/$room"; + if ($method eq 'j') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'ju') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du folgst <font color='".&get_ident($alias2,3)."'>$alias2</font> aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i><br><;\n"; + } + elsif ($method eq 'sep') { + print MSGFILE "$alias<;" . time . q[<;!<;!<;<i><font color='ffffff'>] . ×tring . " Du wechselst aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrst ab...</font></i><br><;\n"; + } + close MSGFILE; + &post_strmsg($alias, $room, 'cr', $newroom); + $room = $oldroom; + my $tmpstamp = time; + if ($method eq 'j') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'ju') { + my $col2 = &get_ident($alias2,3); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> folgt <font color='$col2'>$alias2</font> in den Raum <b>$newroom</b> ...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> und folgt <font color='$col2'>$alias2</font> herein nach <b>$newroom</b> ...</font></i>", $alias); + } + elsif ($method eq 'sep') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> wechselt in den Raum <b>$newroom</b> und sperrt ab...</font></i>", $alias); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> kommt aus dem Raum <b>$oldroom</b> herein nach <b>$newroom</b> und sperrt ab...</font></i>", $alias); + } + elsif ($method eq 'beam') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> in den Raum <b>$newroom</b>...</font></i>", $alias2); + $room = $newroom; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias2</font> beamt <b>$alias</b> aus dem Raum <b>$oldroom</b> herein nach <b>$room</b>...</font></i>", $alias2); + } + unlink "data/online/rooms/$oldroom/$alias"; + &rm_rstat($alias, $oldroom); + &check_online; +} +1; diff --git a/0.8.1/modules/commands.pm b/0.8.1/modules/commands.pm new file mode 100755 index 0000000..8d6211b --- /dev/null +++ b/0.8.1/modules/commands.pm @@ -0,0 +1,867 @@ +sub command { + $_[0] = $_[0] . ' '; + $_[0] = substr($_[0], 1, length($_[0]) - 1); + my(@cmd) = split(/ /, $_[0], 0); + my $cmd = substr($_[0], 0, index($_[0], ' ')); + my $tmp = $_[1]; + sub lock { + my $method = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $lock = "0\n"; + if ($room eq $standardroom) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ohne Erfolg ab ...</font></i>", $alias); + } + else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum ab ...</font></i>", $alias) if $method ne 'separee'; + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum auf ...</font></i>", $alias) if $method ne 'separee'; + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $lock; + close RSTAT; + } + &reload_html; + } + if ($cmd eq 'about') { + &post_prv($alias, "<font color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Programmiert von Paul C. B\374tow (2000 - 2002).</font>"); + &reload_html; + } + elsif ($cmd eq 'away') { + for ($i = 1; $i <= $#cmd; ++$i) { + $away_msg = $away_msg . ' ' . $cmd[$i]; + } + my $room = &get_room($alias); + if ($tmp eq 'autoaway') { + $away_msg = "$alias wurde vom System agbemeldet ..."; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> meldet <font color='".&get_ident($alias,3)."'>$alias</font> wegen Inaktivität ab ...</i></font>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> meldet sich ab (<font color='$col'>$away_msg</font> ) ...</i></font>", $alias); + } + open AWAY, ">>data/online/rstat/$room.away"; + print AWAY "$alias<;$away_msg\n"; + close AWAY; + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'away'; parent.online.location.reload();]); + &reload_html; + } + elsif ($cmd eq 'clear') { + &post_prv($alias, "<script language='JavaScript'>window.open('chat?request=stream&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');</script>"); + &reload_html; + } + elsif ($cmd eq 'col') { + my $col, $secol; + if ($cmd[1] ne undef) { + $col = $cmd[1]; + &prove_color($alias, $col); + my $tmpsecol = $cmd[2]; + my $length = length $tmpsecol; + if ($tmpsecol eq '' or $length < 6 or $length > 6) { + $secol = $col; + } + else { + $secol = $tmpsecol; + } + } + else { + $col = &random_color; + $secol = &random_color; + } + open OPTIONS, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $options[0] . $col . "\n" . $secol; + close OPTIONS; + open IDENT, "<data/online/ident/$alias"; + my(@ident) = <IDENT>; + close IDENT; + open IDENT, ">data/online/ident/$alias"; + print IDENT $ident[0] . $ident[1] . $ident[2] . "$col\n$secol"; + close IDENT; + &post($room, '<i><font color=ffffff>' . ×tring . "</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt...</font></i>", $alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &reload_html; + } + elsif ($cmd eq 'date') { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + &post_prv($alias, "<font color=ffffff>Heute ist der $days.$months. Jahr $years. Es ist genau $hours:$mins Uhr und $secs Sekunden.</font>"); + &reload_html; + } + elsif ($cmd eq 'exit') { + my $room = &get_room($alias); + if ($tmp eq 'autologout') { + &private_javascript($alias, $room, q[open('chat?request=start&tmp=autologout','_top');]); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='ffa500'><b>Das System</b></font> loggt <font color='".&get_ident($alias,3)."'>$alias</font> wegen Inaktivität aus ... </font></i>", $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt sich ganz aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=quit','_top');]); + } + &rm_alias($alias, $room); + &rm_away($alias, $room); + &reload_html; + } + elsif ($cmd eq 'getcol') { + my $cols2show = $cmd[1]; + if (-f "data/user/options/$cols2show") { + open FILE, "<data/user/options/$cols2show"; + my(@file) = <FILE>; + close FILE; + chomp $file[1]; + chomp $file[2]; + &post_prv($alias, "<font color='ffa500'>$cols2show <font color='ffffff'> verwendet als 1. Farbe <font color='$file[1]'>$file[1]</font> und als 2. Farbe <font color='$file[2]'>$file[2]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$cols2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'hits' or $cmd eq 'uptime') { + &post_prv($alias, "<font color=ffffff>Uptime: $startime " . &calculate_uptime_hours($STARTIME) . "h; $HITS Hits; " . &calculate_hpm($HITS, $STARTIME) . ' Hits pro Minute</font>'); + &reload_html; + } + elsif ($cmd eq 'ig') { + my $alias2ignore = $cmd[1]; + if ($alias2ignore) { + if (-f "data/user/options/$alias2ignore") { + if (3 <= &hierachie($alias2ignore)) { + &post_prv($alias, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'> kann nicht ignoriert werden!</font>"); + } + else { + &post_strmsg($alias, $room, 'ig', $alias2ignore); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ignore</font> <font color='ffffff'>existiert nicht in der Datenbank!</font>"); + } + } + else { + &post_strmsg($alias, $room, 'igl'); + } + &reload_html; + } + elsif ($cmd eq 'j' or $cmd eq 'sep') { + if ($cmd[1] =~ /\W/ or $cmd[1] eq '') { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> enth\344lt illegale Zeichen!</font>"); + &reload_html; + } + else { + if ($cmd eq 'j') { + &change_room('j', $cmd[1], $room); + &reload_html; + } + else { + if ($cmd[1] eq $standardroom) { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$cmd[1]</font> ist ein Standardraum und kann nicht als Separee eröffnet werden!</font>"); + } + else { + &change_room('sep', $cmd[1], $room); + &lock('separee'); + } + &reload_html; + } + } + } + elsif ($cmd eq 'me' or $cmd eq 'm') { + my $me_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $me_msg = $me_msg . ' ' . $cmd[$i]; + } + $me_msg =~ s[/me/][<i>$alias</i>]g; + $me_msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if ($cmd eq 'm') { + &post($room, "<b><font color=$col><i>$alias</i> <font color=$secol>$me_msg</font></font></b>", $alias); + } + else { + &post($room, "<b><font color=$col><i>$alias</i> $me_msg</font></b>", $alias); + } + &reload_html; + } + elsif ($cmd eq 'memo') { + my $alias2memo = $cmd[1]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if (-f "data/user/options/$alias2memo") { + my $memo_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $memo_msg = $memo_msg . ' ' . $cmd[$i]; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>wurde folgende memo erfolgreich hinterlassen: $memo_msg</font></font>"); + open MEMO, ">>data/user/memos/$alias2memo"; + print MEMO "<font color=ffffff>($days.$months.$years - $hours:$mins:$secs) <font color=$col>$alias</font> hat Dir eine Memo hinterlassen: <font color=ffa500>$memo_msg</font></font><br>\n"; + close MEMO; + &reload_html; + } + &post_prv($alias, "<font color=ffa500>$alias2memo <font color=ffffff>existiert in der Datenbank nicht !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'menu') { + &private_javascript($alias, $room, "window.open('chat?request=htdocs&alias=$alias&var=menu_html&room=$standardroom&col=$col&secol=$secol&tmpid=$tmpid','_new','width=500,height=500,screenX=100,screenY=100,scrollbars');"); + &reload_html; + } + elsif ($cmd eq 'online') { + my $alias2prove = $cmd[1]; + my $totaltime = &get_online_time($alias2prove); + if ($totaltime ne false) { + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>war insgesamt schon $totaltime Stunden online!</font></font>"); + } + else { + &post_prv("$alias", "<font color=ffa500>$alias2prove <font color=ffffff>existiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'q') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verlässt den Chat ... </font></i>", $alias); + &post_strmsg($alias, $room, 'quit'); + unlink "data/online/rooms/$room/$alias"; + &rm_rstat($alias, $room); + &rm_away($alias, $room); + &check_online; + &reload_html; + } + elsif ($cmd eq 'rmgb') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das eigene G\344stebuch ...</font></i>", $alias); + unlink "data/user/gbooks/$alias"; + &reload_html; + } + elsif ($cmd eq 's') { + my $msg2scream; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2scream = $msg2scream . ' ' . $cmd[$i]; + } + $msg2scream =~ s/\344/\304/g; + $msg2scream =~ s/\366/\326/g; + $msg2scream =~ s/\374/\334/g; + $msg2scream = "\U$msg2scream\E"; + &post($room, "<b><font color=$col><i>$alias schreit:</i> <font color=$secol>$msg2scream</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'seen') { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + if (-f "data/user/lastlogin/$alias2prove") { + open LASTLOGIN, "<data/user/lastlogin/$alias2prove"; + my $lastlogin = <LASTLOGIN>; + close LASTLOGIN; + my $timestamp = sprintf('%.2f', (time - $lastlogin) / 3600); + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich vor $timestamp Stunden zuletzt in das System eingeloggt!</font></font>"); + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> hat sich seit der Einf\374hrung dieses Befehls noch nie eingeloggt!</font></font>"); + } + } + else { + &post_prv("$alias", "<font color='ffa500'>$alias2prove <font color=ffffff> exsistiert nicht in der Benutzerdatenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'selfkill') { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> entfernt sich ganz und gar aus dem System und loggt sich aus ... </font></i>", $alias); + &private_javascript($alias, $room, q[open('chat?request=start&tmp=selfkill','_top');]); + &kill_alias($alias); + &reload_html; + } + elsif ($cmd eq 'w') { + my $theme = &get_theme($room); + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my($is, $nr) = ('t', 0); + my $persons; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-f "data/online/rooms/$room/$_") { + $persons = $persons . ' ' . "<font color='".&get_ident($_,3)."'>$_</font>"; + ++$nr; + } + } + &post_prv($alias, "<font color=ffffff>Der aktuelle <b>Raum:</b> $room $theme $door ($nr): $persons</font>"); + &reload_html; + } + elsif ($cmd eq 'wc' or $cmd eq 'wc/') { + my $raum = $cmd[1]; + my $persons; + if ($raum eq '' and $cmd eq 'wc') { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + close USERS; + foreach $_ (@users) { + $persons = $persons . ' ' . "<font color='".&get_ident($_,3)."'>$_</font>" if -f "data/online/users/$_"; + } + my $nr = $#users - 1; + my($nrs, $is) = ('', 'ist'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'sind'; + } + &post_prv("$alias", "<font color=ffffff>$nr Person$nrs $is insgesamt eingeloggt: $persons</font>"); + } + elsif ($raum eq '' and $cmd eq 'wc/') { + my $msg2post; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + opendir DIR, "data/online/rooms/$_"; + my(@dir2) = readdir DIR; + closedir DIR; + open RSTAT, "<data/online/rstat/$_"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + my $nr = $#dir2 - 1; + $msg2post = $msg2post . "<tr><td><b><font size=2 color='ffffff'>$_ $door ($nr) [" . $rstat[1] . q(]: </font></b></td></tr><tr><td><font size=2 color='ffa500'>); + foreach $chatter (@dir2) { + $msg2post = $msg2post . "<font color='".&get_ident($chatter,3)."'>$chatter</font> " if -f "data/online/rooms/$_/$chatter"; + } + print '</font></td>'; + } + } + &post_prv($alias, "<font color=ffffff>Folgende Räume sind offen:</font><table>$msg2post</table>"); + } + elsif ($raum ne '') { + my $persons; + opendir DIR, "data/online/rooms/$raum"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + $persons = $persons . ' ' . "<font color='".&get_ident($chatter,3)."'>$_</font>" if -f "data/online/rooms/$raum/$_"; + } + my($nr, $is) = ($#dir - 1, 't'); + if ($nr != 1) { + $nrs = 'en'; + $is = 'n'; + } + &post_prv($alias, "<font color=ffffff> $nr Person$nrs befinde$is sich im Raum <b>$raum</b> $persons</font>"); + } + &reload_html; + } + elsif ($cmd eq 'wj' or $cmd eq 'ju') { + my $alias2search = $cmd[1]; + my $roomofalias = &get_room($alias2search); + if ($roomofalias) { + if ($cmd eq 'wj') { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff>befindet sich im Raum <b>$roomofalias</b> !</font></font>"); + } + else { + &change_room('ju', $roomofalias, $room, $alias2search); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2search <font color=ffffff> ist nicht eingeloggt!</font></font>"); + } + &reload_html; + } + elsif (1 <= &hierachie($alias, $room)) { + if ($cmd eq 'l') { + &lock; + } + elsif ($cmd eq 'su') { + my $alias2su = $cmd[1]; + opendir DIR, "data/online/rooms/$room"; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2su) { + open DATEI, "<data/online/rstat/$room"; + my(@rstat) = <DATEI>; + close DATEI; + if (1 <= hierachie($alias2su, $room)) { + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color='ffffff'> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, W\304 oder OW)</font>"); + &reload_html; + } + open RSTAT, ">>data/online/rstat/$room"; + print RSTAT "$alias2su<;1\n"; + close RSTAT; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> verleiht <font color='".&get_ident($alias2su,3)."'>$alias2su</font> Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &reload_html; + } + } + &post_prv($alias, "<font color='ffa500'>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + &reload_html; + } + elsif ($cmd eq 'rsu') { + my $alias2rsu = $cmd[1]; + if (1 == hierachie($alias2rsu, $room)) { + &rm_rstat($alias2rsu, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entzieht <font color='".&get_ident($alias2rsu,3)."'>$alias2rsu</font> die Raumbesetzerrechte ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rsu <font color='ffffff'>ist gar kein Raumbesetzer!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 't') { + open RSTAT, "data/online/rstat/$room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + my $theme; + if ($cmd[1] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, q[<i><font color='ffffff'>] . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums ...</font></i>", $alias); + } + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i] . "\n"; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT $theme; + close RSTAT; + &reload_html; + } + elsif (3 <= &hierachie($alias, $room)) { + if ($cmd eq 'ban' or $cmd eq 'banip') { + my $alias2ban = $cmd[1]; + my $hierachie = &hierachie($alias2ban); + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + if ($cmd[1] eq undef) { + my $nr = @ban; + my $banned; + foreach $_ (@ban) { + chomp $_; + $banned .= " $_"; + } + &post_prv($alias, "<font color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color='ff0000'>$banned</font></font>"); + &reload_html; + } + elsif (-f "data/user/options/$alias2ban") { + if (3 <= $hierachie) { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color='ffffff'>kann nicht verbannt werden!</font></font>"); + &reload_html; + } + if ($cmd eq 'ban') { + if (&add_entry($alias2ban, 'ban') == 1) { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> verbannt <b>$alias2ban</b> aus dem Chat ...</font></i>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff>ist bereits verbannt!</font></font>"); + } + } + elsif ($cmd eq 'banip') { + open DATEI, "<data/online/ident/$alias2ban"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + if (add_entry("ip://$ipnr", 'ban') == 1) { + &post_prv($alias, "<font color='ffffff'>IP-Nummer von <font color='ffa500'>$alias2ban</font> (<font color='ff0000'>$ipnr</font>) wurde verbannt!</font></i>"); + } + else { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$ipnr</font> von <font color='ffa500'>$alias2ban</font> ist bereits verbannt!</font></font>"); + } + &reload_html; + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$alias2ban <font color=ffffff> kann nicht verbannt werden, da Benutzername nicht existiert!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'rban' or $cmd eq 'rbanip') { + my $alias2rban = $cmd[1]; + open BAN, '<data/ban'; + @ban = <BAN>; + close BAN; + foreach $ban (@ban) { + if (&rm_entry($alias2rban, 'ban') == 1) { + if ($alias2rban =~ /ip:/) { + &post_prv($alias, "<font color='ffffff'>Die IP-Nummer <font color='ff0000'>$alias2rban</font> wurde aus der Banliste ausgetragen!</font></font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> entbannt <font color='".&get_ident($alias2rban,3)."'>$alias2rban</font> ...</font></i>", $alias); + } + &reload_html; + } + } + &post_prv($alias, "<font color='ff0000'>$alias2rban <font color='ffffff'>ist nicht verbannt!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'img') { + my $hierachie = &hierachie($alias, $room); + &hierachie_rm($alias); + if ($hierachie == 3) { + &post_prv($alias, q[<font color='ffffff'>Als temporärer Wächter kannst du dein Superuserlogo nicht verstecken!</font>]); + } + elsif ($hierachie % 2 > 0) { + &post_prv($alias, q[<font color='ffffff'>Dein Superuserlogo wurde versteckt!</font>]); + &hierachie_add($alias, $hierachie + 1); + } + else { + &post_prv("$alias", q[<font color='ffffff'>Dein Superuserlogo wurde wieder sichtbar gemacht!</font></font>]); + &hierachie_add($alias, $hierachie - 1); + } + &reload_html; + } + elsif ($cmd eq 'ip') { + my $alias2prove = $cmd[1]; + opendir DIR, 'data/online/ident'; + my(@dir) = readdir DIR; + closedir DIR; + foreach $_ (@dir) { + if ($_ eq $alias2prove) { + open DATEI, "<data/online/ident/$alias2prove"; + my $ipnr = <DATEI>; + close DATEI; + chomp $ipnr; + &post_prv($alias, "<font color='ffa500'>$_<font color='ffffff'> hat die IP-Nummer <font color='ff0000'>$ipnr</font> !</font></font>"); + } + } + &reload_html; + } + elsif ($cmd eq 'k' or $cmd eq 'o') { + my $alias2kick = $cmd[1]; + if (-f "data/online/users/$alias2kick") { + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $raum (@dir) { + opendir DIR, "data/online/rooms/$raum"; + my(@dir2) = readdir DIR; + closedir DIR; + foreach my $chatter (@dir2) { + if ($chatter eq $alias2kick) { + my $hierachie2 = &hierachie($alias2kick); + if (&hierachie($alias) <= &hierachie($alias2kick)) { + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> besitzt einen höheren oder gleichen Rang und kann nicht gekickt/ausgeloggt werden!</font></font>"); + } + else { + if ($cmd eq 'k') { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=kick","_top");</script>'); + } + else { + &post_prv($alias2kick, '<script language="JavaScript">window.open("chat?request=start&tmp=logout","_top");</script>'); + } + $_ = undef if $room eq $raum; + if ($cmd eq 'k') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> katapultiert <font color='".&get_ident($alias2kick,3)."'>$alias2kick</font> aus dem Chat ...</font></i>", $alias, $raum); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> loggt <font color='".&get_ident($alias2kick,3)."'>$alias2kick</font> aus dem Chat aus ...</font></i>", $alias, $alias); + } + &rm_alias($alias2kick, $raum); + &check_online; + } + &reload_html; + } + } + } + } + &post_prv($alias, "<font color='ffa500'>$alias2kick <font color='ffffff'> ist nicht anwesend und kann nicht aus dem System katapultiert werden werden!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'sl') { + my $sl_room = $cmd[1]; + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + open RSTAT, "<data/online/rstat/$sl_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen ab ...</font></i>", $alias, $sl_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> sperrt den Raum <b>$sl_room</b> von aussen auf ...</font></i>", $alias, $sl_room); + } + for ($i = 1; $i <= $#r_stat; ++$i) { + $lock = $lock . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$sl_room"; + print RSTAT $lock; + close RSTAT; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$sl_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'ss') { + my $ss_room = $cmd[1]; + if (-e "data/online/rooms/$ss_room") { + my $ss_msg; + for ($i = 2; $i <= $#cmd; ++$i) { + $ss_msg = $ss_msg . ' ' . $cmd[$i]; + } + my $msg2scream = "\U$ss_msg\E"; + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> ruft in den Raum <b>$ss_room</b> hinein: <b><font color=$col>$msg2scream</font></b> ...</font></i>", $alias, $ss_room); + &reload_html; + } + else { + &post_prv($alias, "<font color='ffffff'>Der Raum <font color='ffa500'>$ss_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'st') { + my $st_room = $cmd[1]; + if (-e "data/online/rooms/$st_room") { + my $theme; + if ($cmd[2] ne undef) { + for ($i = 1; $i <= $#cmd; ++$i) { + $theme = $theme . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . qq[ <font color='$col'>$alias</font> gibt dem Raum <b>$st_room</b> das Thema "<font color='$col'>$theme</font>" ...</font></i>], $alias, $st_room); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> l\366scht das Thema des Raums <b>$st_room</b> ...</font></i>", $alias, $st_room); + } + open RSTAT, "<data/online/rstat/$st_room"; + my(@r_stat) = <RSTAT>; + close RSTAT; + $theme = $r_stat[0] . $theme . "\n"; + for ($i = 2; $i <= $#r_stat; ++$i) { + $theme = $theme . $r_stat[$i]; + } + open RSTAT, ">data/online/rstat/$st_room"; + print RSTAT $theme; + close RSTAT; + } + else { + &post_prv($alias, "<font color=ffffff>Der Raum <font color=ffa500>$st_room</font> existiert nicht!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'status') { + my $alias2level = $cmd[1]; + &post_prv($alias, "<font color='ffa500'>$alias2level <font color='ffffff'>hat den Superuserstatus <font color='ff0000'>".&hierachie($alias2level, &get_room($alias2level))."</font> !</font></font>"); + &reload_html; + } + elsif (7 <= &hierachie($alias)) { + if ($cmd eq 'kill') { + my $alias2kill = $cmd[1]; + if (-f "data/user/options/$alias2kill") { + if (7 <= &hierachie($alias2kill)) { + &post_prv($alias, "<font color='ffa500'>$alias2kill</font> <font color='ffffff'>hat einen höheren Rang und kann nicht aus dem System entfernt werden !</font>"); + } + else { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col>$alias</font> killt <b>$alias2kill</b> ganz und gar aus dem System ...</font></i>", $alias); + &kill_alias($alias2kill, $alias); + } + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2kill <font color='ffffff'> existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'sys') { + my $sys_msg; + for ($i = 1; $i <= $#cmd; ++$i) { + $sys_msg = $sys_msg . ' ' . $cmd[$i]; + } + $sys_msg = q[<i><font color='ffffff'>] . ×tring . " </font></i> <b><font size=2 color='red'>SYSTEMNACHRICHT</font></b><i><font color='ffffff'>: $sys_msg ...</font></i>"; + opendir ROOMS, 'data/msgs'; + my(@rooms) = readdir ROOMS; + close ROOMS; + foreach $_ (@rooms) { + &post($_, $sys_msg, $alias) unless /\./; + } + &log($sys_msg); + &reload_html; + } + elsif ($cmd eq 'twa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + my $room2 = &get_room($alias2wa); + if (3 <= &hierachie($alias2wa, $room2)) { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum temporären Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add_rstat($alias2wa, 3, $room2); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2wa,3)."'>$alias2wa</font> zum <font color='ff0000'>temporären</font> W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'rtwa') { + my $alias2rwa = $cmd[1]; + my $room2 = &get_room($alias2rwa); + if (3 == &hierachie($alias2rwa, $room2)) { + &hierachie_rm_rstat($alias2rwa, $room2); + + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2rwa,3)."'>$alias2rwa</font> vom <font color='ff0000'>temporären</font> W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein temporärer W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'wa') { + my $alias2wa = $cmd[1]; + if (-f "data/user/options/$alias2wa") { + if (5 <= &hierachie($alias2wa)) { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color='ffffff'>kann nicht zum Wächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2wa, 5); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2wa,3)."'>$alias2wa</font> zum W\344chter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'rwa') { + my $alias2rwa = $cmd[1]; + my $hierachie = &hierachie($alias2rwa); + if (5 == $hierachie or 6 == $hierachie) { + &hierachie_rm($alias2rwa); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2rwa,3)."'>$alias2rwa</font> vom W\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2rwa <font color=ffffff>ist kein W\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif (9 <= &hierachie($alias)) { + if ($cmd eq 'ow') { + my $alias2ow = $cmd[1]; + if (-f "data/user/options/$alias2ow") { + if (7 <= &hierachie($alias2ow)) { + &post_prv($alias, "<font color='ffa500'>$alias2ow <font color='ffffff'>kann nicht zum Oberwächter ernannt werden!</font></font>"); + } + else { + &hierachie_add($alias2ow, 7); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> ernennt <font color='".&get_ident($alias2ow,3)."'>$alias2ow</font> zum Oberwächter ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + &reload_html; + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2wa <font color=ffffff>existiert nicht in der Datenbank!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'row') { + my $alias2row = $cmd[1]; + my $hierachie = &hierachie($alias2row); + if (7 == $hierachie or 8 == $hierachie) { + &hierachie_rm($alias2row); + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='$col'>$alias</font> hat <font color='".&get_ident($alias2row,3)."'>$alias2row</font> vom Oberw\344chter zum normalen Chatter degradiert ...</font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + } + else { + &post_prv($alias, "<font color='ffa500'>$alias2row <font color=ffffff>ist kein Oberw\344chter und k\366nnen diese Rechte nicht entzogen werden!</font></font>"); + } + &reload_html; + } + elsif ($cmd eq 'pw') { + my $pw2show = $cmd[1]; + if (-f "data/user/options/$pw2show") { + open PW, "<data/user/options/$pw2show"; + my(@pw) = <PW>; + close PW; + chomp $pw[0]; + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> hat das Passwort <font color='ff0000'>$pw[0]</font> !</font></font>"); + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$pw2show <font color='ffffff'> existiert nicht in der Benutzerdatenbank!</font></font>"); + &reload_html; + } + elsif ($cmd eq 'id' or $cmd eq 'agent') { + my $id2show = $cmd[1]; + if (-f "data/online/ident/$id2show") { + if ($cmd eq 'id') { + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> hat die Temp-ID <font color='ff0000'>".&get_ident($id2show, 1)."</font> !</font></font>"); + } + else { + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> verwendet <font color='ff0000'>".&get_ident($id2show, 2)."</font> !</font></font>"); + } + &reload_html; + } + &post_prv($alias, "<font color='ffa500'>$id2show <font color='ffffff'> ist nicht eingeloggt !</font></font>"); + &reload_html; + } + elsif ($cmd eq 'cool') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + &post($room, '<i><font color=ffffff>' . ×tring . " $msg2post</font></i>", $alias); + &reload_html; + } + elsif ($cmd eq 'rev') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post = reverse($msg2post); + &post($room, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'arks') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + $msg2post =~ s/i/1/gi; + $msg2post =~ s/e/3/gi; + $msg2post =~ s/a/4/gi; + $msg2post =~ s/s/5/gi; + $msg2post =~ s/g/6/gi; + $msg2post =~ s/t/7/gi; + $msg2post =~ s/b/8/gi; + $msg2post =~ s/o/0/gi; + &post($room, "<b><font color='$col'>$alias: <font color='$secol'>$msg2post</font></font></b>", $alias); + &reload_html; + } + elsif ($cmd eq 'ultra') { + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + my @letters = split '', "$alias: $msg2post"; + $msg2post = undef; + foreach (@letters) { + $msg2post .= "<font color='".&random_color."'>$_</font>"; + } + &post($room, "<b>$msg2post</b>", $alias); + &reload_html; + } + } + } + } + } + my($alias2post, $msg2post, $action); + if ($cmd eq 'msg') { + $alias2post = $cmd[1]; + for ($i = 2; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + elsif ($cmd eq '') { + $alias2post = $whisper; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + else { + $alias2post = $cmd; + for ($i = 1; $i <= $#cmd; ++$i) { + $msg2post = $msg2post . ' ' . $cmd[$i]; + } + } + $msg2post =~ s[/me/][<i>$alias</i>]g; + $msg2post =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + if (-f "data/online/users/$alias2post" and not -f "data/online/rooms/$loginplace/$alias2post") { + &post_prv($alias, "<b><font color='$col'><i>Zu $alias2post gefl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &post_prv($alias2post, "<b><font color='$col'><i>$alias fl\374stert:</i> <font color='$secol'>$msg2post</font></font></i></b>"); + &private_javascript($alias, $room, "parent.input.document.inf.whisper.value = '$alias2post';"); + &reload_html; + } + &post_prv($alias, qq[ <font color=ffffff>Benutzer oder Befehl <font color=ffa500>$alias2post</font> ist nicht anwesend/verf\374gbar! Bitte den Befehl "/menu" eingeben, um das Chat-Menü zu öffnen.</font></font>]); + &reload_html; +} +1; diff --git a/0.8.1/modules/divcom.pm b/0.8.1/modules/divcom.pm new file mode 100755 index 0000000..8e17cbe --- /dev/null +++ b/0.8.1/modules/divcom.pm @@ -0,0 +1,288 @@ +sub divcom { + if ($var eq 'list_alias_html') { + &list_alias_html; + } + elsif ($var eq 'alias_html') { + &alias_html; + } + elsif ($var eq 'edit_profile_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_profile_html'); + } + elsif ($var eq 'edit_options_html') { + &secure_checkid($alias, $tmpid); + &edit_html('edit_options_html'); + } + elsif ($var eq 'gb_html') { + &gb_html; + } + elsif ($var eq 'post_gb') { + &secure_checkid($alias, $tmpid); + &post_gb; + } + elsif ($var eq 'edit_profile') { + &secure_checkid($alias, $tmpid); + &edit('edit_profile'); + } + elsif ($var eq 'edit_options') { + &secure_checkid($alias, $tmpid); + &edit('edit_options'); + } + elsif ($var eq 'rm_gb_alias') { + &secure_checkid($alias, $tmpid); + &rm_gb; + } + else { + &error('Parameter fehlt'); + } +} +sub gb_html { + my ($message,$method) = @_; + unless ($method eq 'loggedin') { + &start_html('Benutzerboard'); + &menu(); + } + if ($message eq 'post_empty') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </i>\n einen Text und poste\n <u>dann</u>\n !\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_less') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Ein Eintrag muss mindestens aus 30 Zeichen bestehen ...\n </div>\n <hr>\n"; + + } + elsif ($message eq 'post_ok') { + print " <div class=b>\n Meldung:\n </div>\n <div>\n Vielen Dank f\374r Deinen Beitrag. Wenn Du willst, kannst Du jetzt gleich noch einen Eintrag posten ...\n </div>\n <hr>\n"; + } + else { + print " <div>\n Falls Du Anregungen oder Verbesserungsvorschl\344ge f\374r die Community hast, dann poste doch einen kleinen Eintrag :-)\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="col" value="$col">\n<input type="hidden" name="secol" value="$secol">\n<input type="hidden" name="maxVerlauf" value="$maxVerlauf">\n<input type="hidden" name="verlaufOrder" value="$verlaufOrder">\n<input type="hidden" name="request" value="divcom">\n <input type="hidden" name="method" value="$method">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="guestbook">\n <input type="hidden" name="id" value="y">\n <input size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e 'data/guestbook') { + &error("Konnte dat/guestbook nicht \366ffnen") unless open DATEI, '<data/guestbook'; + @datei = <DATEI>; + close DATEI; + print $q->div(@datei); + } + print $q->end_html; +} +sub post_gb { + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + if ($msg eq '') { + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_empty'); + } else { + &gb_html('post_empty'); + } + } + else { + &alias_html('post_empty'); + } + $client->shutdown(2); + exit 0; + } + if (length($msg) < 30) { + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_less'); + } else { + &gb_html('post_less'); + } + } + else { + &alias_html('post_less'); + } + $client->shutdown(2); + exit 0; + } + + $msg =~ s/</</g; + $msg =~ s/\n/<br>/g; + my $tmpath = ''; + if ($id eq 'y') { + $tmpath = 'data/guestbook'; + } + else { + $tmpath = "data/user/gbooks/$tmp"; + } + open GB, "$tmpath"; + my(@gb) = <GB>; + close GB; + pop @gb if $#gb > 99; + my(@newdatei) = "<br><b>$alias schrieb am $days.$months.$years um $hours:$mins:$secs ...</b><br>$msg<br>\n"; + push @newdatei, @gb; + open GB, ">$tmpath"; + print GB @newdatei; + close GB; + if ($id eq 'y') { + if ($method eq 'loggedin') { + &loggedin('post_ok'); + } else { + &gb_html('post_ok'); + } + $client->shutdown(2); + exit 0; + } + &post_prv ($tmp, "<font color=ffffff>$alias hat soeben einen Pin in Dein Profil geh\344ngt ... </font>"); + &alias_html; + $client->shutdown(2); + exit 0; +} +sub rm_gb { + open GB, "<data/user/gbooks/$alias"; + my(@gbfile) = <GB>; + close GB; + my(@newgbfile) = (); + for ($i = 0; $i <= $#gbfile; ++$i) { + push @newgbfile, $gbfile[$i] if $i != $id; + } + open GB, ">data/user/gbooks/$alias"; + print GB @newgbfile; + close GB; + &alias_html('rm_ok'); +} +sub list_alias_html { + &start_html('Alle Benutzer'); + opendir REGISTERED, 'data/user/options'; + my(@users) = readdir REGISTERED; + closedir REGISTERED; + my(@liste) = sort(@users); + my $nr = $#users - 1; + &menu(); + print " <div>\n Es sind z.Z. genau $nr Benutzernamen in der Datenbank vorhanden! (Sortiert nach #, A-Z, a-z)\n </div>\n <hr>\n <div>\n"; + foreach $_ (@liste) { + if (-f "data/user/options/$_") { + print $q->a({-'href', "chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid"}, "$_"), ' '; + } + } + print " </div>\n</body>\n</html>\n"; +} +sub alias_html { + my $message = $_[0]; + open COUNTS, "<data/user/counts/$tmp"; + local $counter = <COUNTS>; + close COUNTS; + ++$counter; + open COUNTS, ">data/user/counts/$tmp"; + print COUNTS $counter; + close COUNTS; + &start_html($tmp); + &menu(); + print ""; + if ($message eq 'rm_ok') { + print " <div class=b>\n Meldung:\n </div>\n <div>\n Der von Dir gew\344hlte Eintrag wurde erfolgreich gel\366scht.\n </div>\n <hr>\n"; + } + elsif ($message eq 'post_empty') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wolltest soeben einen leeren Eintrag posten. Bitte schreib\n <i>\n zuerst\n </u>\n einen Text und poste\n <u>dann</u>\n !\n <hr>\n"; + } + open PROFILE, "<data/user/profiles/$tmp"; + @data = <PROFILE>; + close PROFILE; + print qq[ <div>\n Dieses Profil wurde insgesamt schon $counter mal aufgerufen !\n <br><br>Alias: $tmp\n <br><br>Nachname: $data[0]\n <br><br>Vorname: $data[1]\n <br><br>Alter: $data[2]\n <br><br>Wohnort: $data[3]\n <br><br>E-Mail:\n <a href="mailto:$data[4]">$data[4]</a>\n <br><br>ICQ-Nummer: $data[5]\n <br><br>Homepage: <a href="$data[6]" target="_new">$data[6]</a>\n <br><br>Weiteres:<br>$data[7]\n <hr>\n Hier kannst Du $tmp eine Nachricht hinterlassen!\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="post_gb">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n <input type="text" size="40" name="msg">\n <font color="ffffff">\n <input type="submit" value="Hinterlassen ...">\n </font>\n </form>\n <hr>\n]; + if (-e "data/user/gbooks/$tmp") { + &error("Konnte data/user/gbooks/$tmp nicht \366ffnen") unless open DATEI, "<data/user/gbooks/$tmp"; + @datei = <DATEI>; + close DATEI; + my $nr = 1; + if ($alias ne $tmp) { + foreach $_ (@datei) { + print "<br>Eintrag # $nr: $_"; + ++$nr; + } + } + else { + print qq[ <table>\n <form action="chat">\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="var" value="rm_gb_alias">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="tmp" value="$tmp">\n]; + for ($i = 0; $i <= $#datei; ++$i) { + print qq[ <tr>\n <td>\n <input type="radio" name="id" value="$i">\n </td>\n <td>\n <div class=q>\n <br>\n Eintrag # $nr:\n $datei[$i]\n </div>\n </td>\n </tr>\n]; + ++$nr; + } + print qq[ </table>\n <table>\n <tr>\n <td>\n <font color=ffffff>\n <input type="submit" value="Markierten Eintrag l\366schen">\n </font>\n </td>\n <td>\n <font color=ffffff>\n <input type="reset" value="Markierung r\374ckg\344ngig machen">\n </font>\n </td>\n </tr>\n </table>\n </form>\n]; + } + } + print $q->end_html; +} +sub edit_html { + my($method, $message) = @_; + &start_html("Benutzerprofil \344ndern"); + if ($method eq 'edit_options_html') { + open DATEI, "<data/user/options/$alias"; + } + elsif ($method eq 'edit_profile_html') { + open DATEI, "<data/user/profiles/$alias"; + } + @data = <DATEI>; + close DATEI; + foreach $_ (@data) { + chomp $_; + } + &menu(); + if ($method eq 'edit_options_html') { + if ($message eq 'edit_options_ok') { + print "<div class=b>\n Hinweis:\n</div>\n<div>\n Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um\n weiterzuchatten einfach Fenster schliessen!\n</div>\n<hr>\n"; + } + elsif ($message eq 'edit_pw_wrong') { + print "<div class=b>\n ACHTUNG!\n</div>\n<div>\n Du hast soeben versucht, dein Passwort zu \344ndern. Jedoch stimmte die Erste Eingabe nicht mit der Zweiten \374berein.\n Bitte versuch es erneuert ...\n</div>\n<hr>\n"; + } + else { + print $q->div('Hier kannst Du Deine Chat-Optionen editieren!'), $q->hr; + } + print qq[<script lang="javascript" type="text/javascript">\n<!--\n\nfunction radioWert(rObj) {\n for (var i=0; i<rObj.length; i++) if (rObj[i].checked) return rObj[i].value;\n return false;\n}\n\nfunction insertcode( code ) {\n document.optionen.elements[radioWert(document.optionen.eingabe)].value = code;\n}\n\n//-->\n</script>\n\n<form name="optionen" action="chat">\n <input type="hidden" name="var" value="edit_options">\n <table>\n <tr>\n <td>\n <div>\n Dein Passwort\n <font color=ffa500>\n (Gut merken !!)\n </font>\n <br>\n <input type="password" name="id" value="$data[0]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n Geb hier das Passwort erneuert ein:\n <br>\n <input type="password" name="tmp" value="$data[0]">\n </div>\n </td>\n </tr>\n </table>\n <hr>\n <div>Einstellungen f\374r den Nachrichten-Verlauf</div>\n <table>\n <tr>\n <td>\n <br>\n <div>Anzahl der Nachrichten im Verlauf (Standart = 10)</div>\n <font color=ffffff>\n <select name="maxVerlauf" size="1">\n <option value="$data[3]">$data[3]\n]; + for ($i = 1; $i <= 50; ++$i) { + print qq[<option value="$i">$i]; + } + print qq[ </select>\n </font>\n </td>\n </tr>\n <tr>\n <td>\n <br>\n<div>Wie sollen die Nachrichten im Verlauf angeordnet sein?</div>\n <font color=ffffff>\n <select name="verlaufOrder" size="1">\n <option value="$data[4]">Bisherige Einstellung ($data[4])\n <option value="0">Neue Verlaufnachrichten oben (0)\n <option value="1">Neue Verlaufnachrichten unten (1)\n </select>\n </font>\n </td>\n </tr>\n </table>\n<br>\n <div>PS: Einstellungen des Nachrichten-Verlaufs werden erst nach einem Neueinloggen aktualisiert.</div>\n <hr>\n <table>\n <tr>\n <td>\n <div>\n <input type="radio" name="eingabe" value="col" checked>\n Auswahl von Farbe 1\n <br>\n (Farbe Deines Nicks):\n <br>\n <input name="col" size="6" maxlength="6" value="$data[1]">\n </div>\n </td>\n <td width=20>\n </td>\n <td>\n <div>\n <input type="radio" name="eingabe" value="secol">\n Auswahl von Farbe 2\n <br>\n (Farbe Deiner Nachrichten):\n <br>\n <input name="secol" size="6" maxlength="6" value="$data[2]">\n </div>\n </td>\n </tr>\n </table>\n<br>\n <div>\n Beliebige Auswahl markieren und Farbe w\344hlen. Um Deine Optionen abzuspeichern,\n auf "Daten \344ndern" klicken!\n </div>\n <br>\n]; + open COLORS, '<templates/colors.sno'; + @colors = <COLORS>; + close COLORS; + print @colors; + } + elsif ($method eq 'edit_profile_html') { + if ($message eq 'edit_profile_ok') { + print " <div class=b>\n Hinweis:\n </div>\n <div>\n Du hast soeben Dein Profil erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren:\n <hr>\n"; + } + else { + print $q->div('Hier kannst Du Dein Profil editieren!'), $q->hr; + } + print qq[ <form action="chat">\n <input type="hidden" name="var" value="edit_profile">\n <div>\n Dein Nachname:\n <br>\n <input name="nachname" value="$data[0]">\n </div>\n <br>\n <div>\n Dein Vorname:\n <br>\n <input name="vorname" value="$data[1]">\n </div>\n <br>\n <div>\n Dein Alter:\n <br>\n <input name="alter" value="$data[2]">\n </div>\n <br>\n <div>\n Dein Wohnort:\n <br>\n <input name="wohnort" value="$data[3]">\n </div>\n <br>\n <div>\n Deine E-Mail Adresse:\n <br>\n <input name="email" value="$data[4]">\n </div>\n <br>\n <div>\n Deine ICQ-Nummer:\n <br>\n <input name="icq" value="$data[5]">\n </div>\n <br>\n <div>\n Deine Homepage:\n <br>\n <input name="homepage" value="$data[6]">\n </div>\n <br>\n <div>\n Weiteres:\n <br>\n <textarea rows="5" cols="40"name="weiteres" wrap="virtual">$data[7]</textarea>\n </div>\n]; + } + print qq[ <hr>\n <font color=ffffff>\n <input type="hidden" name="request" value="divcom">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="room" value="$room">\n <input type="submit" value="Daten \344ndern ...">\n </font>\n </form>\n</body>\n</html>\n]; +} +sub edit { + my $method = $_[0]; + if ($method eq 'edit_profile') { + my $url = $homepage; + $url =~ s[^http://*][]; + $url =~ s[=][]; + $url =~ s["][]; + open PROFILE, ">data/user/profiles/$alias"; + my $profile = "$nachname\n$vorname\n$alter\n$wohnort\n$email\n$icq\nhttp://$url\n$weiteres"; + $profile =~ s/</</g; + print PROFILE $profile; + close PROFILE; + &edit_html('edit_profile_html', 'edit_profile_ok'); + } + elsif ($method eq 'edit_options') { + if ($id ne $tmp) { + &edit_html('edit_options_html', 'edit_pw_wrong'); + $client->shutdown(2); + exit 0; + } + $id = crypt $id, $cryptkey; + open OPTIONS, ">data/user/options/$alias"; + my $options = "$id\n$col\n$secol\n$maxVerlauf\n$verlaufOrder"; + $options =~ s/</</g; + print OPTIONS $options; + close OPTIONS; + open IDENT, "<data/online/ident/$alias"; + my (@ident) = <IDENT>; + close IDENT; + open IDENT, ">data/online/ident/$alias"; + print IDENT $ident[0] . $ident[1] . $ident[2] . "$col\n$secol"; + close IDENT; + my $room = &get_room($alias); + &private_javascript($alias, $room, "parent.input.document.inf.col.value = '$col'; parent.input.document.inf.secol.value = '$secol';"); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> <font color='$secol'>hat seine Chat-Einstellungen geändert</font> ...</font></i>", $alias); + &post_strmsg($alias, $room, 'col', "$col;$secol"); + &edit_html('edit_options_html', 'edit_options_ok'); + } +} +1; diff --git a/0.8.1/modules/hierachie.pm b/0.8.1/modules/hierachie.pm new file mode 100755 index 0000000..b6f5732 --- /dev/null +++ b/0.8.1/modules/hierachie.pm @@ -0,0 +1,77 @@ +sub hierachie { + my($alias, $room) = @_; + open FILE, "<data/online/rstat/$room"; + flock FILE, 2; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + open FILE, '<data/hierachie'; + flock FILE, 2; + my(@hierachie) = <FILE>; + close FILE; + my(@userlevels) = (@hierachie, @rstat); + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($name eq $alias) { + chomp $level; + return $level; + } + } + return 0; +} +sub hierachie_rm { + my $alias = shift @_; + my @return; + open FILE, '<data/hierachie'; + my(@hierachie) = <FILE>; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, '>data/hierachie'; + print FILE @return; + close FILE; +} +sub hierachie_rm_rstat { + my($alias, $room) = @_; + my @return; + return unless open FILE, "<data/online/rstat/$room"; + my(@hierachie) = <FILE>; + close FILE; + foreach $_ (@hierachie) { + push @return, $_ unless /^$alias<;/; + } + open FILE, ">data/online/rstat/$room"; + print FILE @return; + close FILE; +} +sub hierachie_add { + my($alias, $level) = @_; + &hierachie_rm($alias); + open FILE, '>>data/hierachie'; + print FILE "$alias<;$level\n"; + close FILE; +} +sub hierachie_add_rstat { + my($alias, $level, $room) = @_; + &hierachie_rm_rstat($alias, $room); + return unless open FILE, ">>data/online/rstat/$room"; + print FILE "$alias<;$level\n"; + close FILE; +} +sub prove_away { + my($alias, $room) = @_; + return unless open AWAY, "<data/online/rstat/$room.away"; + @away = <AWAY>; + close AWAY; + my $name, $away; + foreach $_ (@away) { + if (/^$alias.*/) { + ($name, $away) = split(/<; /, $_, 3); + chomp $away; + return $away; + } + } +} +1; diff --git a/0.8.1/modules/htdocs.pm b/0.8.1/modules/htdocs.pm new file mode 100755 index 0000000..4f1bbeb --- /dev/null +++ b/0.8.1/modules/htdocs.pm @@ -0,0 +1,127 @@ +sub htdocs { + if ($var eq 'help_html') { + &printfile('templates/help.sno', 'Alle Chatbefehle'); + } + elsif ($var eq 'logo_html') { + &start_html('Logo'); + &logo_html; + } + elsif ($var eq 'menu_html') { + &menu_html; + } + elsif ($var eq 'logs_html') { + &logs_html; + } + elsif ($var eq 'view_logs_html') { + &secure_checkid($alias, $tmpid); + &printfile("data/logs/$tmp", 'Logdatei', 'blank') if 7 <= &hierachie($alias); + } + elsif ($var eq 'superuser_html') { + &secure_checkid($alias, $tmpid); + &superuser_html; + } + elsif ($var eq 'chatiquette_html') { + &printfile('templates/chatiq.sno', 'Chatiquette'); + print $q->end_html; + } + else { + print $q->start_html(-'bgcolor', '000000'), $q->end_html; + } +} +sub menu_html { + &start_html("Men\374"); + print "<div>\n Von hier aus kannst du alle Untermen\374punkte des Systems erreichen:\n</div>\n<hr>\n"; + &menu(); + print "</body>\n</html>"; +} +sub logo_html { + print qq[ <layer top=-3 left=0><div style="position:absolute; top:5; left:10">\n <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"\n codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"\n WIDTH=48 HEIGHT=48>\n <PARAM NAME=movie VALUE="$gfxpath/ySymbol.swf">\n <PARAM NAME=loop VALUE=false>\n <PARAM NAME=menu VALUE=false>\n <PARAM NAME=quality VALUE=high>\n <PARAM NAME=scale VALUE=noborder>\n <PARAM NAME=wmode VALUE=opaque>\n <PARAM NAME=bgcolor VALUE=$bgcolor>\n <EMBED src="$gfxpath/ySymbol.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=48 HEIGHT=48 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </OBJECT>\n </div></layer>\n]; + print $q->end_html; +} +sub logs_html { + &start_html('Logdateien'); + &menu; + print "<div>\n Hier befinden sich alle Logdateien\n</div>\n<hr>\n"; + if (5 <= &hierachie($alias)) { + print $q->div(qq[Folgende Logdateien des Raumes "$standardroom" k\366nnen nur von Oberw\344chtern oder h\366her gelesen werden (Sortiert nach A-Z, a-z):]), $q->br; + opendir LOGS, 'data/logs'; + my(@logs) = readdir LOGS; + closedir LOGS; + my(@sortedir) = sort(@logs); + foreach $_ (@sortedir) { + if (-f "data/logs/$_") { + print $q->a({-'href', "chat?request=htdocs&alias=$alias&var=view_logs_html&tmp=$_&tmpid=$tmpid", -'target', '_new'}, "$_"), ' '; + } + } + } + else { + print $q->div("Logdateien k\366nnen nur von Oberw\344chtern (OW) gelesen werden. Du bist jedoch ein W\344chter (W\304) oder ein", qq["Normaler Chatter". Oberw\344chter k\366nnen alles nachlesen, was \366ffentlich im Raum "Cyberbar" gechattet wurde.]), $q->hr; + } + print $q->end_html; +} +sub superuser_html { + &start_html ('Superuser'); + &menu; + print "<div>Hallo $alias. Du bist als "; + my $hierachie = &hierachie($alias); + if (9 <= $hierachie) { + print $q->b('Administrator'), ' (AD) eingetragen.</div><br>', $q->br; + } + elsif (7 <= $hierachie) { + print $q->b("Oberw\344chter"), ' (OW) eingetragen.</div><br>', $q->br; + } + elsif (5 <= $hierachie) { + print $q->b("W\344chter"), " (W\304) eingetragen.</div><br>", $q->br; + } + else { + print $q->b('normaler Chatter'), ' (NC) eingetragen.</div><br>', $q->br; + } + open FILE, 'data/hierachie'; + my(@hierachie) = <FILE>; + close FILE; + my @ows, @was, @ads; + foreach $_ (@hierachie) { + my($name, $level) = split(/<;/, $_, 3); + chomp $level; + if ($level == 5) { + push @was, $name; + } + elsif ($level == 7) { + push @ows, $name; + } + elsif ($level == 9) { + push @ads, $name; + } + if (3 <= $hierachie) { + if ($level == 6) { + push @was, "$name!"; + } + elsif ($level == 8) { + push @ows, "$name!"; + } + elsif ($level == 10) { + push @ads, "$name!"; + } + } + } + my $nads = $#ads + 1; + print '<div>', $q->b('AD'), "s ($nads St\374ck)"; + foreach $_ (@ads) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrow = $#ows + 1; + print '</div><br><br><div>', $q->b('OW'), "s ($nrow St\374ck)"; + foreach $_ (@ows) { + print $q->font({-'color', 'ffa500'}, ' ' . $_); + } + my $nrwa = $#was + 1; + print '</div><br>', $q->br, '<div>', $q->b("W\304"), "s ($nrwa St\374ck)"; + foreach $_ (@was) { + print $q->font({-'color', 'FFA500'}, ' ' . $_); + } + print qq[<hr>\n Die jeweiligen F\344higkeiten der Oberw\344chter (OW) und der W\344chter (W\304) sind unter\n "<a href="chat?request=htdocs&var=help_html">Chat-Befehle</a>"\n dokumentiert. Versteckte Superuser k\366nnen nur von anderen Superusern auf\ndieser Liste eingesehen werden!\n</div>\n</body>\n</html>\n]; +} +sub menu { + print "<div>\n <a href='chat?request=divcom&var=edit_profile_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Profil \344ndern</a>\n <a href='chat?request=divcom&var=edit_options_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Optionen</a>\n <a href='chat?request=divcom&var=list_alias_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Benutzer</a>\n <a href='chat?request=htdocs&var=help_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Befehle</a>\n <a href='chat?request=divcom&var=gb_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Board</a>\n <a href='chat?request=htdocs&var=superuser_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Superuser</a>\n <a href='chat?request=htdocs&var=logs_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Logs</a>\n <a href='chat?request=statistic&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Statistik</a>\n <a href='chat?request=htdocs&var=chatiquette_html&alias=$alias&tmp=$tmp&tmpid=$tmpid'>Chatiquette</a>\n</div>\n<hr>\n"; +} +1; diff --git a/0.8.1/modules/input.pm b/0.8.1/modules/input.pm new file mode 100755 index 0000000..48df243 --- /dev/null +++ b/0.8.1/modules/input.pm @@ -0,0 +1,14 @@ +sub input { + &rm_away($alias, $room); + $maxVerlauf = '10' if $maxVerlauf eq undef; + $verlaufOrder = '1' if $verlaufOrder eq undef; + if ($tmp eq 'login') { + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat den Chat im Raum <b>$room</b> betreten ...</font></i>"); + } + print qq[<html>\n<head>\n<script language="JavaScript"><!--\n\n// Einstellungsvariablen\nmaxVerlauf = $maxVerlauf; // Anzahl der Eintr\344ge des Verlaufs\nmaxPreview = 20; // Zeichenl\344nge der Verlaufsvorschau\nverlaufOrder = $verlaufOrder; // Neue Nachrichten von: 0=oben, 1=unten\n//autoAwayTimeout = 5; // Sekunden, nach denen der User 'Away' gesetzt wird\n//autoQuitTimeout = 10; // Sekunden, nach denen der User den Chat verl\344sst\nautoAwayTimeout = 300; // Sekunden, nach denen der User 'Away' gesetzt wird\nautoQuitTimeout = 1200; // Sekunden, nach denen der User den Chat verl\344sst\n\n// Interne Variablen\nuserNotFocused = false; // Wenn User nicht schreibt\nuserAway = false; // Wenn User automatisch auf 'Away' gesetzt ist\nuserAwayTime = 0; // Sekunden, die User 'Away' ist\nfullVerlauf = new Array( maxVerlauf ); // Verlaufspuffer\n\nfunction delout()\n{\n addVerlauf (document.inf.msg.value); // Dem Verlauf eine Nachricht anh\344ngen\n document.inf.msg.focus(); // Fukus in das Eingabeform\n document.inf.msg.select(); // Text im Eigabeform markieren\n document.inf.submit(); // Formular absenden\n return false; // Abbrechen, damit das Frame nicht neu geladen wird\n}\n\nfunction CheckAuswahl()\n{\n id=document.verlaufform.verlauf.selectedIndex; // ID des ausgew\344hlten Feldes\n\n if (fullVerlauf[id-1] != null) // Nur, wenn das Feld nicht leer ist\n {\n document.inf.msg.value = fullVerlauf[id-1]; // Eintrag ins Textfeld\n }\n\n document.verlaufform.verlauf.selectedIndex = 0; // Ersten Eintrag (\334berschrift) ausw\344hlen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n\n return true;\n}\n\nfunction addVerlauf (msg)\n{\n if (msg == "") // Falls msg leer\n return false; // Aufruf ignorieren\n\n if (verlaufOrder) // neue Nachrichten von unten\n {\n for (i=0; i<(maxVerlauf-1); i++) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+1].text = document.verlaufform.verlauf.options[i+2].text;\n fullVerlauf[i] = fullVerlauf[i+1];\n }\n }\n else // neue Nachrichten von oben\n {\n for (i=(maxVerlauf-2); i>=0; i--) // Alle Eintr\344ge einen aufrutschen\n {\n document.verlaufform.verlauf.options[i+2].text = document.verlaufform.verlauf.options[i+1].text;\n fullVerlauf[i+1] = fullVerlauf[i];\n }\n }\n\n if (msg.length > maxPreview) // Vorschau zuschneiden\n pre = msg.slice(0, maxPreview-3) + "...";\n else\n pre = msg;\n\n if (verlaufOrder) // pos = Position des neuen Eintrags\n pos = maxVerlauf-1;\n else\n pos = 0\n\n document.verlaufform.verlauf.options[pos+1].text = pre; // Neue Vorschau anf\374gen\n fullVerlauf[pos] = msg; // Neuen Eintrag an den Verlauf anf\374gen\n\n// document.verlaufform.verlauf.selectedIndex = maxVerlauf; // Fokus auf den letzten Eintrag\n document.verlaufform.verlauf.selectedIndex = 0; // Fokus auf den ersten Eintrag (\334berschrift)\n}\n\nfunction msgBlur()\n{\n userNotFocused = true;\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction msgFocus()\n{\n userNotFocused = false;\n if (userAway) // Wird ausgef\374hrt, falls User 'Away' war\n {\n ; // nop\n }\n userAwayTime = 0;\n userAway = false;\n}\n\nfunction checkInterval()\n{\n// status = "userNotFocused=" + userNotFocused + "; userAway=" + userAway + "; userAwayTime=" + userAwayTime + ""; // Debug\n if (userNotFocused)\n {\n userAwayTime += 5; // Addiere 5, da nur alle 5Sek ausgef\374hrt\n if (!userAway)\n {\n if (autoAwayTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n if (document.inf.tmp.value != "away")\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2faway&tmp=autoaway","reload"); // 'Away' setzen\n userAway = true;\n }\n }\n else\n {\n if (autoQuitTimeout < userAwayTime) // Falls Zeit abgelaufen\n {\n open ("chat?request=postmessage&alias=$alias&tmpid=$tmpid&msg=%2fexit&tmp=autologout","reload"); // Chat beenden\n }\n }\n }\n\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden wieder aufrufen\n}\n\nfunction initFrame()\n{\n window.setTimeout("checkInterval()",5000); // In 5 Sekunden aufrufen\n document.inf.msg.focus(); // Eingabefeld fokusieren\n}\n//-->\n</script>\n]; + &style; + print qq[</head>\n<body class="blank" onload="initFrame();">\n <div align="left">\n <table border="0" cellpadding="0" cellspacing="0">\n <tr>\n <td>\n <form name="inf" target="reload" action="chat" onsubmit="return delout();">\n <input type="hidden" name="request" value="postmessage">\n <input type="hidden" name="alias" value="$alias">\n <input type="hidden" name="room" value="$room">\n <input type="hidden" name="col" value="$col">\n <input type="hidden" name="secol" value="$secol">\n <input type="hidden" name="tmpid" value="$tmpid">\n <input type="hidden" name="whisper" value="$whisper">\n <input type="hidden" name="tmp" value="$tmp">\n <input size="40" maxlength="300" name="msg" onBlur="msgBlur();" onFocus="msgFocus();">\n </form>\n </td>\n <td><form name="verlaufform">\n <script language="JavaScript"><!--\n document.write("<select size='1' name='verlauf' size='40' onChange='CheckAuswahl();'>");\n document.write("<option>- Nachrichten-Verlauf -</option>");\n for(i=0; i<maxVerlauf; i++) // Leere Verlaufsfelder generieren\n document.write("<option value>(leer)</option>");\n document.write("</select>");\n //-->\n </script>\n </form>\n </td>\n </tr>\n </table>\n </div>\n</body>\n</html>\n]; + $client->$shutdown(2); + exit 0; +} +1; diff --git a/0.8.1/modules/loggedin.pm b/0.8.1/modules/loggedin.pm new file mode 100755 index 0000000..848505d --- /dev/null +++ b/0.8.1/modules/loggedin.pm @@ -0,0 +1,41 @@ +sub loggedin { + &start_html($loginplace, 'blank'); + print qq[<div>\n <font color='$col'>$alias</font>, sch\366n da\337 Du da bist :-), <a href='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder' style="text-decoration: underline; color: red">hier</a> kannst du die Seite aktualisieren.\n</div>\n<hr>\n<div>\n<a href="chat?request=stream&alias=$alias&room=$standardroom&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder" style="text-decoration: underline; color: red; font-size:20px">Hier</a>\nkannst du den Standardraum $standardroom betreten. <br><br>\n]; + opendir ROOMDIRS, 'data/online/rooms'; + local(@roomdirs) = readdir ROOMDIRS; + close ROOMDIRS; + foreach $_ (@roomdirs) { + if (-e "data/online/rooms/$_" and $_ ne '..' and $_ ne '.') { + my $room = $_; + + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + + my $door = '[<font color=red>Abgesperrt!</font>]' if $rstat[0] eq "1\n"; + + opendir ROOMDIR, "data/online/rooms/$room"; + my(@roomdir) = readdir ROOMDIR; + close ROOMDIR; + + my $nr = $#roomdir - 1; + if ($door or $_ eq $loginplace) { + print $q->b($_), " $door ($nr) "; + } + else { + print $q->b($q->a({-'href', "chat?request=stream&alias=$alias&room=$_&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder"}, "$_")), " ($nr)"; + } + print " Raumthema: $rstat[1]" if $rstat[1] ne "\n"; + print $q->br; + foreach $_ (@roomdir) { + if ($_ ne '..' and $_ ne '.') { + my $col = &get_ident($_,3); + print "<a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid' target='$_' style='color: $col'>$_</a> "; + } + } + print $q->br, $q->br; + } + } + &gb_html($_[0],'loggedin'); +} +1; diff --git a/0.8.1/modules/nohup.out b/0.8.1/modules/nohup.out new file mode 100644 index 0000000..bb27a65 --- /dev/null +++ b/0.8.1/modules/nohup.out @@ -0,0 +1,2 @@ +Can't locate config.pm in @INC (@INC contains: /usr/lib/perl5/5.6.1/i686-linux /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i686-linux /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl .) at ychatd.pl line 5. +BEGIN failed--compilation aborted at ychatd.pl line 5. diff --git a/0.8.1/modules/online.pm b/0.8.1/modules/online.pm new file mode 100755 index 0000000..4c87fb0 --- /dev/null +++ b/0.8.1/modules/online.pm @@ -0,0 +1,167 @@ +sub online { + &secure_checkid($alias, $tmpid); + my(@away) = &prove_away($alias, $room, 'return_list'); + for (;;) { + for ($i = 0; $i <= $#away; $i += 2) { + last if ($away[$i] eq $alias || $room eq $loginplace); + } + open DATEI, "<data/online/users/$alias"; + my $oldstamp = <DATEI>; + close DATEI; + if ($oldstamp > time - 100) { + open DATEI, "<data/user/counts/$alias.online"; + my $online = <DATEI>; + close DATEI; + my $total = time - $oldstamp + $online; + open DATEI, ">data/user/counts/$alias.online"; + print DATEI $total; + close DATEI; + } + last; + } + unless (-d "data/online/rooms/$room") { + mkdir "data/online/rooms/$room", 511; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + open DATEI, '<data/online/prove'; + my $provetime = <DATEI>; + close DATEI; + + &check_online if $provetime < time - 40; + print <<END; + <html> + <head> + <meta http-equiv="refresh" content="20" URL="chat?request=online&room=$room&alias=$alias&tmpid=$tmpid"> + <style type="text/css">\n a { font-family: arial; font-size:11px; color: #ffffef; }\n a:hover { color: #ffffff; }\n </style>\n <style type="text/css" media="all">\n a { text-decoration: none; }\n a:hover { text-decoration:underline; } + </style> + </head> + <body bgcolor="$chatbg"> +END + + opendir ROOM, 'data/online/rooms/' . $room; + my(@room) = readdir(ROOM); + closedir ROOM; + + my $chatter = $#room - 1; + print "<font size='1' color='ffffff' face='arial'>$room ($chatter):</font><table>\n"; + + open FILE, "<data/online/rstat/$room"; + my(@rstat) = <FILE>; + close FILE; + shift @rstat; + shift @rstat; + + open FILE, '<data/hierachie'; + my(@userlevels) = (<FILE>, @rstat); + close FILE; + + open FILE, "<data/online/rstat/$room.away"; + my(@away) = <FILE>; + close FILE; + + my $hierachie; + foreach (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($name eq $alias) { + $hierachie = $level; + last; + } + } + + my %alias; + foreach (@room) { + if (-f "data/online/rooms/$room/$_") { + open IDENT, "data/online/ident/$_"; + my @ident = <IDENT>; + close IDENT; + chomp $ident[2]; + chomp $ident[3]; + $alias{$ident[2]} = [$_, $ident[3]]; + + } + } + + @room = undef; + foreach my $value (reverse (sort { $a <=> $b } keys %alias)) { + push @room, ${$alias{$value}}[0] + } + + foreach my $nick (@room) { + if (-f "data/online/rooms/$room/$nick") { + my $inside = 0; + my $col = &get_ident($nick,3); + foreach $_ (@away) { + my($name, $awaymessage) = split(/<;/, $_, 3); + if ($name eq $nick) { + chomp $awaymessage; + $awaymessage =~ s/=//ig; + print "<tr><td><img border='0' title='$awaymessage' alt='$awaymessage' src='$gfxpath/away.gif'></td>"; + $inside = 2; + } + } + if ($inside == 0) { + foreach $_ (@userlevels) { + my($name, $level) = split(/<;/, $_, 3); + if ($nick eq $name) { + chomp $level; + $inside = 1; + if ($level == 1) { + print "<tr><td><img title='Raumbesetzer' alt='Raumbesetzer' src='$gfxpath/rb.gif'></td>"; + last; + } + elsif ($level == 2) { + print "<tr><td><img title='Die Unschuld vom Land' alt='Die Unschuld vom Land' src='$gfxpath/uvl.gif'></td>"; + last; + } + elsif ($level == 3) { + print "<tr><td><img title='Temporärer Wächter' alt='Temporärer Wächter' src='$gfxpath/twa.gif'></td>"; + last; + } + elsif ($level == 5) { + print "<tr><td><img title='Wächter' alt='Wächter' src='$gfxpath/wa.gif'></td>"; + last; + } + elsif ($level == 7) { + print "<tr><td><img title='oberwächter' alt='Oberwächter' src='$gfxpath/ow.gif'></td>"; + last; + } + elsif ($level == 9) { + print "<tr><td><img title='Administrator' alt='Administrator' src='$gfxpath/adm.gif'></td>"; + last; + } + + if (5 <= $hierachie) { + if ($level == 6) { + print "<tr><td><img title='Wächter' alt='Unsichtbarer Wächter' src='$gfxpath/wa-i.gif'></td>"; + last; + } + elsif ($level == 8) { + print "<tr><td><img title='oberwächter' alt='Unsichtbarer Oberwächter' src='$gfxpath/ow-i.gif'></td>"; + last; + } + elsif ($level == 10) { + print "<tr><td><img title='Administrator' alt='Unsichtbarer Administrator' src='$gfxpath/adm-i.gif'></td>"; + last; + } + + } + print '<tr><td></td>'; + last; + } + } + } + if ($inside == 0) { + print '<tr><td></td>'; + } + print "<td><a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$nick&tmpid=$tmpid' target='$nick' style='color: $col'>$nick</a></td></tr>\n"; + } + } + print '</table></body></html>'; +} +1; diff --git a/0.8.1/modules/postmessage.pm b/0.8.1/modules/postmessage.pm new file mode 100755 index 0000000..f787534 --- /dev/null +++ b/0.8.1/modules/postmessage.pm @@ -0,0 +1,90 @@ +sub postmessage { + if (not -e "data/online/rooms/$room/$alias" and $tmp ne 'autoaway' and $tmp ne 'autologout') { + &post_prv($alias, "<font color=ffffff>Du befindest Dich nicht im Raum <font color=ffa500>$room</font> und kannst dort auch keine Nachrichten posten!</font>"); + &reload_html; + } + elsif (length $msg > 300) { + &post_prv($alias, "<font color=ffffff>Deine Nachricht enth\344lt zu viele Zeichen. Maximal sind 300 Zeichen erlaubt.</font>"); + &reload_html; + } + if ($tmp eq 'away') { + &rm_away($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$alias</font> hat sich zur\374ck gemeldet ... </font></i><script language='JavaScript'>parent.online.location.reload();</script>", $alias); + &private_javascript($alias, $room, q[parent.input.document.inf.tmp.value = 'notaway';]); + } + $msg =~ s/</</g; + if (substr($msg, 0, 1) ne '/') { + unless ($tmp eq 'autoaway') { + foreach $_ ($col, $secol) { + &prove_color($alias, $_); + } + } + open MSGFILE, ">>data/msgs/$room"; + if (not $msg =~ s[/me/][<i>$alias</i>]g || $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g) { + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color='$col'>$alias: <font color='$secol'>$msg<br></font></font></b><;$alias<;\n"; + } + else { + $msg =~ s[/me/][<i>$alias</i>]g; + $msg =~ s[/m/][<i><font color=$col>$alias</font></i>]g; + print MSGFILE '!<;' . time . "<;!<;!<;<b><font color=$secol>$msg</font></font></b><br><;$alias<;\n"; + } + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } + &log("<b><font color=$col>$alias: <font color=$secol>$msg</font></font></b>") if $room eq $standardroom; + &reload_html; + } + else { + &command($msg, $tmp); + } +} +sub post { + my($room, $msg2post, $alias, $secroom) = @_; + my(@rooms) = $room; + push @rooms, $secroom if $room ne $secroom; + foreach my $theroom (@rooms) { + open MSGFILE, ">>data/msgs/$theroom"; + print MSGFILE '!<;' . time . "<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$theroom"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$theroom/$_"; + } + } + &log($msg2post) if $room eq $standardroom; +} +sub post_prv { + my($alias2post, $msg2post) = @_; + my $roomofalias = &get_room($alias2post); + return 'false' if not $roomofalias; + open MSGFILE, ">>data/msgs/$roomofalias"; + print MSGFILE "$alias2post<;" . time . "<;!<;!<;$msg2post<br><;$alias<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$roomofalias"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$roomofalias/$_"; + } + return 'true'; +} +sub post_strmsg { + my($alias, $room, $command, $action) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . "<;$command<;$action<;!<;!<;\n"; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} + +1; diff --git a/0.8.1/modules/shared.pm b/0.8.1/modules/shared.pm new file mode 100755 index 0000000..e458953 --- /dev/null +++ b/0.8.1/modules/shared.pm @@ -0,0 +1,353 @@ +sub reload_html { + print "<html><body bgcolor='$chatbg'></body></html>"; + &del_awake(); + $client->shutdown(2); + exit 0; +} +sub printfile { + my($file2print, $pagetitle, $bodyclass) = @_; + &start_html($pagetitle, $bodyclass) if $pagetitle ne ''; + &menu unless $bodyclass eq 'blank'; + open FILE2PRINT, "<$file2print"; + print "$_\n" while defined($_ = <FILE2PRINT>); + close FILE2PRINT; +} +sub start_html { + print "<html><head><title>$title - $_[0]</title>$_[2]"; + &style; + print '</head>'; + if ($_[1] eq 'start') { + print '<body onload="document.login.alias.focus();">'; + } + elsif ($_[1] ne '') { + print "<body class=$_[1]>"; + } + else { + print '<body>'; + } +} +sub log { + my $msg2log = $_[0]; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + my $js; + $hours--; + ($msg2log, $js) = split(/<script/, $msg2log, 3); + open LOG, ">>data/logs/$days.$months.$years"; + print LOG "<br><font color=ffffef><i>($hours:$mins:$secs)</i></font> $msg2log\n"; + close LOG; +} +sub timestring { + my($mins, $hours) = (localtime)[1, 2]; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + return "$hours:$mins"; +} +sub timearray { + my($secs, $mins, $hours, $days, $months, $years) = (localtime)[(0, 1, 2, 3, 4, 5)]; + $months += 1; + $hours = '0' . $hours if $hours < 10; + $mins = '0' . $mins if $mins < 10; + $secs = '0' . $secs if $secs < 10; + $days = '0' . $days if $days < 10; + $months = '0' . $months if $months < 10; + $years = $years - 100; + if ($years < 10) { + $years = '200' . $years; + } + else { + $years = '20' . $years; + } + return $secs, $mins, $hours, $days, $months, $years; +} +sub error { + my $error_msg = $_[0]; + &start_html("Error: ($error_msg)"); + print $q->div("Error: ($error_msg)"), $q->end_html; + open ERROR, '>>data/error'; + print ERROR "Alias: $alias TempID: $tmpid File. $0 PID: $$ Time: " . time . " Message: $error_msg \n"; + close ERROR; + $client->shutdown(2) if $client; + exit 0; +} +sub check_online { + open PROVE, '>data/online/prove'; + print PROVE time; + close PROVE; + opendir DIR, 'data/online/rooms'; + my(@roomdir) = readdir DIR; + closedir DIR; + foreach my $theroom (@roomdir) { + opendir DIR, "data/online/rooms/$theroom"; + my(@roomusers) = readdir DIR; + closedir DIR; + my $empty = 1; + foreach $user (@roomusers) { + if (-f "data/online/rooms/$theroom/$user") { + $empty = 0; + open USER, "<data/online/rooms/$theroom/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + unlink "data/online/$theroom/$user"; + open USER, "<data/online/users/$user"; + my $userstamp = <USER>; + close USER; + if ($userstamp < time - 40) { + &post($theroom, '<i><font color=ffffff>' . ×tring . " <font color='".&get_ident($user,3)."'>$user</font> hat den Chat verlassen ... </font></i>"); + if ($user ne $alias) { + &rm_alias($user, $theroom); + } + else { + unlink "data/online/rooms/$theroom/$user"; + } + } + } + } + } + opendir PIDS, "data/online/pids/$theroom"; + my(@pids) = readdir PIDS; + closedir PIDS; + if ($empty == 1) { + rmdir "data/online/rooms/$theroom"; + unlink "data/online/rstat/$theroom"; + unlink "data/online/rstat/$theroom.away"; + unlink "data/msgs/$theroom"; + foreach $_ (@pids) { + unlink "data/online/pids/$theroom/$_" if -f "data/online/pids/$theroom/$_"; + } + rmdir "data/online/pids/$theroom"; + } + } +} +sub rm_if_loggedin { + my $alias = shift; + my $room = &get_room($alias); + while ($room ne undef) { + &rm_alias($alias, $room); + &post($room, '<i><font color=ffffff>' . ×tring . " <font color='$col'>$user</font> hat den Chat verlassen ... </font></i>"); + $room = &get_room($alias); + } +} +sub secure_checkid { + my($alias2check, $tmpid) = @_; + &error("Falsche TempID! $tmpid") unless -f "data/online/tmpid/$alias.$tmpid"; +} +sub rm_alias { + my($alias, $room) = @_; + unlink "data/online/rooms/$room/$alias"; + unlink "data/online/users/$alias"; + opendir TMPID, 'data/online/tmpid'; + my(@tmpid) = readdir TMPID; + close TMPID; + foreach $_ (@tmpid) { + unlink "data/online/tmpid/$_" if /^$alias\..+$/; + } + unlink "data/online/ident/$alias"; + &rm_rstat($alias, $room); +} +sub rm_rstat { + my($alias, $room) = @_; + open RSTAT, "<data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + my(@rstat2) = ($rstat[0], $rstat[1]); + for ($i = 2; $i <= $#rstat; ++$i) { + chomp $rstat[$i]; + push @rstat2, $rstat[$i] . "\n" unless $rstat[$i] =~ /^$alias<;/; + } + open RSTAT, ">data/online/rstat/$room"; + print RSTAT @rstat2; + close RSTAT; +} +sub rm_away { + my($alias, $room) = @_; + open AWAY, "<data/online/rstat/$room.away"; + my(@away) = <AWAY>; + close AWAY; + my @away2; + foreach $_ (@away) { + my(@split) = split(/<;/, $_, 0); + push @away2, $_ if $alias ne $split[0]; + } + open AWAY, ">data/online/rstat/$room.away"; + print AWAY @away2; + close AWAY; +} +sub rm_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + my @new; + foreach $_ (@entry) { + push @new, $_ if $entry . "\n" ne $_; + } + if (@entry != @new) { + open ENTRY, ">data/$file"; + print ENTRY @new; + close ENTRY; + return 1; + } + else { + return; + } +} +sub add_entry { + my($entry, $file) = @_; + open ENTRY, "<data/$file"; + my(@entry) = <ENTRY>; + close ENTRY; + foreach $_ (@entry) { + chomp $_; + return if $entry eq $_; + } + open ENTRY, ">>data/$file"; + print ENTRY $entry . "\n"; + close ENTRY; + return 1; +} +sub prove_color { + my($alias, $color) = @_; + my $length = length $color; + if ($length > 6 or $length < 6) { + &post_prv($alias, "<font color=ffffff>Ung\374ltige Hexadezimalfarbe.</font>"); + &reload_html; + } +} +sub kill_alias { + my($alias2kill, $alias) = @_; + my($secs, $mins, $hours, $days, $months, $years) = &timearray; + unlink "data/user/options/$alias2kill"; + unlink "data/user/profiles/$alias2kill"; + unlink "data/user/gbooks/$alias2kill"; + unlink "data/user/counts/$alias2kill"; + unlink "data/user/counts/$alias2kill.online"; + unlink "data/user/lastlogin/$alias2kill"; + unlink "data/user/memos/$alias2kill"; + &rm_entry($alias2kill, 'ban'); + open DEL, '>>data/kill'; + print DEL "($days.$months.$years $hours:$mins:$secs) $alias2kill wurde von $alias gekillt\n"; + close DEL; +} +sub random_color { + my(@digit) = ('F', 'C', 'A', 'B', (5, 6, 7, 8, 9)); + my $dig1 = rand @digit; + my $dig2 = rand @digit; + my $dig3 = rand @digit; + my $dig4 = rand @digit; + my $dig5 = rand @digit; + my $dig6 = rand @digit; + return $digit[$dig1] . $digit[$dig2] . $digit[$dig3] . $digit[$dig4] . $digit[$dig5] . $digit[$dig6]; +} +sub url_decode { + my $t = shift @_; + $t =~ s[/][]; + $t =~ tr/+/ /; + while ($t =~ s/%([a-f0-9][a-f0-9])/chr hex $1;/ie) { + (); + } + return $t; +} +sub url_encode { + my $t = shift @_; + while ($t =~ s/([^\w()'*~!.-])/sprintf '%%%02x', $1;/eg) { + (); + } + return $t; +} +sub calculate_hpm { + my($hits, $starttime) = @_; + return sprintf('%.2f', $hits / ((time - $starttime) / 60)); +} +sub calculate_uptime_hours { + my $starttime = shift @_; + return sprintf('%.2f', (time - $starttime) / 3600); +} +sub private_javascript { + my($alias, $room, $javascript) = @_; + open MSGFILE, ">>data/msgs/$room"; + print MSGFILE "$alias<;" . time . qq[<;!<;!<;<script language="JavaScript">$javascript</script><;\n]; + close MSGFILE; + opendir PID, "data/online/pids/$room"; + my(@pids) = readdir PID; + closedir PID; + foreach $_ (@pids) { + kill 'USR1', $_ if -f "data/online/pids/$room/$_"; + } +} +sub get_theme { + my $room = shift @_; + open RSTAT, "data/online/rstat/$room"; + my(@rstat) = <RSTAT>; + close RSTAT; + chomp $rstat[1]; + return '<b>Raumthema:</b>' . $rstat[1] if $rstat[1] ne undef; +} +sub get_room { + my $alias = shift @_; + opendir DIR, 'data/online/rooms'; + my(@dir) = readdir DIR; + closedir DIR; + foreach my $room (@dir) { + opendir DIR, "data/online/rooms/$room"; + my(@chatter) = readdir DIR; + closedir DIR; + foreach my $chatter (@chatter) { + return $room if $chatter eq $alias; + } + } + return undef; +} +sub get_ident { + my ($alias,$line) = @_; + open IDENT, "data/online/ident/$alias"; + my (@ident) = <IDENT>; + close IDENT; + chomp $ident[$line]; + return $ident[$line]; +} +sub get_online_users { + my @dir = &diropen('data/online/rooms'); + my @users; + + foreach my $room (@dir) { + next if $room =~ /\./; + my @room = &diropen("data/online/rooms/$room"); + + foreach (@room) { + push @users, $_ unless /\./; + } + } + return @users; +} +sub get_online_time { + my $alias = shift; + if (-f "data/user/options/$alias") { + open ONLINE, "<data/user/counts/$alias.online"; + my $online = <ONLINE>; + close ONLINE; + return sprintf('%.2f', $online / 3600); + } + return false; +} +sub diropen { + my $dir = shift; + + opendir DIR, $dir; + my @dir = readdir(DIR); + closedir(DIR); + + return @dir; +} +sub del_awake { + unlink "data/online/awake/$$"; +} +sub debug { + open DEBUG, '>>debug'; + while (@_) { + chomp $_; + print DEBUG "$_\n"; + } + close DEBUG; +} +1; diff --git a/0.8.1/modules/start.pm b/0.8.1/modules/start.pm new file mode 100755 index 0000000..4fe416b --- /dev/null +++ b/0.8.1/modules/start.pm @@ -0,0 +1,264 @@ +sub start { + if ($var eq 'create_alias_html') { + &create_alias_html; + } + elsif ($var eq 'create_alias') { + &create_alias; + } + elsif ($var eq 'login_html') { + &login_html; + } + elsif ($var eq 'chatiquette_html') { + &chatiquette_html; + } + elsif ($alias eq '') { + &login_html; + } + else { + &checklogin; + } +} +sub login_html { + &check_online; + my $counter = undef; + open COUNT, '<data/count'; + $counter = <COUNT>; + close COUNT; + ++$counter; + open COUNT, '>data/count'; + flock COUNT, 2; + print COUNT $counter; + close COUNT; + + my(@users) = &get_online_users; + + opendir REGISTRED, 'data/user/options'; + my(@registred) = readdir REGISTRED; + closedir REGISTRED; + + my($logtin, $users) = ($#users + 1, $#registred - 1); + &start_html("Created & Copyright by Paul C. B\374tow", 'start'); + print qq[ <center>\n <table width=500>\n <tr>\n <td>\n <center>\n <table>\n <tr>\n <td>\n <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=240 HEIGHT=240>\n <param name=movie value="$gfxpath/yIntro.swf">\n <param name=loop value=false>\n <param name=menu value=false>\n <param name=quality value=high>\n <param name=scale value=noborder>\n <param name=wmode value=opaque>\n <param name=bgcolor value=$bgcolor>\n <embed src="$gfxpath/yIntro.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=240 HEIGHT=240 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n </object>\n </td>\n <td>\n <div>\n yChat: Version $version\n <br><br>\n Letztes Update: $datum\n <br><br>\n Seitenaufrufe: $counter\n <br><br>\n Benutzer registriert: $users\n <br><br>\n Benutzer online: $logtin\n <br><br>\n Benutzerlimit: $limit\n <br><br>\n Beta-yChat: <a href="http://www.java.yChat.de">www.java.yChat.de</a>\n <br><br><a href="http://www.webchat.de" target="_new"> <img src="http://www.webchat.de/webchat.gif" alt="[webchat]" title="[webchat]" border="0"></a><br>\n<img src="http://stats.topwebmaster.net/extern/de/snooper"></div></td>\n </tr>\n </table>\n </center>\n </div>\n <br>\n <br>\n]; + if ($tmp eq 'true') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Wahrscheinlich existiert Dein Alias "$alias" nicht,\n <br>\n Du hast Dich verschrieben oder das Passwort ist falsch.\n <br>\n Versuch es erneuert !\n </div>\n]; + } + elsif ($tmp eq 'quit') { + print qq[ <div>\n Du hast soeben den Chat verlassen.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autologout') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'autokick') { + print qq[ <div>\n Du wurdest automatisch aus dem Chat katapultiert. Grund: Du hast den Chat geflutet!\n <br>\n Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + elsif ($tmp eq 'banned') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest aus dem Chat verbannt!!!\n <br>\n Z.z. kannst Du Dich leider nicht in den Chat einloggen.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'kick') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat katapultiert!\n <br>\n Schlechtes Verhalten mag die Ursache hierf\374r sein.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'selfkill') { + print qq[ <div>\n Du hast dich soeben ganz und gar aus dem System gel\366scht!\n <br>\n Wenn du dir einen neuen Nick angelen willst, dann einfach auf "Registrieren" klicken! :-)\n </div>\n]; + } + elsif ($tmp eq 'selfkill') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Du wurdest soeben aus dem Chat ausgeloggt!\n <br>\n Ursache hierf\374r mag sein, da\337 der Chat voll war und Du Dich nicht am\n Geschehen beteiligt- und unn\366tige Chatkapazit\344ten in Anspruch\n genommen hast.\n <br>\n Sorry!\n </div>\n"; + } + elsif ($tmp eq 'full') { + print "<div class=b>ACHTUNG!</div><div>Der Chat ist leider voll! Bitte versuch Dich sp\344ter noch mal einzuloggen!</div>"; + } + elsif ($var eq 'create_alias') { + print q[<div>Du hast sich soeben in die Datenbank eingetragen. Einfach auf "Los Geht's" klicken :-)</div>]; + } + else { + print qq[ <div>\n Herzlich willkommen!\n <br>\n Einfach Daten eingeben und auf "Los Geht's" klicken :-)\n </div>\n]; + } + print qq[ <hr>\n <form name="login" method="GET">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="tmp" value="true">\n <table>\n <tr>\n <td>\n <div>\n Dein Alias:\n <br>\n <input name="alias" value="$alias">\n </div>\n </td>\n <td>\n <div>\n Dein Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n </td>\n </tr>\n </table>\n <br>\n <br>\n <div>\n Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken!\n </div>\n <br>\n <table>\n <tr>\n <td>\n <font color="ffffff">\n <input type="submit" value="Los geht's!">\n </font>\n </form>\n </td>\n <td>\n <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias_html">\n <font color="ffffff">\n <input type="submit" value="Registrieren">\n </font>\n </form>\n </td>\n </tr>\n </table>\n <hr>\n]; + if ($logtin > 0) { + print q[<div>Folgende Personen sind eingeloggt:<br><font size='1'>]; + foreach $_ (@users) { + print "$_ " if -f "data/online/users/$_"; + } + print '</font></div>'; + } + print " </td>\n </tr>\n </table>\n </center>\n</body>\n</html>\n"; + unless (-d 'data/online/rooms') { + mkdir 'data/online/rooms', 511; + } +} +sub create_alias_html { + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq 'ip://' . $client->peerhost) { + $tmp = 'banned'; + &login_html; + &del_away(); + $client->shutdown(2); + exit 0; + } + } + my $reload = $_[0]; + &start_html('Registration'); + print " <center>\n <table width=500>\n <tr>\n <td>\n"; + if ($reload eq 'alias_exists') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Der von Dir gew\344hlte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit\n einem anderen Benutzernamen !\n </div>\n <hr>\n]; + } + elsif ($reload eq 'pw_wrong') { + print " <div class=b>\n ACHTUNG!\n </div>\n <div>\n Deine beiden Passworteingaben stimmen nicht \374berein. Bitte geb das Passwort erneuert an um sicherzugehen, da\337\n kein falsches Passwort abgespeichert wird !\n </div>\n <hr>\n"; + } + elsif ($reload eq 'alias_prohibited') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt illegale Zeichen. Bitte versuch einen anderen Benutzernamen!\n </div>\n <hr>\n]; + } + elsif ($reload eq 'alias_length') { + print qq[ <div class=b>\n ACHTUNG!\n </div>\n <div>\n Dein gew\344hlter Benutername "$alias" enth\344lt zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!\n </div>\n <hr>\n]; + } + else { + print " <div>\n Hier kannst Du Dich registrieren. Bitte beachte, da\337 die Passworteingabefelder \374bereinstimmen!\n </div>\n <hr>\n"; + } + print qq[ <form action="chat">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="var" value="create_alias">\n <div>\n Dein Alias:\n <font color="ffa500">\n (Mu\337 angegeben werden)\n </font>\n <br>\n <input name="alias" VALUE="$alias">\n </div>\n <br>\n <div>\n Dein gew\374nschtes Passwort:\n <br>\n <input type="password" name="pw" value="$pw">\n </div>\n <br>\n <div>\n Geb hier Dein Passwort erneuert ein:\n <br>\n <input type="password" name="tmp">\n </div>\n <br>\n <font color=ffffff>\n <input type="submit" value="Registrieren">\n </font>\n <br>\n </form>\n <hr>\n <div>\n Um den Chat zu betreten m\374ssen die Daten nach der Registration auf der Startseite erneuert best\344tigt werden !\n </div>\n </td>\n </tr>\n </table>\n</center>\n</body>\n</html>\n]; +} +sub checklogin { + opendir USERS, 'data/online/users'; + my(@users) = readdir USERS; + closedir USERS; + my $users = $#users; + if ($users > $limit && 3 > &hierachie($alias)) { + $tmp = 'full'; + &login_html; + &del_away(); + $client->shutdown(2); + exit 0; + } + my $lognotexists = 'true'; + opendir USERDIR, 'data/user/options'; + my(@userdir) = readdir USERDIR; + closedir USERDIR; + foreach $user (@userdir) { + if ($user eq $alias) { + open OPTIONS, "<data/user/options/$alias"; + my(@options) = <OPTIONS>; + close OPTIONS; + foreach $_ (@options) { + chomp $_; + } + if ((crypt $pw, $cryptkey) eq $options[0] || $options[0] eq $pw) { + open BAN, '<data/ban'; + my(@ban) = <BAN>; + close BAN; + foreach $_ (@ban) { + chomp $_; + if ($_ eq $alias or $_ eq 'ip://' . $client->peerhost) { + if (-f "data/online/users/$admin") { + &post_prv($admin, "<font color=ffffff><font color=ffa500>$_</font> kann sich nicht einloggen (Ist verbannt)!!</font>"); + } + $tmp = 'banned'; + &login_html; + &del_away(); + $client->shutdown(2); + exit 0; + } + } + if ($options[1] eq undef) { + $col = &random_color; + } + else { + $col = $options[1]; + } + if ($options[2] eq undef) { + $secol = &random_color; + } + else { + $secol = $options[2]; + } + if ($options[3] eq undef) { + $maxVerlauf = '10'; + } + else { + $maxVerlauf = $options[3]; + } + if ($options[4] eq undef) { + $verlaufOrder = '1'; + } + else { + $verlaufOrder = $options[4]; + } + &rm_if_loggedin($alias); + # Sorry weil so ausführlich, der Code-Optimizer formulierte dies um! + my(@digit) = (('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'), ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'), (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), '.'); + my $num1 = rand @digit; + my $num2 = rand @digit; + my $num3 = rand @digit; + my $num4 = rand @digit; + my $num5 = rand @digit; + my $num6 = rand @digit; + my $num7 = rand @digit; + my $num8 = rand @digit; + my $num9 = rand @digit; + my $num10 = rand @digit; + my $num11 = rand @digit; + my $num12 = rand @digit; + $tmpid = $digit[$num1] . $digit[$num2] . $digit[$num3] . $digit[$num4] . $digit[$num5] . $digit[$num6] . $digit[$num7] . $digit[$num8] . $digit[$num9] . $digit[$num10] . $digit[$num11] . $digit[$num12]; + open TMPID, ">data/online/tmpid/$alias.$tmpid"; + print TMPID $alias; + close TMPID; + open IDENT, ">data/online/ident/$alias"; + print IDENT $client->peerhost . "\n$tmpid\n" . &get_online_time($alias) . "\n$col\n$secol\n"; + close IDENT; + open LASTLOGIN, ">data/user/lastlogin/$alias"; + print LASTLOGIN time; + close LASTLOGIN; + &frameset_html; + &del_away(); + $client->shutdown(2); + exit 0; + } + else { + $lognotexists = 'false'; + } + } + } + &login_html; +} +sub create_alias { + if ($alias =~ /\W/ or $alias eq '') { + goto CREATE if $alias =~ /[-]/ and not $alias =~ /\W/; + &create_alias_html('alias_prohibited'); + &del_away(); + $client->shutdown(2); + exit 0; + } + elsif ($pw ne $tmp) { + &create_alias_html('pw_wrong'); + &del_away(); + $client->shutdown(2); + exit 0; + } + elsif (length $alias >= 15) { + &create_alias_html('alias_length'); + &del_away(); + $client->shutdown(2); + exit 0; + } + CREATE: opendir USERDIR, 'data/user/options'; + my(@user) = readdir USERDIR; + close USERDIR; + foreach $user (@user) { + if ($user eq $alias) { + &create_alias_html('alias_exists'); + &del_away(); + $client->shutdown(2); + exit 0; + } + } + $pw = crypt $pw, $cryptkey; + open OPTIONS, ">data/user/options/$alias"; + print OPTIONS $pw . "\n"; + close OPTIONS; + &login_html; +} +sub frameset_html { + print qq[<html>\n <head>\n <title>\n $title\n </title>\n </head>\n<frameset border=0 frameborder=0 framespacing=0 cols="130,*">\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name="online" src="chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid">\n <frameset border=0 frameborder=0 framespacing=0 cols="70,*">\n <frame name="logo" src="chat?request=htdocs&var=logo_html" scrolling="no">\n <frame name="reload" src="chat?request=htdocs" scrolling="no">\n </frameset>\n </frameset>\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n <frame name='main' src='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder'>\n <frame name="input" src="chat?request=htdocs" scrolling="no">\n </frameset>\n</frameset>\n</html>\n]; +} +1; diff --git a/0.8.1/modules/statistic.pm b/0.8.1/modules/statistic.pm new file mode 100755 index 0000000..9d23f8b --- /dev/null +++ b/0.8.1/modules/statistic.pm @@ -0,0 +1,148 @@ +sub statistic { + &start_html('Statistiken'); + &menu; + print $q->div('yChat Statistiken'), $q->hr, $q->div($q->a({-'href', "chat?request=statistic&var=ranking&alias=$alias&tmpid=$tmpid"}, 'Rankings'), ' | ', $q->a({-'href', "chat?request=statistic&var=del&alias=$alias&tmpid=$tmpid"}, 'Loginstatistiken'), ' | ', $q->a({-'href', "chat?request=statistic&var=statistic&alias=$alias&tmpid=$tmpid"}, 'DB-Statistik'), ' | ', $q->a({-'href', "chat?request=statistic&var=var&alias=$alias&tmpid=$tmpid"}, 'Umgebungsvariablen')), $q->hr; + if ($var eq 'ranking') { + opendir COUNTS, 'data/user/counts'; + my(@counts) = readdir COUNTS; + closedir COUNTS; + print '<div>'; + my $nr_start = $start; + my $nr_end = $end; + my %online; + my $rank; + my $nr; + foreach $_ (@counts) { + if (-f "data/user/counts/$_") { + if (s/.online//g) { + open TOTAL, "<data/user/counts/$_.online"; + my $total = <TOTAL>; + close TOTAL; + $online{sprintf '%.2f', $total / 3600} = $_; + } + } + } + print '<div>', $q->b('Rankings:'), $q->br, '<table><tr><td><div><b>#:</b></div></td><td><b><div>St.:</div></b></td><td><b><div>Name:</div></b></td></tr>'; + if (not $nr_start) { + $nr_start = 1; + } + if (not $nr_end) { + $nr_end = 20; + } + foreach $wert (reverse (sort { $a <=> $b } keys %online)) { + ++$nr; + if ($online{$wert} eq $alias) { + $rank = $nr; + last if $nr > $nr_end; + } + next if ($nr < $nr_start or $nr > $nr_end); + print q[<tr><td><font color='ffffff' size='1' face='arial'>] . $nr . q[</font></td><td><font color='ffffff' size='1' face='arial'> ] . $wert . "h </font></td><td> <a href='chat?request=divcom&var=alias_html&alias=$alias&tmp=$online{$wert}&tmpid=$tmpid'><font size='1' face='arial'>$online{$wert}</font></a></td></tr>\n"; + } + print '</table>', $q->hr; + $nr_start -= 20; + $nr_end -= 20; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...<br>" if $nr_start > 0; + $nr_start += 40; + $nr_end += 40; + print "Rankings von <a href='chat?request=statistic&var=ranking&start=$nr_start&end=$nr_end&alias=$alias&tmpid=$tmpid'>$nr_start bis $nr_end</a> anzeigen ...", $q->br, $q->br, $q->b("$alias, Du befindest Dich auf Rank $rank</div>"); + } + elsif ($var eq 'del') { +# print '<div>', $q->b('Alte Benutzer löschen:'), $q->br, "Benutzer, die sich 1440 Stunden (60 Tage) nicht mehr in das System eingeloggt haben, werden gel\366scht.", $q->br, $q->br; + opendir USER, 'data/user/options'; + my(@user) = readdir USER; + closedir USER; + @user = sort(@user); + my $i = 0; + my $j; + my $k = 0; + my $l = 0; + my $full = $tmp; + foreach $_ (@user) { + if (-f "data/user/lastlogin/$_") { + open LOGIN, "<data/user/lastlogin/$_"; + my $login = <LOGIN>; + close LOGIN; + $login = sprintf('%.2f', (time - $login) / 3600); + ++$j; + if (999 < $login and $login < 1440) { + ++$k; + print $q->font({-'color', 'ff6600'}, $q->b("$j($k) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 48) { + ++$l; + print $q->font({-'color', 'ffffef'}, $q->b("$j($l) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + elsif ($login < 1440) { + print $q->font({-'color', 'ffa500'}, $q->b("$j($l) $_ Letztes Login vor: " . $login . 'h')), $q->br, "\n" if $full ne undef; + } + else { + ++$k; + &kill_it($_, $i++, $login); + } + } + elsif (-f "data/user/options/$_") { + &kill_it($_, $i++); + } + } + print $q->hr if $full ne undef; + print '</div>', $q->div($q->b("$j Benutzer befinden sich in der Datenbank!", $q->br, $q->font({-'color', 'ffffef'}, "$l Benutzer haben sich innerhalb der letzten 48 Stunden eingeloggt!"), $q->br, $q->font({-'color', 'ffa500'}, "$k Benutzer haben sich über 1000 Stunden nicht mehr eingeloggt!"), $q->br, $q->font({-'color', 'ff0000'}, "$i Benutzer wurden gerade eben gel\366scht!")), $q->br, $q->br, 'PS: Jeder registrierte Benutzername wird nur einmal gezählt!'); + print $q->br, $q->div('(', $q->a({-'href', "chat?request=statistic&var=del&tmp=true&alias=$alias&tmpid=$tmpid"}, 'Vollständige Ansicht'), ')') if $full eq undef; + } + elsif ($var eq 'var') { + print '<div>', $q->b('Server Umgebungsvariablen:'), $q->br, $q->br, 'Die Serverumgebungsvariablen können nur von Oberwächtern oder höher eingesehen werden!', $q->br, $q->br; + if (7 <= &hierachie($alias)) { + while (($key, $value) = each %ENV) { + print "$key = $value\n", $q->br; + } + } + print '</div>'; + } + elsif ($var eq 'statistic') { + print $q->div($q->b('yChat-DB Statistik:')), $q->br; + $files = 0; + $size = 0; + $directorys = 1; + &zaehle('data'); + $size = sprintf('%.2f', $size / 1048576); + print $q->div("Dateien insgesamt: $files", $q->br, "MB insgesamt: $size", $q->br, "Verzeichnisse insgesamt: $directorys"); + } + print $q->end_html; +} +sub zaehle { + local($dir, $data) = @_; + $dir = "$dir/$data" if $data ne undef; + opendir DATA, $dir; + local(@data) = readdir DATA; + closedir DATA; + $files2 = 0; + foreach $_ (@data) { + if (-f "$dir/$_") { + ++$files; + ++$files2; + $size += -s "$dir/$_"; + } + elsif (-d "$dir/$_" and $_ ne '.' and $_ ne '..') { + ++$directorys; + &zaehle($dir, $_); + } + } +} +sub kill_it { + my($rm, $nr, $login) = @_; + $login = 'XXXXXX' if $login eq undef; + print $q->font({-'color', 'ff0000'}, $q->b("$j($nr) $rm Letztes Login vor: " . $login . 'h (wurde gelöscht)')), $q->br, "\n"; + print q[<font size='1' color='ffffef'>]; + print 'options ' if unlink "data/user/options/$rm"; + print 'profiles ' if unlink "data/user/profiles/$rm"; + print 'gbooks ' if unlink "data/user/gbooks/$rm"; + print 'counts ' if unlink "data/user/counts/$rm"; + print 'counts.online ' if unlink 'data/user/counts/' . $rm . '.online'; + print 'lastlogin ' if unlink "data/user/lastlogin/$rm"; + print 'memos' if unlink "data/user/memos/$rm"; + print '</font><hr>'; + open DEL, '>>data/kill'; + print DEL "$rm wurde automatisch gekillt [$alias]\n"; + close DEL; + return; +} +1; diff --git a/0.8.1/modules/stream.pm b/0.8.1/modules/stream.pm new file mode 100755 index 0000000..2885d8b --- /dev/null +++ b/0.8.1/modules/stream.pm @@ -0,0 +1,170 @@ +sub stream { + unlink "data/online/rooms/$loginplace/$alias"; + &secure_checkid($alias, $tmpid); + my $pid = $$; + $SIG{'CHLD'} = 'IGNORE'; + ++$|; + print qq[<html>\n <head>\n<script language="JavaScript">\n<!--\n open('chat?request=online&room=$room&alias=$alias&tmpid=$tmpid','online');\n open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmp=login&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// open('chat?request=input&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','input');\n\n// Scroll-Routine von Anklepper (http://www.anklepper.de)\n// speziell f\374r yChat (http://www.yChat.de), Copyright 2000\nscrolling = true;\nmoves_steps = 4;\nmoves_interval = 4;\nfunction moves()\n{\n if( scrolling != false )\n window.scrollBy( 0, moves_steps );\n window.setTimeout( "moves()", moves_interval );\n}\nmoves();\n//-->\n</script>\n</head>\n<body bgcolor="$chatbg">\n]; + &check_online; + print "<font size=1 color=ffffff face=arial>$title - Letzte Änderung $datum\n; Der Chat wird geladen...\n<br>"; + sleep 1; + print "<b>Hallo <font color=$col>$alias</font></b>, mit dem Befehl /menu kannst du das Chat-Menü aufrufen!<br>"; + sleep 1; + print "Du befindest dich im Raum <b>$room</b>: " . get_theme($room) . "<br>\n"; + print "</font>\n"; + + if (-f "data/user/memos/$alias") { + open MEMOS, "<data/user/memos/$alias"; + my(@memos) = <MEMOS>; + close MEMOS; + my $memos; + foreach $_ (@memos) { + $memos .= $_; + } + print $memos; + unlink "data/user/memos/$alias"; + } + + my ($change_room, + $startime, + $flooding, + @ignore, + @flood); + + OPENMSGFILE: + $change_room = 0; + $startime = time; + $flooding = 0; + unless (-f "data/online/rstat/$room") { + open DATEI, ">data/online/rstat/$room"; + print DATEI "0\n\n$alias<;1\n"; + close DATEI; + } + open DATEI, ">data/online/users/$alias"; + print DATEI time; + close DATEI; + open DATEI, ">data/online/rooms/$room/$alias"; + print DATEI time; + close DATEI; + if (-e "data/msgs/$room") { + open MSGFILE, "<data/msgs/$room"; + mkdir 'data/online/pids', 511 unless -d 'data/online/pids'; + mkdir "data/online/pids/$room", 511 unless -d "data/online/pids/$room"; + open PID, ">data/online/pids/$room/$pid"; + print PID time; + close PID; + } + else { + sleep 1; + goto OPENMSGFILE; + } + &sendmsgs; + while (-f "data/online/users/$alias") { + local $SIG{'USR1'} = \&sendmsgs; + goto OPENMSGFILE if $change_room == 1; + unlink "data/online/rooms/$loginplace/$alias" + if (-f "data/online/rooms/$loginplace/$alias"); + sleep 15; + print "\n"; + } + sub sendmsgs { + for ($curpos = tell MSGFILE; defined($_ = <MSGFILE>); $curpos = tell MSGFILE) { + my($address, $stamp, $command, $action, $message, $from) = split(/<;/, $_, 7); + if ($address =~ /$\!/ or $address eq $alias) { + if ($stamp > $startime) { + if ($command eq 'col') { + ($col, $secol) = split(/;/, $action, 3); + } + elsif ($command eq 'cr') { + unlink "data/online/pids/$room/$pid"; + $room = $action; + close MSGFILE; + $change_room = 1; + } + elsif ($command eq 'ig') { + my @temp; + my $add2list = 1; + foreach $_ (@ignore) { + if ($action ne $_) { + push @temp, $_; + } + else { + $add2list = 0; + } + } + if ($add2list == 1) { + push @ignore, $action; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias ignoriert!</font>"); + } + else { + @ignore = @temp; + print "<font color='#ffffff'><font color='#ffa500'>$action</font> wird nun nicht mehr ignoriert!</font><br>\n"; + &post_prv_extra($action, "<font color='#ff0000'>Du wirst nun von $alias nicht mehr ignoriert!</font>"); + } + } + elsif ($command eq 'igl') { + my $ignored; + foreach $_ (@ignore) { + $ignored .= "$_ "; + } + if ($#ignore == -1) { + print "<font color='#ffffff'>Momentan wird keine Person von dir ignoriert!</font><br>\n"; + } + else { + print "<font color='#ffffff'>Folgende Personen werden von dir ignoriert: <font color='#ffa500'>$ignored</font>!</font><br>\n"; + } + } + elsif ($command eq 'quit') { + print "<script language='JavaScript'>\n"; + print "open('chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid','online');\n"; + print "open('chat?request=htdocs','input');\n"; + print "open('chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder','main');\n"; + print "</script>\n"; + last; + } + elsif ($change_room != 1) { + my $ignored = 0; + foreach $_ (@ignore) { + if ($_ eq $from) { + $ignored = 1; + last; + } + } + if ($ignored != 1) { + print "$message\n"; + } + else { + $address =~ s/!//; + &post_prv_extra($from, "<font color='#ff0000'>Du wirst von $alias ignoriert!</font>") if $address eq $alias; + } + } + push @flood, $address . $command . $action . $message . $from; + if ($flood[0] eq $flood[1] and $flood[0] eq $flood[2] and $flood[0] eq $flood[3]) { + print "<i><font color=red>$from flutet den Chat !</font></i><br>\n"; + if ($from eq $alias and $flooding++ and $flooding >= 4) { + &post($room, q[<i><font color='ffffff'>] . ×tring . " <font color='ffa500'><b>Das System</b></font> katapultiert <font color='".&get_ident($alias,3)."'>$alias</font>> wegen Fluten des Chats nach draussen ... </font></i>", $alias); + print "<script language='JavaScript'>open('chat?request=start&tmp=autokick','_top');</script>\n"; + &rm_alias($alias, $room); + } + } + else { + $flooding = 0; + } + shift @flood if $#flood > 2; + } + } + } + seek MSGFILE, $curpos, 0; + } + unlink "data/online/pids/$room/$pid"; +} +sub post_prv_extra { + my($alias, $message) = @_; + my $helpid = fork; + if ($helpid == 0) { + &post_prv($alias, $message); + exit 0; + } +} +1; diff --git a/0.8.1/modules/webchat.pm b/0.8.1/modules/webchat.pm new file mode 100755 index 0000000..90f8731 --- /dev/null +++ b/0.8.1/modules/webchat.pm @@ -0,0 +1,22 @@ +sub webchat { + my @rooms = &diropen('data/online/rooms'); + my $output; + + foreach my $room (@rooms) { + next if ($room =~ /\./); + my @users = &diropen("data/online/rooms/$room") or print "$!\n"; + + foreach my $user (@users) { + next if ($user =~ /\./); + open FILE, "data/online/rooms/$room/$user"; + my $timestamp = <FILE>; + close FILE; + chomp $timestamp; + + $output = $output . "($user)($timestamp)($room)\n"; + } + } + + print $output; +} +1; diff --git a/0.8.1/modules/ychatd.pl b/0.8.1/modules/ychatd.pl new file mode 100755 index 0000000..f804436 --- /dev/null +++ b/0.8.1/modules/ychatd.pl @@ -0,0 +1,94 @@ +#!/usr/bin/perl +use CGI; +$q = new CGI; + +use config; +use modules::commands; +use modules::changeroom; +use modules::divcom; +use modules::hierachie; +use modules::htdocs; +use modules::input; +use modules::loggedin; +use modules::online; +use modules::postmessage; +use modules::shared; +use modules::start; +use modules::statistic; +use modules::stream; +use modules::webchat; +use IO::Socket; +use Socket; +use POSIX; + +$SIG{'CHLD'} = 'IGNORE'; + +$mainsocket = 'IO::Socket::INET'->new('LocalHost', "$localhost", 'LocalPort', $localport, 'Porto', 'tcp', 'Listen', $limit + 10, 'Reuse', 1); +die "Kann Server-Socket nicht erzeugen: $!\n" unless $mainsocket; + +print "yChat wurde auf $localhost:$localport gestartet...\n"; + +$STARTIME = time; + +#Debugging only +#open AWAKE, ">data/online/awake/-$$-"; +#print AWAKE "$STARTIME - Daemon"; +#close AWAKE; + +while ($client = $mainsocket->accept) { + print $client "HTTP/1.1 200 OK\nContent-type:text/html\n\n"; + + ++$HITS; + $pid = fork; + if ($pid == 0) { + my @reqheader; + + $rv = $client->recv($reqheader[0], POSIX::BUFSIZ, 0); + @reqheader = split "\n", $reqheader[0]; + + my $requeststring; + my(@tmp) = split(/\s+/, $reqheader[0], 0); + + if ($tmp[0] eq 'GET') { + $requeststring = $tmp[1]; + + } else { + $requeststring = 'chat?'.$reqheader[-1]; + } + + #Debug only + #open AWAKE, ">data/online/awake/$$"; + #print AWAKE $requeststring; + #close AWAKE; + + @tmp = split(/\?/, $requeststring, 0); + @tmp = split(/&/, $tmp[1], 0); + my %variables; + + foreach $_ (@tmp) { + my(@tmp) = split(/=/, $_, 0); + next if $tmp[0] eq 'admin' or $tmp[0] eq 'mogeladmin'; + $tmp[0] =~ s[/][]; + $variables{$tmp[0]} = &url_decode($tmp[1]); + } + + foreach $_ (keys %variables) { + $variables{$_} =~ s/'/\\'/g; + my $eval = "\$$_ = '" . $variables{$_} . "';"; + # print "$eval\n"; + eval $eval; + } + *STD = *STDOUT; + *STDOUT = $client; + if ($request) { + &secure_checkid($alias, $tmpid) if $request != 'start'; + eval "&$request"; + } + else { + &start; + } + &del_awake(); + $client->shutdown(2); + exit 0; + } +} diff --git a/0.8.1/setup.sh b/0.8.1/setup.sh new file mode 100755 index 0000000..944c2f4 --- /dev/null +++ b/0.8.1/setup.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +mke2fs /dev/ram0 +mke2fs /dev/ram1 + +mkdir data +cd data +mkdir {logs,msgs,user,online} +mount /dev/ram0 msgs +mount /dev/ram1 online +cd user +mkdir {counts,memos,options,profiles,gbooks,lastlogin} +cd ../online +mkdir {rstat,rooms,pids,users,ident,tmpid,awake} +cd .. + +chmod 700 * -R +chown yC * -R + diff --git a/0.8.1/templates/chatiq.sno b/0.8.1/templates/chatiq.sno new file mode 100755 index 0000000..2a024f5 --- /dev/null +++ b/0.8.1/templates/chatiq.sno @@ -0,0 +1 @@ +<div><h2>Chatiquette</h2></div><hr><div>Hier einige Grundlagen ...</div><style type="text/css"> li { color: #ffffff }</style><ul><li><div>Vergiss nie, dass am anderen Ende auch nur Menschen sitzen. Diese mögen es gar nicht, angepöbelt, beleidigt oder in sonstiger Weise angegriffen zu werden.</div></li><li><div>Störend ist auch immer, wenn ein privater Streit im Chat ausgetragen wird. Tragt eure privaten Sachen ausserhalb des Chats aus.<br>Selbst wenn es nur Spass ist - weiss der Rest im Chat das?</div></li><li><div>Dauergeschrei fällt auch immer wieder störend auf. Was in Grossbuchstaben geschrieben wird, wird als Schreien bezeichnet.</div></li><li><div>Unsere ganz besonderen Spezialisten wollen auch immer wieder rausfliegen. Um das zu erreichen, senden sie die ganze Zeit Unsinn.</div></li><li><div>Diskussionen sind dagegen kein Problem. Dafür ist ein Chat ja da. Sobald allerdings das Thema der Diskussion zu sehr entgleist, sollte die Diskussion in einen etwas weniger öffentlichen Raum verlegt werden.</div></li></ul><div>Daraus ergeben sich folgende Regeln:</div><ul><li><div>keinen beleidigenden Wortschatz verwenden</div></li><li><div>obzöner und verfassungsfeindlicher Wortschatz fällt auch weg</div></li><li><div>streitet euch woanders oder in einem privaten Raum</div></li><li><div>schreit nich so viel</div></li><li><div>schreibt keinen Unsinn, der so aussieht, als ob eure Katze über die Tastatur gelaufen ist</div></li><li><div>schreibt nicht zu schnell hintereinander, besonders nicht dasselbe</div></li><li><div>verlagert die Diskussion, wenn sich jemand gestört fühlt</div></li><li><div>Diese Liste ist nicht vollständig. Mit dem gesunden Menschenverstand sollte es eigentlich möglich sein, sich die nicht aufgeführten Punkte zu denken.</div></li></ul><div>So - nach den ganzen "lass-es-bessers" noch ein paar Überlebenstips:</div><ul><li><div>beachte die oben stehenden Punkte ;-)</div></li><li><div>es macht sich immer gut, beim Reinkommen mal zu grüssen</div></li><li><div>warte nicht, bis man/frau dich anspricht - werde selbst aktiv und gib deinen Senf dazu</div></li><li><div>es gibt meist kein allgemein anerkanntes Gesprächsthema - lies dich einfach rein</div></li><li><div>die frage "wer will chatten" ist eigentlich überflüssig in einem Chat (wir warten doch alle nur aufs Ufo ;-)</div></li><li><div>fang nich sofort mit den W-Fragen (woher, wie alt, weiblich oder männlich?) an - es stört einige Leute</div></li></ul><div>Problematisch für die Wächter und Oberwächter ist:</div><ul><li><div>"der nervt mich - schmeiss den mal raus" ist oft nicht nachvollziehbar, weil der WÄ oder OW die Vorgeschichte - die vielleicht ausserhalb des yChat stattgefunden hat - nicht kennt oder keinen Beweis dafür hat.</div></li></ul><hr><div><h2>Richtlinien für den gestressten WÄ und OW:</h2></div><ul><li><div>Du hast die Macht - aber mißbrauche sie nicht!</div></li><li><div>Leute, die ganz offensichtlich stören wollen und dabei den Chatbetrieb massiv behindern, sofort rausschmeissen! Kriterien dazu:</div><ul><li><div>Fluten des Chats</div></li><li><div>Wiederholung von Parolen</div></li><li><div>Exzessive Nutzung von zufälligen Buchstaben-/Zeichenfolgen</div></li><li><div>usw...</div></li></ul></li><li><div>Bei den anderen vorher noch eine Warnung aussprechen...</div></li><li><div>Nicht vergessen: auch für euch gelten die oben aufgeführten Regeln!</div></li><li><div>Vergabe von Raumbesetzer- und Wächterrechten:<br>(dies gilt für RB-Vergabe in der Cyberbar, WÄ allgemein)</div><ul><li><div>Um RB oder WÄ betteln wird schon mal gar nicht beachtet.</div></li><li><div>Wer WÄ wird, soll sichs verdienen - z.B. durch häufiges Helfen bei Neulingen.</div></li><li><div>Ein WÄ sollte schon öfter im Chat sein.</div></li><li><div>Oberwächter zu werden ist sehr schwierig. Frag gar nicht erst danach ;-)</div></li></ul></ul><div>Wer meint, von einem Wächter oder Oberwächter ungerecht behandelt worden zu sein (z.B. weil dieser wegen persönlichen Streitigkeiten rausschmeisst), richte seine Klage an einen Oberwächter oder direkt an den obersten Boss: Snooper (<a href="mailto:admin@ychat.de">admin@ychat.de</a>).</div>
\ No newline at end of file diff --git a/0.8.1/templates/colors.sno b/0.8.1/templates/colors.sno new file mode 100755 index 0000000..3640b9e --- /dev/null +++ b/0.8.1/templates/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.8.1/templates/help.sno b/0.8.1/templates/help.sno new file mode 100755 index 0000000..e1f6de9 --- /dev/null +++ b/0.8.1/templates/help.sno @@ -0,0 +1,79 @@ +<div> + Alle Chat-Befehle: +</div> +<hr> +<table border=1> +<tr><th><div>SU</div></th><th><div>Befehl</div></th><th><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. Wird gar keine Farbe angegeben, dann wird eine zufällige generiert!</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>/exit</div></td><td><div>Komplett aus dem System ausloggen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/getcol <font color=red>Alias</font></div></td><td><div>Zeigt an welche Farb-Codes <font color=red>Alias</font> zum Chatten verwendet</div></td></tr> +<tr><td><div>NC</div></td><td><div>/hits</div></td><td><div>Zeigt an vor wieviel Stunden der Chat-Server neugestartet wurde und die Hits und Hits per Minute seit dieser Zeit</div></td></tr> +<tr><td><div>NC</div></td><td><div>/ig <font color=red>Alias</font></div></td><td><div>Setzt/entfernt <font color=red>Alias</font> auf/aus die/der Ignorierliste. Wird das Argument weggelassen, so wird die Liste aller ignorierten Personen angezeigt</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>Chat 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>/selfkill</div></td><td><div>Sich selbst ganz und gar aus dem System entfernen</div></td></tr> +<tr><td><div>NC</div></td><td><div>/sep <font color=red>Raumname</font></div></td><td><div>In den Raum <font color=red>Raumnamen</font> wechseln und gleichzeitig absperren</div></td></tr> +<tr><td><div>NC</div></td><td><div>/uptime</div></td><td><div>Siehe Befehl "/hits"</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 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>/banip <font color=red>Alias</font></div></td><td><div>Die IP-Nummer von <font color=red>Alias</font> verbannen</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/rbanip ip://<font color=red>x.x.x.x</font></div></td><td><div>Die IP-Nummer <font color=red>x.x.x.x</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>/img</div></td><td><div>Versteckt/reaktiviert das eigene Superuser-Logo im Online-Frame</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>/o <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird aus dem Chat ausgeloggt!</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/sl <font color=red>Raum</font></div></td><td><div>Einen anderen <font color=ffa500>Raum</font> absperren</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=ffa500>WÄ</font></div></td><td><div>/st <font color=red>Raum</font> <font color=ffa500>Thema</font></div></td><td><div>Einem anderen <font color=red>Raum</font> ein <font color=ffa500>Thema</font > geben</div></td></tr> +<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/status <font color=ffa500>Alias</font></div></td><td><div>Zeigt den Superuserstatus von <font color=ffa500>Alias</font> an</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> +<tr><td><div><font color=green>OW</font></div></td><td><div>/twa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum temporären Wächter ernennen</div></td></tr> +<tr><td><div><font color=green>OW</font></div></td><td><div>/rtwa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom temporären Wächter zum normalen Chatter degradieren</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/cool <font color=red>Nachricht</font></div></td><td><div>Gibt für den aktuellen Raum eine Systemmeldung aus</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/id <font color=red>Alias</font></div></td><td><div>Zeigt TempID von <font color=red>Alias</font> an</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/ow <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Oberwächter ernennen</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/row <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom Oberwächter zum normalen Chatter degradieren</div></td></tr> +<tr><td><div><font color=red>AD</font></div></td><td><div>/pw <font color=red>Alias</font></div></td><td><div>Zeigt das Passwort von <font color=red>Alias</font> an</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 ausgeführt 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 ledeglich 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><br> + Nur Oberwächer können Logdateien der Cyberbar lesen!<br><br> + Oberwächter ernennt nur der Systemadministrator! Dieser wiederum hat weitere spezielle Befehle die geheim sind und die nur ihm + vorbehalten sind und ihm das Administrieren erleichtert. +</div> +</body> +</html> diff --git a/0.8.1/ychatd.pl b/0.8.1/ychatd.pl new file mode 100755 index 0000000..f804436 --- /dev/null +++ b/0.8.1/ychatd.pl @@ -0,0 +1,94 @@ +#!/usr/bin/perl +use CGI; +$q = new CGI; + +use config; +use modules::commands; +use modules::changeroom; +use modules::divcom; +use modules::hierachie; +use modules::htdocs; +use modules::input; +use modules::loggedin; +use modules::online; +use modules::postmessage; +use modules::shared; +use modules::start; +use modules::statistic; +use modules::stream; +use modules::webchat; +use IO::Socket; +use Socket; +use POSIX; + +$SIG{'CHLD'} = 'IGNORE'; + +$mainsocket = 'IO::Socket::INET'->new('LocalHost', "$localhost", 'LocalPort', $localport, 'Porto', 'tcp', 'Listen', $limit + 10, 'Reuse', 1); +die "Kann Server-Socket nicht erzeugen: $!\n" unless $mainsocket; + +print "yChat wurde auf $localhost:$localport gestartet...\n"; + +$STARTIME = time; + +#Debugging only +#open AWAKE, ">data/online/awake/-$$-"; +#print AWAKE "$STARTIME - Daemon"; +#close AWAKE; + +while ($client = $mainsocket->accept) { + print $client "HTTP/1.1 200 OK\nContent-type:text/html\n\n"; + + ++$HITS; + $pid = fork; + if ($pid == 0) { + my @reqheader; + + $rv = $client->recv($reqheader[0], POSIX::BUFSIZ, 0); + @reqheader = split "\n", $reqheader[0]; + + my $requeststring; + my(@tmp) = split(/\s+/, $reqheader[0], 0); + + if ($tmp[0] eq 'GET') { + $requeststring = $tmp[1]; + + } else { + $requeststring = 'chat?'.$reqheader[-1]; + } + + #Debug only + #open AWAKE, ">data/online/awake/$$"; + #print AWAKE $requeststring; + #close AWAKE; + + @tmp = split(/\?/, $requeststring, 0); + @tmp = split(/&/, $tmp[1], 0); + my %variables; + + foreach $_ (@tmp) { + my(@tmp) = split(/=/, $_, 0); + next if $tmp[0] eq 'admin' or $tmp[0] eq 'mogeladmin'; + $tmp[0] =~ s[/][]; + $variables{$tmp[0]} = &url_decode($tmp[1]); + } + + foreach $_ (keys %variables) { + $variables{$_} =~ s/'/\\'/g; + my $eval = "\$$_ = '" . $variables{$_} . "';"; + # print "$eval\n"; + eval $eval; + } + *STD = *STDOUT; + *STDOUT = $client; + if ($request) { + &secure_checkid($alias, $tmpid) if $request != 'start'; + eval "&$request"; + } + else { + &start; + } + &del_awake(); + $client->shutdown(2); + exit 0; + } +} |
