Hey Chatbetreiber!
Da es langsam mal nötig war, habe ich mich hingesetzt und ein neues "Away"-kästchen Script geschrieben, das diesmal den "Chatzeile löscht sich nicht von selber"-Bug nach einem Reconnect nicht auslöst.
Zwar kann es immer noch vorkommen, dass während des Reconnects die Chatzeile nicht gelöscht wird, aber spätestens wenn alles fertig geladen ist, wird die Chatzeile wieder beim nächsten Absenden gelöscht. (Gleicher "Bug" tritt auch beim Badwordscript auf, da die gleiche Lösung zum "Reconnect-Bug" verwendet wird)
Das Script verträgt sich mit dem Badwordscript, da ich ein paar Anpassungen gemacht habe. Am besten bindet ihr das "Away"-kästchen Script aber trotzdem
nach dem Badwordscript ein. Die Grundscriptsammlung wird benötigt.
Code: Alles auswählen
/* Konfiguration */
// Text, der ausgegeben werden soll, wenn sich der User zurückmeldet
var AwayboxText = "Wieder da!";
/* Ab hier nichts mehr ändern! */
Awaybox = new (function() {
// Fügt die Checkbox in den Eingabeframe ein (falls noch nicht vorhanden)
this.insert = function() {
if (efIsLoad()) {
if (!parent.info.document.forms[0].abwesend) {
var formular = parent.info.document.getElementsByTagName('form')[0];
var checkbox = parent.info.document.createElement("span");
checkbox.innerHTML = "Abwesend: <input type='checkbox' name='abwesend' onclick='parent.mainframe.Awaybox.exec()' title='Sich im Chat abmelden (Away/AFK melden)'> ";
formular.insertBefore(checkbox, formular.childNodes[0]);
}
} else {
window.setTimeout("Awaybox.insert()", 50);
}
}
// Führt die Befehle aus, wenn man auf die Checkbox klickt
this.exec = function() {
var abwesendcb = parent.info.document.forms[0].abwesend;
if (abwesendcb.checked) {
sendeText("/away");
parent.info.document.forms[0].abwesend.title = 'Sich im Chat wieder zurückmelden';
} else {
sendeText(AwayboxText);
Awaybox.antiSpam();
}
}
// Löscht das Häkchen, wenn der User einen Text absendet und fixt das Reconnect-Problem von früher
this.fix = function() {
var type = (typeof BadWordsVerwenden != "undefined") ? 1 : 0;
var fixBW = (type == 1) ? ((BadWordsVerwenden) ? 1 : 0) : 0;
if (typeof badwords == "function" && (type == 0 || fixBW == 1)) {
window.setTimeout("Awaybox.fixBadwords(1)", 550);
} else if (typeof noneBadwords == "function" && fixBW == 0) {
window.setTimeout("Awaybox.fixBadwords(2)", 550);
} else {
parent.info.document.eingabe.onsubmit = function(e) {
var Etext = parent.info.document.eingabe.message.value;
if (parent.info.document.forms[0].abwesend.checked && Etext.search("/f ") != 0) {
parent.info.document.forms[0].abwesend.checked = false;
Awaybox.antiSpam();
}
parent.info.submitForm(parent.info.document.eingabe);
return false;
}
}
}
// Falls das Badwordscript von 1. FC Keller benutzt wird, muss die normale badwords()- bzw. die noneBadwords()-Funktion für einen Fix ersetzt werden
this.fixBadwords = function(c) {
if (c == 1) {
parent.info.document.eingabe.onsubmit = function(e) {
var Etext = parent.info.document.eingabe.message.value;
if (parent.info.document.forms[0].abwesend.checked && Etext.search("/f ") != 0) {
parent.info.document.forms[0].abwesend.checked = false;
Awaybox.antiSpam();
}
for(i=0; i<suchworte.length; i++){
while(parent.info.document.eingabe.message.value.match(suchworte[i])){
parent.info.document.eingabe.message.value = parent.info.document.eingabe.message.value.replace(suchworte[i], ersetzen[i]);
}
}
parent.info.submitForm(parent.info.document.eingabe);
return false;
}
} else {
parent.info.document.eingabe.onsubmit = function(e) {
var Etext = parent.info.document.eingabe.message.value;
if (parent.info.document.forms[0].abwesend.checked && Etext.search("/f ") != 0) {
parent.info.document.forms[0].abwesend.checked = false;
Awaybox.antiSpam();
}
parent.info.submitForm(parent.info.document.eingabe);
return false;
}
}
}
// Spamschutz, der verhindert, dass man die Checkbox zu oft klickt
this.antiSpam = function(time) {
var abwesendcb = parent.info.document.forms[0].abwesend;
abwesendcb.disabled = true;
abwesendcb.title = "Spamschutz - Box für 5 Sekunden deaktiviert!";
window.setTimeout("parent.info.document.forms[0].abwesend.disabled = false; parent.info.document.forms[0].abwesend.title = 'Sich im Chat abmelden (Away/AFK melden)';", 5000);
}
});
//startet das Script
window.setTimeout("Awaybox.fix()", 500);
Awaybox.insert();
((Falls es wen wundert, warum ich diesmal objektorientiert "programmiert" habe: war nur zu Übungszwecken und sieht irgendwie auch stylischer aus als viele einzelne Funktionen

))
Das Script bietet natürlich auch einen Spamschutz, aber ganz kann Spam leider auch nicht aufgehalten werden. Es wird, wenn sich ein User zurückmeldet (egal ob per Box oder per Chatzeile), das Kästchen für 5 Sekunden deaktiviert. Das verhindert, dass ein User immer wieder hintereinander auf die Box klickt.
Ganz aufhalten lässt sich das (bis jetzt noch) nicht, aber ich denke, dass die User das schon nicht übertreiben. Notfalls gibts ja Mods und Admins. Falls es wirklich ausgenutzt wird, um zu spamen, dann bitte einfach mal melden. Ich überleg mir dann was.
Das Script kommt (wegen der Größe) in eine JavaScript-Datei (*.js-Datei) und wird anschließend auf den eigenen Webspace hochgeladen, um ihn dann später mit folgendem Code
nach der Grundscriptsammlung und bitte - falls ihr das Badwordscript benutzt - nach oder kurz vor dem Badwordscript in die 1. Ankündigung einzufügen:
Code: Alles auswählen
<script type="text/javascript" src="URL-ZUR-JS-DATEI"></script>
URL-ZUR-JS-DATEI muss natürlich angepasst werden. Weitere Informationen zum Einfügen von Scripts erhälst du in der
Scriptübersicht!
In die Gastankündigung muss das Script nicht, da der Befehl /away sowieso nicht von Gästen benutzt werden kann.
Konfiguration
Zwischen
/* Konfiguration */ und
/* Ab hier nichts mehr ändern */ kann eigentlich nur das angepasst werden:
// Text, der ausgegeben werden soll, wenn sich der User zurückmeldet
var AwayboxText = "Wieder da!";
Das
Rote ist der Text, der geschrieben wird, wenn man sich durch einen Klick auf die Checkbox zurückmeldet. Der Text kann natürlich beliebieg angepasst werden. Auch Smilies (z.B. :zwinker) können natürlich benutzt werden.

Ich hoffe es funktioniert einwandfrei. Viel Spaß!
