Extension:PublicAnnouncementSystem

Version datée du 10 juin 2026 à 22:43 par Kims (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)
Public Announcement System
État
stable
Type
notification, page spéciale
Hooks utilisés
  • RecentChange_save
Description
Diffusion des modifications récentes du wiki vers Discord sous forme d'annonces publiques (éditions, créations, suppressions, renommages, blocages…), entièrement configurable via une page spéciale.
Auteur(s)
Les Archives de Vault-Tec
Dernière version
2.0.0
Licence
GPL-2.0-or-later
Téléchargement
MediaWiki
≥ 1.43
PHP
≥ 8.1
Exemple

Public Announcement System (PAS) diffuse les modifications récentes du wiki vers un canal Discord sous forme d'annonces publiques : éditions, créations de pages, suppressions, renommages, téléversements, protections, blocages, créations de compte, etc.

L'extension est conçue pour la performance et la fiabilité :

  • Zéro impact sur l'enregistrement des pages — aucun appel réseau dans le hook ; l'envoi est différé (POSTSEND) ou mis en file (JobQueue).
  • Respect du rate limit Discord — les réponses HTTP 429 sont honorées via le Retry-After de Discord, avec re-programmation automatique (plafonnée à 5 tentatives).
  • Entièrement localisable et personnalisable — chaque phrase envoyée vers Discord provient du système i18n et peut être réécrite directement sur le wiki ; icônes, couleurs, éléments affichés et routage sont configurables.

Fonctionnalités

[modifier | modifier le wikicode]
  • Deux formats de message : ligne compacte (défaut) ou embed riche avec champs (taille, drapeaux, résumé, liens).
  • Deux modes d'envoi : immédiat (latence < 1 s) ou file de jobs (retries automatiques).
  • Configuration graphique via Special:PASystemConfig — sans toucher à LocalSettings.php.
  • Routage multi-canaux : chaque type d'action (suppression, blocage…) peut partir vers son propre webhook.
  • Filtrage fin : bots, modifications mineures, namespaces (liste blanche ou exclusions), utilisateurs, types de log, taille minimale du diff.
  • Plafond anti-flood configurable (annonces/minute) avec avis unique de forte activité.
  • Masquage des résumés auto-générés par MediaWiki (détection multilingue via les messages autosumm-* du core).
  • Sécurité : mentions désactivées (allowed_mentions), aperçus supprimés, échappement du markdown (anti-hameçonnage par liens masqués), webhook HTTPS obligatoire.
  1. Clonez le dépôt dans le répertoire extensions/ :
    cd extensions
    git clone https://github.com/GenerationFallout/Public-Announcement-System.git PublicAnnouncementSystem
  2. Ajoutez dans votre LocalSettings.php :
    wfLoadExtension( 'PublicAnnouncementSystem' );
    $wgPASystemWebhookUrl = 'https://discord.com/api/webhooks/…/…';
  3. Vérifiez sur Special:Version que l'extension est chargée, puis diffusez une annonce d'essai depuis Special:PASystemTest.

L'extension reste désactivée tant que $wgPASystemWebhookUrl est vide.

Via le wiki (recommandé)

[modifier | modifier le wikicode]

Presque tout se configure depuis Special:PASystemConfig (droit pasystem-admin, sysops par défaut) : format, mode d'envoi, identité du bot, filtres, plafond anti-flood, éléments d'affichage, icônes et couleurs.

Les réglages sont stockés dans MediaWiki:PASystemConfig.json — versionnés et révocables comme toute page du wiki — et prennent le pas sur LocalSettings.php. Les valeurs invalides sont ignorées sans risque. Pour revenir aux valeurs de LocalSettings.php, supprimez cette page.

Exception : les URL de webhook ($wgPASystemWebhookUrl, $wgPASystemWebhookRoutes) ne se définissent que dans LocalSettings.php — les pages du wiki sont publiques et ces URL contiennent un jeton secret.

Via LocalSettings.php

