Datei: <Hauptverzeichnis>\Scores.hst

Die in der Datei „Scores.hst“ festgelegten Regeln entscheiden, welche News-Artikel geladen und welche ignoriert werden. Für die Behandlung von E-Mails siehe „MailFilt.hst“.

Wählen Sie die Filterkriterien sorgsam aus, andernfalls kann es zu Verlusten von eventuell wichtigen Nachrichten kommen. Schreiben Sie deshalb keine Filter aus anderen Quellen kritiklos ab und verwenden nur Filter, die Sie inhaltlich verstehen.

Eventuelle Fehlerquelle: Die Datei muss wirklich „Scores.hst“ heißen, nicht „Scores.txt“ oder „Scores.hst.txt“ o. ä. Wird die Datei mit Notepad gespeichert, ist die Chance auf einen falschen Namen groß: Beim Abspeichern darauf achten, dass der Name in Anführungszeichen gesetzt wird (‚"Scores.hst"‘).

Hinweise:

Das angewendete Filterverfahren wird allgemein als „Scoring“ bezeichnet. Jeder Artikel erhält einen fiktiven Wert (den „Score“), der mit dem Durchlaufen des Filters sinken und steigen kann. Jeder Artikel beginnt den Filterdurchlauf mit dem Wert Null. Ist dieser Wert nach dem Filterdurchlauf größer oder gleich Null, wird der Artikel geladen; ist er negativ, wird der Artikel ignoriert.

Wird ein Artikel ignoriert, so wird er – falls er einen einstellbaren Wert (Standard: -9999) nicht unterschreitet – im Killfile-Log verzeichnet. Später kann man sich über das Menü „Einstellungen“ → „News: Killfile-Protokoll/-Einstellungen“ eine Übersicht über die ungeladenen Artikel verschaffen und einzelne Artikel eventuell doch noch nachladen lassen.

Teile der Filter-Datei können mit folgender Preprozessor-Anweisung in eine separate Datei ausgelagert werden:

#!Include <Dateiname>

Lange Zeilen können mittels Unterstrich („_“) am Zeilenende auf mehrere kurze aufgeteilt werden.

