Extension:PublicAnnouncementSystem

Version datée du 10 juin 2026 à 22:29 par Kims (discussion | contributions) (Page créée avec « {{Infobox_Extension | nom = Public Announcement System | état = stable | type1 = notification | type2 = page spéciale | hook1 = 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 = Fallout Genera... »)
(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)
Fallout Generation
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

  • 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.

Installation

  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.

Configuration

Via le wiki (recommandé)

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

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

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

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

Limites et confidentialité

  • 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.

Dépannage

  • 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;

Voir aussi