Benutzer Diskussion:UT-Bot/markAdmins.js

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Abschnitt hinzufügen
Aus Wiktionary, dem freien Wörterbuch
Letzter Kommentar: vor 3 Jahren von Udo T. in Abschnitt Wie aktualisiert UT-Bot

Wie aktualisiert UT-Bot[Bearbeiten]

Vorab: Möglicherweise ließen sich die Benutzernamen der Benutzergruppen jeweils auch per API-Zugriff ermitteln. Über die API-Spielwiese geht das auch und man bekommt dann Listen je nach Bedarf im Format json, xml etc. zurück. Allerdings lässt sich über diesen Weg der Benutzer "Missbrauchsfilter" (oder "Abuse filter") nicht von vorneherein ausblenden und müsste in einem späteren Schritt wieder aus den Benutzernamen eliminiert werden. Auch eine API-Abfrage von z. B. globalen Zurücksetzern ohne globale Admins (denn globale Admins sind ja sowieso immer auch globale Zurücksetzer) kann meines Wissens über API nicht gemacht werden.

Und da ich sowieso ein Wikitech-Benutzerkonto mit Shell-Zugang habe, erschienen mir Datenbank-Abfragen per SQL der einfachere Weg zu sein (zumal ich mich damit besser auskenne).

Einziger Nachteil dieser Vorgehensweise: Da man nur Zugriff auf die sog. "database replicas" hat (siehe auch w:Replikation (Datenverarbeitung)), kann es mitunter vorkommen, dass aktuelle Änderungen von Benutzerrechten nocht nicht in den "database replicas" enthalten sind und es so mitunter zu einer zeitlichen Verzögerung bei der Aktualisierung kommen kann. Aber das ist in meinen Augen für den hier vorgesehenen Zweck vertretbar. Außerdem wird sowieso nur 2 mal am Tag nach Änderungen gesucht.

  • Per einzelner SQL-Abfragen wird für jede var-Zeile zunächst eine einfache Liste mit den Benutzernamen der jeweiligen Benutzergruppen generiert. Wichtig dabei: die Benutzernamen müssen im Select des SQLs nach char(255) konvertiert (oder "gecastet") werden, da sie in der Datenbank als varbinary(255) gespeichert sind. Das sieht dann z. B. zunächst so aus:
Alexander Gamauf
Formatierer
  • Mittels diverser (einfacher) python-Skripte werden dann zunächst die Benutzernamen umgewandelt. So wird z. B. aus Peter Gröbner ein Peter_Gr%C3%B6bner oder etwa aus علاء ein %D8%B9%D9%84%D8%A7%D8%A1 gemacht.
  • Dann wird daraus, ebenfalls mit python, die var-Zeile erzeugt. Aus den beiden o. a. Benutzernamen wird daraus dann z. B.:
var intadmins = [ 'Alexander_Gamauf', 'Formatierer' ];
  • Die einzelnen var-Zeilen werden dann in eine einzige Datei zusammengefügt, wobei dann ganz oben noch eine Zeile mit // Variablen-A und ganz unten eine Zeile mit // Variablen-E hinzugefügt wird. Dies ist notwendig, damit der zu aktualisierende Abschnitt später mittels replace.py eindeutig erkannt werden kann. Die Datei ("markAdmin_vars.txt") sieht am Ende dann z. B. so aus:
// Variablen-A
var admins = [ 'Acf', 'Akinom', 'Alexander_Gamauf', 'Bal%C3%BB', 'Caligari', 'Dr._Karl-Heinz_Best', 'Edfyr', 'Formatierer', 'Peter_Gr%C3%B6bner', 'Stepro', 'Susann_Schweden', 'TheIgel69', 'Trevas', 'Udo_T.' ];
var intadmins = [ 'Alexander_Gamauf', 'Formatierer' ];
[…]
// Variablen-E
  • Zum Schluss ändert UT-Bot das dann einfach mittels dem Pywikibot-Skript replace.py:
    • Das "replacement in user-fixes.py sieht so aus:
    (r'\/\/ Variablen-A[\s\S]*\/\/ Variablen-E', getvaradminmark("markAdmin_vars.txt")),
    • Der Text aus "markAdmin_vars.txt" wird in user-fixes.py über die selber geschriebene kleine python-function "getvaradminmark" eingelesen, wobei dann aus der letzten Zeile auch gleich das Zeilenende-Zeichen entfernt wird.
    • Das alles zusammen (inkl. der derzeit 12 SQLs) dauert nur ca. 40 - 45 Sekunden, also nichts im Vergleich dazu, wenn man es immer wieder mühsam von Hand aktualisieren müsste.
    • Hat sich im Vergleich zum Vortag nichts geändert, dann erkennt das replace.py natürlich und UT-Bot ändert dann auch nichts.

--Udo T. (Diskussion) 15:19, 27. Jul. 2020 (MESZ)Beantworten