Nouvelle extension : NukeBack

Certains admins de la Wikipédia francophone se sont sans doute déjà attelés à la lourde et incommensurablement chiante tâche de supprimer toutes les pages de cochoncetés créées par un vandale, avant l’apparition de l’extension Nuke. Beaucoup, y compris parmi les non-admins, se sont explosé le doigt à force d’annuler les cochoncetés ajoutées par un vandale sur les pages existantes, et continuent à se l’exploser : il y a bien un script rollbackEdits.php, écrit par demon, mais il n’est de toute évidence pas accessible à nous autres, simples mortels, et ne l’est pas plus aux sysops s’ils ne sont pas aussi sysadmins (ou plutôt qu’ils n’ont pas accès à un shell). C’est la merde.

J’en ai eu marre, je l’avoue, et je me suis donc attelé à une tâche pas moins chiante, mais qui promet de meilleurs résultats – et qui fatiguera beaucoup moins les doigts de tout le monde ! – : la création d’un outil pour révoquer des éditions en masse. À l’origine prévu pour révoquer les modifications de bots devenus fous, je m’étais dit qu’un bot serait assez pratique, et qui plus est un tant soit peu ironique. Mais qui en aurait le contrôle direct, quand, comment ?

  • Des requêtes ? Pas assez immédiat, autant dire que ça ne servirait à rien
  • Un contrôle via IRC ? Pas assez sûr, ou pas disponible pour tous les admins (ceux qui n’ont pas IRC, ou pas de compte NickServ, seraient dépourvus de moyen de contrôler le bot) ; et puis ça risquait d’être particulièrement saoûlant de gérer simultanément plusieurs requêtes
  • Donner le script à tous les admins, qui s’en serviraient depuis leur compte ? Encore plus inaccessible, les admins sachant se servir de leur ligne de commande étant encore plus rares que ceux sachant se servir d’IRC…

Je me suis donc finalement dit que le plus simple serait de concevoir une extension, qui à terme pourrait servir sur Wikipédia. Alors certes, le vote pour ajouter une nouvelle extension est beaucoup plus long à préparer que celui pour lancer un bot ; mais une extension peut servir sur d’autres wikis ; une extension peut être employée par un groupe déterminé (dans Mediawiki) d’utilisateurs ; une extension est toujours disponible si le wiki est disponible ; une extension n’est pas limitée par quelque taux que ce soit ; et enfin, l’interface d’une extension devrait dans l’idéal toujours être simple, voire explicite : pas besoin d’arguments dans une ligne de commande, tout se fait via une interface web avec des champs nommés.

Le choix était donc fait. Restait donc à créer le concept ! Je me suis plongé dans la lecture de plusieurs bouts de code de MediaWiki (plus précisément dans Article.php, qui contient la fonction « rollback » du logiciel) et d’une extension citée plus haut, Nuke (qui contient un segment de code pour lister des pages, et un autre pour traiter les pages sélectionnées). Ce ne fut pas sans mal, mais j’ai finalement pondu un joli brouillon, avec des traductions à chier, des bugs d’affichage à faire hurler de rire Tim Starling, et sans doute des redondances dans le code suffisamment majestueuses pour plonger Werdna dans le plus profond désarroi. Mais le développement avance, et, puisque le produit pour sa fonction première est d’ores et déjà fini, devrait je l’espère bientôt cesser avec un produit fini.


Un petit aperçu des fonctions ? Soit.

  • Choix d’un utilisateur, et possibilité de ne rien faire sur ses sous-pages utilisateur et sous-pages de discussion ;
  • d’un instant à partir duquel lister les modifications de cet utilisateur (limité par défaut à une semaine dans le passé, mais accessible soit par un timestamp UNIX, soit par un timestamp MediaWiki1, soit encore par des mots anglais, comme par exemple « 1 hour ago »2 ), et possibilité de faire revenir les pages dans l’état où elles étaient à l’heure indiquée (ou à une version plus récente par un autre utilisateur, le cas échéant)
  • d’un motif pour la révocation, et possibilité de remplacer intégralement le motif par défaut auquel il succède normalement dans le commentaire de révocation
  • choix des espaces de noms à traiter
  • choix plus fin par cases à cocher des pages sur lesquelles agir, indiquées dans une liste (tout comme Special:Nuke)
  • liste des réussites (avec lien vers le diff de révocation) et des insuccès (avec raison de l’insuccès) sur la page de « résultat », liens vers la page et vers l’historique inclus pour chaque.

Je ne sais trop encore s’il faut intégrer Nuke à NukeBack, et supprimer donc les pages qui n’ont été éditées que par le vandale « ciblé » – à mon sens, c’est du « gâchis », Special:Nuke le faisant déjà très bien… On verra bien ce qu’en disent les retours 😉

En attendant, un wiki de test dédié à cette extension existe ici. Faites de votre mieux pour tout vandaliser tout partout !!!

Update 19 mai 2010, 16h17 : Le wiki de test est maintenant clos et supprimé. Il me reste sans doute beaucoup d’améliorations à faire pour l’interface – qui est franchement hideuse… – mais les fonctions tournent au mieux : j’ai « vandalisé » un MW 1.15.1 installé en local, je me tâte encore seulement à créer une interface « rapide » pour lier directement [[Spécial:NukeBack/utilisateur/timestamp/flags/namespaces/raison]] à la liste correspondant à toutes les pages éditées par Utilisateur depuis timestamp sur les espaces de noms namespaces, avec les options flags avec comme motif raison. Les options correspondent aux cases à cocher que sont « marquer comme bot », « revenir à la situation des pages à timestamp« , « remplacer complètement le commentaire de modif par celui indiqué », « révoquer les sous-pages de l’utilisateur ».

Update 26 juillet 2010, 08h34 : Les liens directs sont disponibles. Par exemple, [[Spécial:NukeBack/Test/1_day_ago/0,1,3,4,5/nobot,overridereason,toTS,subpages/essai_de_machine]] fonctionne comme prévu, et permet d’accéder directement à la liste des pages :

  • éditées par Test,
  • depuis un jour (soit 24 heures),
  • dans les espaces de noms 0 ( (Principal) ), 1 (Discussion), 3 (Discussion utilisateur), 4 (Fichier), et 5 (Discussion fichier),
  • en employant les options « ne pas marquer les édits comme faits par un bot », « employer seulement le motif fourni dans les commentaires de modification », « faire revenir chaque page dans l’état dans lequel elle était au moment indiqué », « révoquer aussi les modifications effectuées dans les sous-pages de cet utilisateur »
  • avec comme motif « essai de machine »3

L’interface est nettement plus jolie, et inclut des fieldsets regroupant des champs d’intérêt similaire pour une présentation plus claire.


  1. YYYYMMDDHHMMSS []
  2. Il importe dans ce dernier cas d’employer un format reconnu par la fonction php.strtotime(). []
  3. Notez qu’il est impossible par ce moyen d’avoir des underscores dans le motif, ce qui peut donc de fait compromettre certains liens externes, il faut dans ce cas passer par le formulaire… []

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">