Extension:PublicAnnouncementSystem
| État |
stable |
|---|---|
| Type |
notification, page spéciale |
| Hooks utilisés |
|
| 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-Afterde 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
- Clonez le dépôt dans le répertoire
extensions/:cd extensions git clone https://github.com/GenerationFallout/Public-Announcement-System.git PublicAnnouncementSystem
- Ajoutez dans votre
LocalSettings.php:wfLoadExtension( 'PublicAnnouncementSystem' ); $wgPASystemWebhookUrl = 'https://discord.com/api/webhooks/…/…';
- 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
- Special:PASystemConfig — configuration graphique.
- Special:PASystemTest — diffuse une annonce de test vers le webhook.
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 modejobpour une livraison garantie.
Dépannage
- Rien n'arrive dans Discord — vérifiez
$wgPASystemWebhookUrlpuis utilisez Special:PASystemTest. En modejob, vérifiez que la JobQueue tourne. - Annonces en retard — mode
jobavec runner en cron : passez enimmediateou exécutez le JobRunner plus souvent. - Journal détaillé :
$wgDebugLogGroups['PublicAnnouncementSystem'] = '/var/log/mediawiki/pasystem.log'; $wgPASystemDebug = true;
Voir aussi
- Dépôt GitHub — code source, changelog, suivi des bugs
- Créer un webhook Discord