Script "Ignoreliste"

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Script "Ignoreliste"

Beitrag von whisper » 01.03.2024 19:32:02

Ja Firemonkey ging sofort
Script genommen, 20 User rein und gut.
Ok, ein paar weniger waren's :mrgreen:
Danke danke danke :THX:
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 01.03.2024 21:13:02

@JTH: Ja. Das primäre hier beschriebene Problem (springender Inhalt) löst das Script perfekt. Danke!

Es wird auch zusätzlich der Beitrag ausgeblendet, wenn der betreffend geblacklistete User den letzten Beitrag eines Threads gepostet hat. Das will ich noch weg machen.

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Script "Ignoreliste"

Beitrag von JTH » 01.03.2024 21:59:31

heisenberg hat geschrieben: ↑ zum Beitrag ↑
01.03.2024 21:13:02
Es wird auch zusätzlich der Beitrag ausgeblendet, wenn der betreffend geblacklistete User den letzten Beitrag eines Threads gepostet hat. Das will ich noch weg machen.
Ich hab zwar nicht vor, das Skript wirklich zu benutzen, aber das war mir auch noch aufgefallen ;) Ich vermute, der Grund dahinter war auch der Grund, warum das Skript aufm Smartphone vorhin nicht funktioniert hat (dort kommt ein Element mit Klasse responsive-show zum Tragen, aufm Desktop ein anderes mit responsive-hide – die beiden haben unterschiedlichen Inhalt).

Ich hab nochmal nachgebessert, es wird nun wirklich nur nach dem Eröffner des Threads geguckt. Und die abwechselnd hell- und dunkelgrauen Hintergründe werden auch noch passend mit verschoben :)

Code: Alles auswählen

// ==UserScript==
// @name       DF_Hide_User_Threads
// @author     some_random_dude
// @version    1
// @namespace  some_random_dude
// @match      https://debianforum.de/forum/search.php*
// @match      https://debianforum.de/forum/viewforum.php*
// @run-at     document-start
// ==/UserScript==

(() => {
  "use strict";

  const hiddenUsers = [
    "feltel",
    "heisenberg",
  ];

  function hideUserThreads(mutations, observer) {
    for (const mutation of mutations) {
      for (const node of mutation.addedNodes) {
        const usernameElems = node.querySelectorAll?.("dt .username, dt .username-coloured") ?? [];

        for (const usernameElem of usernameElems) {
          /* There is a parallel username element with class "responsive-show"
           * in the <dt>, that shows the *last poster* on mobile. We are not
           * looking for that element here.
           */
          if (!hiddenUsers.includes(usernameElem.textContent) ||
              !usernameElem.parentElement.classList.contains("responsive-hide")) {
            continue;
          }

          const rowToRemove = usernameElem.closest("li.row");

          /* Since we are removing a row, shift the light and dark grey
           * backgrounds accordingly.
           */
          let prevRow = rowToRemove;
          let prevClasses = rowToRemove.className;
          let row = rowToRemove.nextElementSibling;
          while (row) {
            const classes = row.className;
            row.className = prevClasses;
            prevClasses = classes;
            prevRow = row;
            row = prevRow.nextElementSibling;
          }

          rowToRemove.remove();
        }
      }
    }
  }

  const observer = new MutationObserver(hideUserThreads);
  observer.observe(document.documentElement, { childList: true, subtree: true });
  addEventListener("load", observer.disconnect);
})();
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
TRex
Moderator
Beiträge: 8325
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Script "Ignoreliste"

Beitrag von TRex » 01.03.2024 22:51:58

Danke, die dicke Kanone ist nun auch gepatcht.

https://git.aero2k.de/?p=dfde/hide-stuf ... ff.user.js
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Script "Ignoreliste"

Beitrag von whisper » 02.03.2024 09:23:44

JTH hat geschrieben: ↑ zum Beitrag ↑
01.03.2024 21:59:31
Ich hab nochmal nachgebessert, es wird nun wirklich nur nach dem Eröffner des Threads geguckt. Und die abwechselnd hell- und dunkelgrauen Hintergründe werden auch noch passend mit verschoben :)
Jo, gerade praktisch getestet, Vielen Dank, perfekt!
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 04.03.2024 13:17:14

