Sitz grad an der Line-Klasse (hab mich doch entschieden, die "volle" Version einzubauen, die ich momentan intern verwende). Das sind derzeit alle unterschiedenen Zeilentypen samt gespeicherter Daten, viel Spaß beim Bedenken der Möglichkeiten und Sabbern:
Typ 0 - Standard-Text
time: Timestamp
user[0]: Verfasser
text: Rohtext
#Typ 1 - /me und Scripting-Engine
time: Timestamp
user[0]: Verfasser
user[1]: eingebundener User (falls vorhanden)
text: Rohtext
Typ 2 - /link
time: Timestamp
user[0]: Verfasser
text: Rohtext des Links ODER verlinkte URL
vars[0]: verlinkte URL
Typ 3 - /hp
time: Timestamp
user[0]: Verfasser
vars[0]: verlinkte URL
Typ 4 - /uin
time: Timestamp
user[0]: Verfasser
vars[0]: ICQ-Nummer
Typ 5 - /mail
time: Timestamp
user[0]: Verfasser
vars[0]: verlinkte Email-Adresse
Typ 6 - /chats
time: Timestamp
user[0]: Verfasser
vars[0]: Anzahl der Logins
Typ 7 - /wuerfel mit einem Würfel
time: Timestamp
user[0]: Verfasser
vars[0]: gewürfelte Zahl
Typ 8 - /wuerfel mit zwei Würfeln
time: Timestamp
user[0]: Verfasser
vars[0]: erste gewürfelte Zahl
vars[1]: zweite gewürfelte Zahl
Typ 9 - Login
time: Timestamp
user[0]: eingeloggter User
text: Loginnachricht
Typ 10 - Login (Raumwechsel)
time: Timestamp
user[0]: eingeloggter User
text: Loginnachricht
vars[0]: alter Raumname/alte Raum-ID
Typ 11 - Logout
time: Timestamp
user[0]: ausgeloggter User
text: Logoutnachricht
Typ 12 - Logout (Browser geschlossen)
time: Timestamp
user[0]: ausgeloggter User
text: Logoutnachricht
Typ 13 - Logout (Timeout)
time: Timestamp
user[0]: ausgeloggter User
text: Logoutnachricht
Typ 14 - Logout (Passwortänderung)
time: Timestamp
user[0]: ausgeloggter User
text: Logoutnachricht
Typ 15 - Logout (Emailänderung)
time: Timestamp
user[0]: ausgeloggter User
text: Logoutnachricht
Typ 16 - Logout (Accountlöschung)
time: Timestamp
user[0]: ausgeloggter User
text: Logoutnachricht
Typ 17 - Logout (Raumwechsel)
time: Timestamp
user[0]: ausgeloggter User
text: Logoutnachricht
vars[0]: Raumname
Typ 18 - Logout (/drop)
time: Timestamp
user[0]: ausgeloggter User
user[1]: Sep-Besitzer
text: Logoutnachricht
vars[0]: Raumname
Typ 19 - Logout (/move)
time: Timestamp
user[0]: ausgeloggter User
user[1]: handelndes Teammitglied
text: Logoutnachricht
vars[0]: Raumname
#Typ 20 - /away
time: Timestamp
user[0]: Verfasser
text: nichts ODER Away-Grund
Typ 21 - /away-Rückmeldung
time: Timestamp
user[0]: zurückkehrender User
Typ 22 - /mecol
time: Timestamp
user[0]: Farbe wechselnder User
Typ 23 - /col
time: Timestamp
user[0]: Farbe wechselnder User
Typ 24 - Flüstern (von jmd.)
time: Timestamp
user[0]: Verfasser
user[1]: Empfänger
text: Rohtext
Typ 25 - Flüstern (an jmd.)
time: Timestamp
user[0]: Verfasser
user[1]: Empfänger
text: Rohtext
Typ 26 - /team
time: Timestamp
user[0]: Verfasser
Typ 27 - /comment und /commentall
time: Timestamp
user[0]: Verfasser
text: Rohtext
Typ 28 - Erste Flooding-Verwarnung (öffentlich)
time: Timestamp
user[0]: verwarnter User
Typ 29 - Zweite Flooding-Verwarnung (öffentlich)
time: Timestamp
user[0]: verwarnter User
Typ 30 - Erste Flooding-Verwarnung (privat)
time: Timestamp
user[0]: verwarnter User
Typ 31 - Zweite Flooding-Verwarnung (privat)
time: Timestamp
user[0]: verwarnter User
Typ 32 - Flooding-Kick
time: Timestamp
user[0]: gekickter User
#Typ 33 - /knebel
time: Timestamp
user[0]: ausführendes Teammitglied
user[1]: geknebelter User
text: Knebeltext
vars[0]: Knebelzeit in Minuten
Typ 34 - /kick
time: Timestamp
user[0]: ausführendes Teammitglied
user[1]: gekickter User
text: Grund
Typ 35 - /bann (User)
time: Timestamp
user[0]: ausführendes Teammitglied
user[1]: gebannter User
text: Grund
Typ 36 - /bann (IP)
time: Timestamp
text: Grund
vars[0]: gebannte IP
Typ 37 - /restore
time: Timestamp
user[0]: ausführendes Teammitglied
user[1]: zurückgesetzter User
Typ 38 - /delete
time: Timestamp
user[0]: ausführendes Teammitglied
user[1]: gelöschter User
Typ 39 - /makemod
time: Timestamp
user[0]: ausführendes Teammitglied
user[1]: ernannter User
Typ 40 - /makeadmin
time: Timestamp
user[0]: ausführendes Teammitglied
user[1]: ernannter User
Typ 41 - /modkick
time: Timestamp
user[0]: ausführendes Teammitglied
user[1]: entmachteter User
Typ 42 - /adminkick
time: Timestamp
user[0]: ausführendes Teammitglied
user[1]: entmachteter User
Typ 43 - /alarm (User; abgesendet)
time: Timestamp
Typ 44 - /alarm (User; beantwortet)
time: Timestamp
user[0]: handelndes Teammitglied
Typ 45 - /alarm (Team; ausgelöst)
time: Timestamp
user[0]: auslösender User
#Typ 46 - /alarm (Team, beantwortet)
time: Timestamp
user[0]: User, dessen Alarm beantwortet wurde
user[1]: handelndes Teammitglied
Typ 47 - /alarm (Team; selbst beantwortet)
time: Timestamp
user[0]: User, dessen Alarm beantwortet wurde
Typ 48 - /ruhe (aktiviert)
time: Timestamp
Typ 49 - /ruhe (deaktiviert)
time: Timestamp
Typ 50 - /rmip
time: Timestamp
user[0]: geprüfter User
vars[0]: IP des Users
Typ 51 - /profil
time: Timestamp
user[0]: User, dessen Profil verlinkt wurde
#Typ 52 - /f wenn User offline
time: Timestamp
user[0]: angeflüsterter User
text: Rohtext
Typ 53 - Schreibversuch während geknebelt
time: Timestamp
vars[0]: restliche Zeit in Sekunden
Typ 54 - /sep (keine Einladung)
time: Timestamp
#Typ 55 - sonstige Chat-Bot-PMs
time: Timestamp
text: Rohtext
#Typ 56 - /w
vars: Objekt mit allen Daten aus der /w-Ausgabe
#Typ 57 - /iplist
vars: Objekt mit allen eingelesenen Usern samt IPs
Typ 58 - Punktesystem-Informationen
vars[0]: Anzahl verfügbarer Punkte
vars[1]: Punktetyp
Typ 59 - Timeout-Warnung
Typ 60 - Raumwechsel und Raumthema
vars[0]: Raumname
text: Raumthema, falls vorhanden
Typ 61 - Raumwechsel (/move)
vars[0]: Raumname
#Typ 62 - Raumthema (/move)
text: Rohtext
Typ 63 - Raumwechsel (/drop)
Typ 64 - Sep betreten (eigener)
Typ 65 - Sep betreten (fremder)
Typ 66 - Sep-Einladung
user[0]: User, der eingeladen hat
Typ 67 - /cls
Typ 68 - Stream-Meldung nach Logout
Typ 69 - Nicht definierte Zeile
Bevor jemand fragt: ja, es gibt eine Flooding-Verwarnung-PM-Version. Sie wird nur in einem einzigen Flooding-Fall benutzt (der mir grad entfallen ist und so gut wie nie im realen Chatverlauf vorkommen sollte), resultiert in einem öffentlichen Flooding-Kick und hat ein absolut einzigartiges und bizarres Syntax mit einem "PM" in Klammern mit SMALL-Tags direkt nach dem Timestamp. WTF Webkicks?
Die Rauten bitte nicht beachten, die sind nur für interne Zwecke. :p Typ 67 und 68 sind nur für die AJAX-Schnittstelle relevant ("cls" und "stop").
Die (gigantische) Funktion dazu existiert auch schon was länger, wird aber grad überarbeitet. Vielleicht kürze ich was für die GSS, aber nur wenn ich Probleme mit dem Definieren der Zeilentypen anhand von prerendered HTML habe (die interne Version nutzt dazu die nicht-gerenderte Version). Ist halt schwierig das für alle Browser kompatibel zu machen.
Sachen, die ich noch ändern muss/werde:
- Zeilentyp für öffentliche, nicht definierte Chatbot-Meldungen (gibt glaube ich sowieso keine, aber just in case)
- Split von /me und Scripting-Engine... Zumindest in der Version an der ich grad sitze, welche nicht die GSS-Version sein wird. Das Problem bei /me und SE ist, dass beide anhand eines Leerzeichens unterscheidbar sind, welches generell auslesbar ist, allerdings nur wenn man die Zeile als Text auslesen kann und nicht als gerendertes HTML. Das ist bei der Version an der ich grad sitze der Fall, aber eben nicht bei der GSS-Version. Muss also mal sehen wie ich das löse.
- Typ 62 (Raumthema nach /move). Problem hier: es gibt kein Syntax und ich muss den Typ anhand voheriger Zeilen ableiten. Und diese voherigen Zeilen sind nicht immer an der gewünschten Position... Muss mal sehen wie ich das mache, vielleicht wird der Typ auch gestrichen oder mit etwas anderem gemerged.
- ein paar Variablen verschieben, z.B. ein paar "text" zu "vars" ändern (text soll generell nur User-generierte Texte speichern). Mal sehen.
Zeilen, für die ich (mangels Chatmöglichkeiten im Moment) gerne das Syntax hätte (wäre super, wenn jemand entsprechend Beispiele dieser Chatzeilen posten könnte, preferabel ohne "Auswahl-Quelltext" (der prerendered ist) sondern über Stoppen des Streams):
- Punktevergabe im Punktesystem. Wird so verdammt selten benutzt, und vor allem nur mit Profil, dass ich da grad keine brauchbare Möglichkeit habe. Kann man ja auch dummerweise nur an User mit Profil vergeben, oder?
- Server-Wartungsmeldung (wird, wenn mich meine Erinnerung nicht täuscht, ohne Tabellenelemente gerendert. Wär übrigens super, wenn mir auch jmd. sagen könnte, wie die AJAX-API das regelt...)
Was ich aber gern wissen würde ist: was fehlt hier noch? Hab ich irgendwas wichtiges vergessen? (Die zahllosen Fehlermeldungen bei fehlenden Rechten, etc. natürlich nicht, sondern eher Dinge, bei denen Usereingaben angezeigt werden oder ähnliches. Halt Sachen, aus denen man mehr oder weniger konkrete Daten auslesen kann.)
...