Filterregeln können mit einem Kommentar versehen werden. Der Kommentar muss mit dem Raute-Zeichen („#“) beginnen, auf welches aber kein Ausrufe-Zeichen folgen darf.

Ein „(„#“ darf auch hinter einem kompletten Filterausdruck einen Kommentar einleiten. Wenn ein Filterausdruck auf mehrere Zeilen aufgeteilt wird, darf ein Kommentar also auch nur als Abschluss in der letzten Zeile des Filterausdrucks stehen.

Zuerst folgt die Theorie in Form der Syntax-Übersicht, darauf die Definition der Abschnitte und erlaubte Score-Regeln, danach werden noch einige praktische Beispiele gezeigt.

Syntax-Übersicht:

ScoreDatei     = *( ScoreBlock / cEOL )
ScoreBlock     = ScoreAbschnitt *( ScoreRegel / cEOL )
ScoreAbschnitt = "[" Gruppenmuster *( 1*WSP Gruppenmuster ) "]" cEOL
Gruppenmuster  = [?] [ "+" / "-" ] Suchmuster
ScoreRegel     = [ "=" ] ScoreWert [ 1*WSP "unless" ] 1*WSP ScoreAuswahl cEOL
ScoreWert      = -2147483647...+2147483647
ScoreAuswahl   = ScoreDefFeld 1*( 1*WSP ScoreMuster | ScoreExpire )
ScoreMuster    = ["+"/"-"] [ "@" ScoreFeld ":" ] Suchmuster
ScoreDefFeld   = [ "~" ] ScoreFeld
ScoreFeld      = ( "Number" / "Subject" / "From" / "Date" /
                   "Message-ID" / "References" / "Bytes" /
                   "Lines" / "Xref" / "Xpost" / "Age" ) [":"]

ScoreExpire = "Expire:" Datum
Datum       = Jahr Monat Tag ; JJJJMMTT
Jahr        = 4DIGIT ; vierstellige Jahreszahl JJJJ
Monat       = 2DIGIT ; zweistellige Monatszahl MM
Tag         = 2DIGIT ; zweistellige Tageszahl TT

Suchmuster        = RegExpMuster / EinfachesMuster
RegExpMuster      = "{" RegularExpression "}"
RegularExpression = PCRE ; vgl. FAQ Reguläre Ausdrücke
EinfachesMuster   = MusterAlle / MusterText / MusterZahl

MusterAlle = "*"

MusterText          = CaseSensitiveText / CaseInsensitiveText
CaseInsensitiveText = """ Text """ ; ohne Beachtung von Groß-/Kleinschreibung
CaseSensitiveText   = "'" Text "'" ; mit Beachtung von Groß-/Kleinschreibung

MusterZahl = "%" ( "<" / "=" / ">" / "<>" / ">=" / "<=" ) Zahl ["kb" / "mb"]
; Achtung! 1 KB = 1024 Bytes, 1 MB = 1024 KB = 1048576 Bytes.
Zahl       = *DIGIT [ "." *DIGIT ]
DIGIT      = "0"..."9" ; eine Ziffer

cEOL      = [ "#" Kommentar ] CRLF
Kommentar = Text
Text      = ISO-TEXT ; Import von ISO 8859
CRLF      = %x0D %x0A ; = %d13 %d10, d. h. Wagenrücklauf
                      ; (carriage return) und Zeilenvorschub (line feed)
WSP       = Space / HTab ; White-Space
Space     = %x20 ; = %d32, d. h. Leerzeichen (space)
HTAB      = %x09 ; = %d09, d. h. Tabulator (horizontal tab)

Score-Abschnitte:

Jeder Abschnitt im Scorefile beginnt mit dem Gültigkeitsbereich „[…]“ Dieser Bereich legt die Newsgruppen fest, in denen die anschließend folgenden Filterausdrücke gültig sein sollen. Somit kann je nach Gruppe oder Teilhierarchie mit unterschiedlichen Kriterien gefiltert werden:

[*]
# Score-Abschnitt für alle Gruppen.

[* -".announce"]
# Score-Abschnitt für alle Gruppen, außer denen, welche die Zeichenkette
# „.announce“ enthalten.

["news" "usenet"]
# Score-Abschnitt für alle Gruppen, welche die Zeichenketten „news“ oder
# „usenet“ enthalten.

[{^news\.} {^alt\.usenet\.}]
# Score-Abschnitt für alle Gruppen, welche mit den Zeichenketten „news.“ oder
# „alt.usenet.“ beginnen, als Reguläre Ausdrücke geschrieben, vgl. unten.

Die Ausdrücke innerhalb der eckigen Klammern („[…]“) und die Score-Ausdrücke in den eigentlichen Filterzeilen sind dabei nach dem gleichen Schema aufgebaut.

Score-Regeln:

Mit jeder Score-Regel kann sich der Gesamt-Score eines Artikels verringern oder erhöhen. Dazu wird der Zeile ein positiver oder negativer Wert vorangestellt:

+100 subject "hamster"
-100 subject "make money fast"
Alternativ ist auch eine feste Wertzuweisung möglich, dazu wird dem eigentlichen Wert ein Gleichheitsszeichen („=“) vorangestellt:
=+9999 from "my.mail@address"
=-9999 from "spam.mail@address"

In beiden Fällen wird der Score-Wert natürlich nur dann geändert bzw. gesetzt, wenn die dem Score-Wert folgende Regel zutrifft.

Auf dem Server können dabei ohne Laden des Artikels nur die im „XOver“ des Servers vorhandenen Felder verarbeitet werden. Meistens sind das die folgenden Felder: „Subject“, „From“, „Date“, „Age“, „Message-ID“, „References“, „Bytes“, „Lines“ und „Xref“ (der Hamster speichert im Verzeichnis jedes Servers den jeweiligen „XOver“ in der Datei „overview.txt“).

Erst wenn der Hamster den Artikel vom Server geladen hat, kann auf alle anderen Header gefiltert werden. Eine Regel für das nachträgliche Filtern muss mit einem Fragezeichen am Zeilenanfang beginnen. Für das Filtern nach dem Laden des Artikels stehen zusätzlich die fiktiven Felder „Header“, „Body“ und „Article“ zur Verfügung. Diese drei zusätzlichen Felder liegen immer im Rohformat vor. Die Sonderfunktion zur Headerdecodierung „~“ (s. unten) kann auf diese Felder nicht angewandt werden.

Zur optischen Trennung kann nach dem Feld ein Doppelpunkt gesetzt werden.

Beispiele für die Anwendung verschiedener Felder:

+100 subject "hamster"
=+0 subject: "subject"
-100 from {no.*spam}
+500 message-id "@my.unique.fqdn" # Bitte Hinweise zu FQDN lesen!
+100 references "@my.unique.fqdn"
-100 bytes %>10000
Das fiktive Feld Xpost basiert auf dem Feld Xref und enthält die Anzahl der Gruppen, in welchen der Artikel erscheinen soll. Dies erlaubt gezielte Reaktionen auf Cross-Postings:
-10 xpost %>2 # Artikel abwerten, die in mehr als zwei Gruppen gepostet wurden.
=-9999 xpost %>5 # in mehr als fünf Gruppen gepostete Artikel in die Tonne.

Achtung: Der Xref-Header ist von der jeweiligen Implementation des Remote-Servers abhängig. Sein Inhalt ist von den tatsächlich auf diesem Server geführten Gruppen abhängig und muss nicht mit dem Inhalt des Newsgroups-Header übereinstimmen.

Das fiktive Feld Age basiert auf dem Feld Date und enthält das Alter des Artikels in Tagen:

=-9999 age %>14 # Über zwei Wochen alte Artikel ignorieren.

Beginnt der Feldname mit der Tilde („~“), wird das Feld vor der Anwendung der Regel mit dem MIME-Verfahren dekodiert (siehe hierzu auch die Beschreibung der Zeichensatzkonvertierungsdateien):

+100 ~subject "hämstêr"
-100 ~from "jürgen"

Die Dekodierung erfolgt immer in den lokal eingestellten Systemzeichensatz. Darin nicht enthaltene Zeichen des Artikel-Zeichensatzes werden nicht ersetzt, so dass sie durch die zufällige Entsprechung im lokalen Zeichensatz dargestellt werden. Infolgedessen können Sie sinnvoll nur auf Zeichen filtern, die in Ihrem lokalen Zeichensatz enthalten sind!

Hinweis: Die MIME-Dekodierung der Felder wirkt immer auf die komplette Filterzeile, also auch auf alle Felder einer Filterzeile!

Score-Muster:

Zeichenketten ohne führendes Plus- oder Minus-Zeichen („+“/„-“) bedeuten, dass zumindest eine von mehreren Zeichenketten dem Feld entsprechen muss, damit die Regel gültig ist:

# Subject enthält „hamster“ oder „newsserver“ oder „mailserver“:
+1 subject "hamster" "newsserver" "mailserver"

Zeichenketten mit führendem Plus-Zeichen bedeuten, dass diese Zeichenkette dem Feld entsprechen muss, damit die Regel gültig ist:

# Subject enthält „newsserver“ oder „mailserver“ oder beides, aber
# in jedem Fall zusätzlich „hamster“:
+1 subject +"hamster" "newsserver" "mailserver"

Zeichenketten mit führendem Minus-Zeichen bedeuten, dass diese Zeichenkette dem Feld nicht entsprechen darf, damit die Regel gültig ist:

# Subject enthält „newsserver“ oder „mailserver“, aber weder
# „unix“, noch „linux“, noch „inn“:
+1 subject "newsserver" "mailserver" -"unix" -"linux" -"inn"

# From-Header ohne „@“
=-9999 from -"@"
Bei numerischen Vergleichen muss ein Prozentzeichen („%“) vorangestellt werden:
# Sehr lange Postings abwerten:
-100 lines %>250
Das „Bytes“-Feld bietet die Möglichkeit, auf die Größe zu filtern:
-9999 Bytes: %>1000000

Man kann auch Angaben in „KB“ und „MB“ machen, wobei zu beachten ist, dass die Präfixe nicht dem SI entsprechend den Faktor 103 = 1000 darstellen, sondern den Faktor 210 = 1024, d. h. 1 KB = 1024 Bytes und 1 MB = 1024 KB = 1.048.576 Bytes.

Um in einer Abfrage auf den Inhalt eines anderen Feldes zugreifen zu können, muss der Feldname dem eigentlichem Ausdruck mit „@<Feldname>:“ vorangestellt werden:

# Score erniedrigen, sofern das Subject „help“, „urgent“ oder „!!!“ enthält,
# es sei denn, das From-Feld enthält „my@address“ oder das Subject „SCNR“:
-1 subject "help" "urgent" "!!!" -@from:"my@address" -"SCNR"
Beachten Sie, dass zwischen „@<Feldname>:“ und „<Ausdruck>“ keine Leerzeichen vorkommen dürfen: „@<Feldname>:<Ausdruck>“.

Man kann Regeln auch mit einem Verfallsdatum versehen. Dafür gibt es die spezielle Anweisung „Expire:JJJJMMTT“ (ohne Leerzeichen!), die dafür sorgt, dass die Regel, auf die sie angewandt wird, ab dem Datum <TT.MM.JJJJ> ungültig wird und vom Hamster ignoriert wird. Wie der Hamster beim Aufräumen damit umgehen soll, kann in „Einstellungen“ → „Automatische Abläufe“ → „Allgemeines“ eingestellt werden.

# Regel wird am 31.Dezember 2000 ungültig.
=-9999 References: "<3ae1.invalid>" Expire:20001231

Stehen Zeichenketten statt in Anführungsstrichen in geschweiften Klammern „{…}“, werden sie als Reguläre Ausdrücke betrachtet, was deutlich komplexere Ausdrücke erlaubt:

# Spam-Spoiler ignorieren: Regel erschlägt z. B. „From: nospam@nix.example.com“,
# „From: no.spam@nada.example.net“, „From: no-spam-please@example.org“,
# „From: please.delete@this.invalid“, „From: deletethis.plz@example.com“
# „From: remove_this@address.invalid“ „From: name_cut-this-out@example.net“.
-1 from {no.?spam} {(remove|delete|cut).*this}

Weitere Beispiele:

# Eigene Artikel haben oberste Priorität:
=+9999 From "Mein Name" # Fehltreffer möglich bei Namensgleichheiten.
=+9999 Message-ID "@mein.fqdn"

# Antworten auf eigene Artikel:
=+5000 References "@mein.fqdn"

# Überlange Artikel ignorieren, sofern nicht "FAQ" im Subject steht und nicht in
# Gruppen erschienen, die „announce“, „info“ oder „infos“ im Namen enthalten:
[* -announce -{infos?$}]
-10 Lines %>200
-10 Bytes %>10000
+20 Subject FAQ

# Ignorieren von Artikeln, die in mehr als 3 Gruppen erscheinen sollen:
-10 Xpost %>3 # Alternative mit gleicher Wirkung: „-10 Xpost %>=4“

# Postings ab einer bestimmten Größe abwerten, zum
# Umrechnungsfaktor, vgl. Bemerkungen oben
-5000 Bytes %>=500kb # = 512.000 Bytes
-9999 Bytes %>=1mb # = 1.048.576 Bytes

# Ignorieren von Artikeln mit "!!!" im Subject außer in Anfänger-Gruppen:
[* -newuser]
-1 Subject "!!!"

# Lange Postings eines bekannten, häufig nervenden Posters ignorieren bzw.
# ab einer bestimmten Länge kommentarlos verwerfen:
=-9999 lines: %>200 +@from:"Detlef Dampfplauderer" # Score festgesetzt.

-1234 lines: %>100 +@from:"Detlef Dampfplauderer" # Score noch veränderbar, lässt
                                                  # Raum für weitere Regeln.

# Beispiel für das Filtern nach dem Laden der Artikel:
?+10 Supersedes: *
?=-9999 Body: "Make Mony fast"