TRex hat geschrieben: ping
JTH hat geschrieben: ping
Erlaubt Ihr eine Weitergabe Eurer Scripte? Lizenz? Ich würde das ggf. gerne direkt in mein öffentliches git-repo aufnehmen.
Zuletzt geändert von heisenberg am 04.03.2024 13:38:11, insgesamt 1-mal geändert.

Benutzeravatar
TRex
Moderator
Beiträge: 8325
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Script "Ignoreliste"

Beitrag von TRex » 04.03.2024 13:35:26

Ja, und wenn du es schaffst, es zu verkaufen, darfst du das auch :mrgreen:
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 04.03.2024 15:23:49

@TRex:

Wie nutzt man Dein Script? Mit welchem Plugin/Browser? Firefox + Firemonkey? Wie/wo setze ich die hidden_users bzw. hidden_threads? (Ich lese im Code dass das via localStorage gespeichert wird.)

Du schriebst etwas von Buttons. Ich sehe keine Buttons, die hier erscheinen. (Bookworm, Firefox 123, Firemonkey 2.72)

Benutzeravatar
TRex
Moderator
Beiträge: 8325
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Script "Ignoreliste"

Beitrag von TRex » 04.03.2024 15:50:17

Ich sehs auch gerade, ich habs mit dem letzten Commit kaputt gemacht. Ich war der Meinung, das so getestet zu haben...

https://git.aero2k.de/?p=dfde/hide-stuf ... 2faff1339a

der vorige Commit tut noch, ich werd den anderen reverten und das mit ner 0.4.1 versehen. Später. Sieht dann so aus:

4714

Threads werden rechts mit dem Auge ausgeblendet, User haben dafür rechts im Profil eine Mülltonne.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 04.03.2024 16:03:02

Ok. Mit der älteren Variante, die noch springt (hash: bec7e9530e05a01b36c0a57fee74640d41ccca36) geht es. (Thread hide, Thread unhide. User hide. Thread temp unhide, User temp unhide)

Aber wie bekomme ich den User wieder weg aus der Sperrliste? Wenn ich mir den Code anschaue, dann sehe ich da ein unhide_users, ein unhide_threads und ein unhide_thread, aber kein unhide_user (ohne s). Das gibt's dann wohl aktuell nicht.
TRex hat geschrieben: ↑ zum Beitrag ↑
28.02.2024 22:38:45
UI-Designer ist an mir keiner verloren gegangen...
Das sieht doch insgesamt schon wirklich sehr gut aus! Fishing for Compliments? :D

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 19.03.2024 21:53:34

@JTH: Danke nochmal für das Script. Ich hatte natürlich auch etwas gegraben. Aber MutationsObserver habe ich nicht gefunden.

Ich habe mir jetzt auf Deiner Basis ein Script für nebenan.de gebastelt, womit ich gewerbliche Beiträge und tendenziell Anderes ausblenden kann:

Code: Alles auswählen

// ==UserScript==
// @name       NEBENAN_HIDE_CONTENT
// @author     some_random_dude
// @version    1
// @namespace  some_random_dude
// @match      https://nebenan.de/feed*
// @run-at     document-start
// ==/UserScript==

const hide_articles=[
  "Gewerbliche Beiträge",
  "Marktplatz"
  ];

const hide_subjects=[
  "Hund"
  "Katze",
  "Maus",
]

function mylog(msg) {
  console.log(msg);
}