[modifier | modifier le wikicode]
Réglage Défaut Description
$wgPASystemWebhookUrl URL du webhook Discord (HTTPS obligatoire). Vide = extension désactivée.
$wgPASystemWebhookRoutes {} Routage par type d'action : edit, new, upload, delete, restore, move, protect, unprotect, block, unblock, newuser, rights, log, flood. Les types sans route utilisent le webhook principal.
$wgPASystemBotName Nom affiché du bot. Vide = nom du wiki.
$wgPASystemBotAvatarUrl URL de l'avatar du bot (optionnel).
$wgPASystemDeliveryMode immediate immediate (latence < 1 s, sans retry) ou job (retries via JobQueue).
$wgPASystemFormat line line (compact) ou embed (riche).
$wgPASystemMaxPerMinute 0 Plafond d'annonces par minute. 0 = illimité.
$wgPASystemNotifyBots false Annoncer les modifications des bots.
$wgPASystemNotifyMinor true Annoncer les modifications mineures.
$wgPASystemNotifyCategorization false Annoncer les changements de catégorisation.
$wgPASystemNotifyExternal false Annoncer les changements externes (ex. Wikidata).
$wgPASystemIncludedNamespaces [] Liste blanche de namespaces (vide = tous).
$wgPASystemExcludedNamespaces [] Namespaces exclus, ex. [ 2, 3 ].
$wgPASystemExcludedUsers [] Utilisateurs jamais annoncés.
$wgPASystemExcludedLogTypes [] Types de log ignorés, ex. [ 'patrol', 'thanks' ].
$wgPASystemMinDiffSize 0 Taille minimale du diff (octets) pour annoncer une édition.
$wgPASystemStripAutoSummaries true Masquer les résumés auto-générés par MediaWiki.
$wgPASystemDisplay {} Interrupteurs d'affichage : icons, delta, summary, diffLink, links, flags, footer, timestamp.
$wgPASystemActionIcons {} Emoji par type d'action (fusionné avec les défauts).
$wgPASystemEmbedColors (défauts) Couleur RGB décimale par type d'action (format embed).
$wgPASystemWikiBaseUrl URL de base pour les liens. Vide = déduite de $wgServer.
$wgPASystemDebug false Journalisation verbeuse (canal PublicAnnouncementSystem).

Personnalisation des textes

[modifier | modifier le wikicode]

Chaque phrase envoyée vers Discord est un message i18n rendu dans la langue de contenu du wiki. On peut réécrire n'importe laquelle en modifiant la page MediaWiki:Pasystem-… correspondante (droit editinterface), sans toucher au code. Le markdown Discord est autorisé.

Exemple — rendre les annonces d'édition plus enthousiastes en modifiant MediaWiki:Pasystem-line-edit/fr :

$1 $2 vient d'améliorer $3$4$5$6 🎉

La liste complète des messages et de leurs paramètres figure dans le README.

Pages spéciales

[modifier | modifier le wikicode]

Les deux exigent le droit pasystem-admin (sysops par défaut).

Limites et confidentialité

[modifier | modifier le wikicode]
  • Les annonces sont permanentes côté Discord : une révision masquée a posteriori sur le wiki (RevisionDelete, oversight) reste visible dans le canal. Pensez à exclure les namespaces sensibles.
  • Le plafond anti-flood utilise une fenêtre fixe d'une minute, pas une fenêtre glissante.
  • En mode immediate, pas de retry sur les erreurs réseau ; utilisez le mode job pour une livraison garantie.
  • Rien n'arrive dans Discord — vérifiez $wgPASystemWebhookUrl puis utilisez Special:PASystemTest. En mode job, vérifiez que la JobQueue tourne.
  • Annonces en retard — mode job avec runner en cron : passez en immediate ou exécutez le JobRunner plus souvent.
  • Journal détaillé :
    $wgDebugLogGroups['PublicAnnouncementSystem'] = '/var/log/mediawiki/pasystem.log';
    $wgPASystemDebug = true;