(() => {
  "use strict";

  function hideContents(mutations, observer) {
    for (const mutation of mutations) {
      for (const node of mutation.addedNodes) {
        
        const my_headers = node.querySelectorAll?.("article.ui-card strong") ?? [];
        for (const my_header of my_headers) {
          // mylog("header: " + my_header.textContent)
          const header_text=my_header.textContent;
          for(const hide_article of hide_articles) {
          	const regex=new RegExp(hide_article);
          	if(header_text.match(regex)) {
            	const container = my_header.closest("article");
            	mylog("found element to hide: " + container.nodeName + " for pattern >>" + hide_article + "<<");
            	container.remove();
            }
          }
        }
        
        const my_user_article_subjects = node.querySelectorAll?.("span.c-emoji") ?? [];
        for (const my_subject of my_user_article_subjects) {
          // mylog("header: " + my_header.textContent)
          const subject_text=my_subject.textContent;
          for(const hide_subject of hide_subjects) {
          	const regex=new RegExp(hide_subject);
          	if(subject_text.match(regex)) {
            	const container = my_subject.closest("article");
            	mylog("found element to hide: " + container.nodeName + " for pattern >>" + hide_subject + "<<");
            	container.remove();
            }
          }
        }
        
      }
    }
  }

  const observer = new MutationObserver(hideContents);
  observer.observe(document.documentElement, { childList: true, subtree: true });
  addEventListener("load", observer.disconnect);
})();

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Script "Ignoreliste"

Beitrag von whisper » 20.03.2024 08:00:18

heisenberg hat geschrieben: ↑ zum Beitrag ↑
19.03.2024 21:53:34
Ich habe mir jetzt auf Deiner Basis ein Script für nebenan.de gebastelt, womit ich gewerbliche Beiträge und tendenziell Anderes ausblenden kann:
Whow Werde ich bestimmt noch heute mal ausprobieren
:hail:
Super Idee!
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 22.04.2024 14:02:35

Ich habe das Skript jetzt nochmal ein klein wenig erweitert, so dass man auch Themen mit angegebenem Betreff verstecken kann:

https://codeberg.org/megabert/script-pa ... anforum.de

Benutzeravatar
TRex
Moderator
Beiträge: 8325
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Script "Ignoreliste"

Beitrag von TRex » 22.04.2024 14:28:54

aber für "KI" gibts sicher viele false positives :mrgreen:
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 22.04.2024 14:32:03

aber für "KI" gibts sicher viele false positives :mrgreen:
Es wird der komplette Betreff auf Gleichheit geprüft, kein Regex oder "beinhaltet" Vergleich.

Edit: Ich hab's jetzt zu RegEx-Match umgebaut.
Edit: Ich blende jetzt auch die Posts der Nutzer inThread in der IgnorierListe aus. (Funktioniert langsam richtig gut. Uh! Oh!)

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 14.05.2024 13:29:47

Ich habe jetzt noch ein Script DF-Hide-User-Posts.js geschrieben, dass auch die Posts IN-Thread entfernt. Es kann auch die Signaturen aller Posts entfernen.

https://codeberg.org/megabert/script-pa ... anforum.de

Das Sourcecodeverzeichnis im Repository wurde von greasemonkey zu firemonkey umbenannt.

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Script "Ignoreliste"

Beitrag von JTH » 15.05.2024 09:16:17

heisenberg hat geschrieben: ↑ zum Beitrag ↑
14.05.2024 13:29:47
Es kann auch die Signaturen aller Posts entfernen.
Damit man nicht irgendwann anfängt, halb phpBB nachzubauen … ;) :

Signaturen kann man einfach im „Persönlichen Bereich“ unter „Einstellungen“, „Anzeigeoptionen“ über die Einstellung „Signaturen anzeigen“ abschalten.
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 15.05.2024 09:27:57

JTH hat geschrieben: ↑ zum Beitrag ↑
15.05.2024 09:16:17
Signaturen kann man einfach im „Persönlichen Bereich“ unter „Einstellungen“, „Anzeigeoptionen“ über die Einstellung „Signaturen anzeigen“ abschalten.
Danke. Das ist natürlich besser!

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 15.10.2024 16:26:43

Ich hatte jetzt noch den Wunsch, das Script automatisch aktualisieren zu lassen, weil ich mehrere Firefox-Instanzen synchronsieren möchte.

Das geht mit einer UpdateURL in den Metadaten des Scriptes:

// ==UserScript==
// @name DF_Hide_User_Posts
// @author some_random_dude
// @version 2
// @namespace some_random_dude
// @match https://debianforum.de/forum/viewtopic.php*
// @updateURL https://www.yourserver.de/downloads/df_hide_user_posts.user.js
// @run-at document-start
// ==/UserScript==


Anschließend kann man das manuell Update im Firemonkey mit dem Update-Knopf testen und das automatische Update über die Checkbox "Auto-Update" aktivieren.

Wichtig dabei ist, bei jeder Änderung die Versionsnummer im Script auf dem Server um eines zu erhöhen. Was mir noch nicht gelungen ist, ist dass Script über einen Server mit Passwortschutz aktualisieren zu lassen (HTTP Basic Auth). Dafür wollte ich Benutzername und Passwort in der URL mit angeben. Für Firefox ist das noch unterstützt, aber als veraltet gekennzeichnet. [1] In Google Chrome ist die Funktionalität seit Version 59 entfernt. [2] Funktionieren tut es in Firefox aber trotzdem nicht.

ChatGPT empfiehlt als Alternative als primitiven Zugangsschutz, das Passwort per HTTP-GET-Variable anzugeben und als Wrapper ein serverseitiges Script zu verwenden, so in der Art:

@updateURL https://www.yourserver.de/get_script.php?access_token=skdlyfjdlkfsjdklsfkjl34r532lrksf.dsfslfk

Nachtrag

Hier mal eine Beispiel-Konfiguration für einen Zugriffsschutz per GET-Variable:

Das ist das PHP-Wrapper-Script z. B. mit dem Namen df_hide_user_posts.user.js.php

Code: Alles auswählen

<?PHP

$password="dein.geheimes.passwort"; # bitte zeichenvorrat beachten (siehe preg_match Zeile unten)

if ($_GET['access_token'] != "" ) {
        preg_match('/^([0-9a-zA-Z-_\.:,;=§$%.+]+)$/',$_GET['access_token'],$matches);
        $submitted_password=$matches[1];
        if ($password == $submitted_password) {
                header("Content-Type: text/plain");
                $input = file_get_contents("df_hide_user_posts.user.js");
                echo "$input";
        }
}
?>
Das ist die zugehörige Update-URL:

https://yourserver.tld/downloads/df_hide_user_posts.user.js.php?access_token=dein.geheimes.passwort

Das ist die zugehörige Apache-Konfiguration (für Apache v2.4+) für das Download-Verzeichnis:

Code: Alles auswählen

        <Directory /path/to/wwwroot/downloads>
                Options -Indexes
                # Zugriff auf alle Dateien mit Endung .user.js verbieten. 
                # Der Zugriff muss über das jeweillige Wrapper-Script erfolgen
                <FilesMatch "\.user\.js$">
                  Require all denied
                </FilesMatch>
        </Directory>
[1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
[2] https://chromestatus.com/feature/5669008342777856
Zuletzt geändert von heisenberg am 15.10.2024 18:09:09, insgesamt 2-mal geändert.

Benutzeravatar
TRex
Moderator
Beiträge: 8325
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Script "Ignoreliste"

Beitrag von TRex » 15.10.2024 18:02:32

heisenberg hat geschrieben: ↑ zum Beitrag ↑
15.10.2024 16:26:43
Ich hatte jetzt noch den Wunsch, das Script automatisch aktualisieren zu lassen, weil ich mehrere Firefox-Instanzen synchronsieren möchte.
Wenn die User nicht auch über das Script synchronisiert werden müssten, wärs ja an der Stelle schon fertig... aber dafür hab ich leider auch keine Lösung.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 15.10.2024 18:05:20

TRex hat geschrieben: ↑ zum Beitrag ↑
15.10.2024 18:02:32
heisenberg hat geschrieben: ↑ zum Beitrag ↑
15.10.2024 16:26:43
Ich hatte jetzt noch den Wunsch, das Script automatisch aktualisieren zu lassen, weil ich mehrere Firefox-Instanzen synchronsieren möchte.
Wenn die User nicht auch über das Script synchronisiert werden müssten, wärs ja an der Stelle schon fertig... aber dafür hab ich leider auch keine Lösung.
Die ausgeblendeten Benutzer und die ausgeblendeten Threadtitel stehen jeweils in den Scripten. Ist natürlich suboptimal. Aber es funktioniert schon so wie es soll.

Antworten