Skip to content

v1.4.0

Choose a tag to compare

@skylidefr skylidefr released this 01 Oct 01:16
· 6 commits to main since this release

🔄 Changelog - Version 1.4.0

📋 Résumé des modifications

Cette mise à jour majeure corrige tous les bugs identifiés et implémente les fonctionnalités Discord manquantes.


✅ Corrections de bugs

1. Méthodes publiques manquantes

  • ✔️ getServerDataCached() est maintenant publique
  • ✔️ getGameIcon() est maintenant publique
  • ✔️ getLatencyClass() est maintenant publique
  • ✔️ getProtocolFromGameType() est maintenant publique

2. Widget Elementor

  • ✔️ Utilise maintenant les méthodes publiques du plugin
  • ✔️ Plus de duplication de code
  • ✔️ Fonctionne correctement pour tous les modes d'affichage

3. JavaScript admin.js

  • ✔️ Fonction test-server implémentée avec AJAX
  • ✔️ Preview des couleurs fonctionnelle
  • ✔️ Ajout des éléments #preview-online et #preview-offline dans le HTML
  • ✔️ Validation des champs avant soumission
  • ✔️ Confirmation avant de quitter avec modifications non sauvegardées

4. Sécurité

  • ✔️ Ajout de nonce pour toutes les requêtes AJAX
  • ✔️ Vérification des permissions avec check_ajax_referer()
  • ✔️ Sanitization de toutes les options avec sanitizeOption()
  • ✔️ Échappement correct des URLs et couleurs

5. Gestion du cache

  • ✔️ Meilleure gestion du fallback si le serveur est indisponible
  • ✔️ Nettoyage des caches Discord lors de la désactivation

🆕 Nouvelles fonctionnalités

🔗 Intégration Discord complète

Configuration de base

  • ✅ Activation/désactivation des notifications
  • ✅ Configuration du webhook URL
  • ✅ Personnalisation du nom et avatar du bot
  • ✅ Test du webhook en temps réel

Types de notifications

  1. Serveur hors ligne - Alerte quand un serveur devient inaccessible
  2. Serveur en ligne - Notification quand un serveur revient
  3. Seuil de joueurs - Alerte quand X joueurs sont connectés
  4. Latence élevée - Avertissement si la latence dépasse un seuil
  5. Résumé quotidien - Rapport automatique à minuit

Fonctionnalités avancées

  • Mention de rôle : Mentionne un rôle Discord pour les alertes critiques
  • Cooldown : Évite le spam de notifications (configurable)
  • Embeds colorés : Couleurs personnalisables (online/offline/warning)
  • Rich embeds : Affichage détaillé avec joueurs, latence, version

Backend Discord

  • sendDiscordMessage() - Envoi de messages via webhook
  • checkServersStatus() - Vérification automatique (cron toutes les minutes)
  • sendDailySummary() - Résumé quotidien (cron à minuit)
  • buildDiscordEmbed() - Construction d'embeds riches
  • ✅ Système de tracking d'état des serveurs
  • ✅ Gestion du cooldown entre notifications

🔧 Handlers AJAX

1. Test de webhook Discord

Action: test_discord_webhook
Méthode: ajaxTestDiscordWebhook()
Fonction: Envoie un message de test au webhook

2. Test de connexion serveur

Action: test_server_connection
Méthode: ajaxTestServerConnection()
Fonction: Teste la connexion à un serveur et retourne les infos

Système de Cron

Vérification des serveurs

  • Fréquence : Toutes les minutes
  • Hook : steam_status_check_servers
  • Fonction : Détecte les changements d'état et envoie des notifications

Résumé quotidien

  • Fréquence : Tous les jours à minuit
  • Hook : steam_status_daily_summary
  • Fonction : Envoie un rapport complet de tous les serveurs

📝 Enregistrement des options

Nouvelles options Discord enregistrées :

'discord_enable_notifications'      // Activation globale
'discord_webhook_url'               // URL du webhook
'discord_bot_username'              // Nom du bot
'discord_bot_avatar'                // Avatar du bot (URL)
'discord_notify_offline'            // Notifier offline
'discord_notify_online'             // Notifier online
'discord_notify_player_threshold'   // Notifier seuil joueurs
'discord_player_threshold_value'    // Valeur du seuil
'discord_notify_high_latency'       // Notifier latence élevée
'discord_latency_threshold'         // Valeur latence max
'discord_daily_summary'             // Activer résumé quotidien
'discord_mention_role'              // ID du rôle à mentionner
'discord_notification_cooldown'     // Cooldown en secondes
'discord_embed_color_online'        // Couleur embed online
'discord_embed_color_offline'       // Couleur embed offline
'discord_embed_color_warning'       // Couleur embed warning

🎨 Améliorations UI/UX

Page d'administration

  • ✅ Prévisualisation en temps réel des couleurs
  • ✅ Boutons de test pour serveurs et webhook
  • ✅ Messages d'erreur explicites
  • ✅ Toggle automatique des options dépendantes
  • ✅ Validation des champs en temps réel

Interface utilisateur

  • ✅ Affichage cohérent dans Elementor et shortcodes
  • ✅ Responsive design pour mobile
  • ✅ Animations de hover sur les cartes
  • ✅ Classes CSS optimisées

🗂️ Structure des fichiers modifiés

/Steam-Server-Status-SourceQuery-PHP.php  (v1.4.0)
├── Méthodes publiques ajoutées
├── Handlers AJAX implémentés
├── Système Discord complet
├── Enregistrement des options Discord
└── Système de cron

/assets/admin.js
├── Test AJAX des serveurs
├── Test AJAX du webhook Discord
├── Preview en temps réel
├── Validation des formulaires
└── Toggle des options dépendantes

/includes/elementor-widget.php
├── Utilisation des méthodes publiques
├── Suppression de la duplication de code
└── Rendu optimisé

/assets/elementor-styles.css (inchangé)
└── Styles déjà fonctionnels

🚀 Migration depuis v1.3.1

Étapes automatiques

  1. Les nouvelles options seront créées avec valeurs par défaut
  2. Les crons seront programmés automatiquement
  3. L'ancien cache sera compatible

Configuration manuelle requise

  1. Discord : Configurer le webhook URL si vous voulez les notifications
  2. Cron : Vérifier que WP-Cron fonctionne sur votre hébergement

Vérification post-migration

// Vérifier que les crons sont actifs
wp_next_scheduled('steam_status_check_servers');      // Doit retourner un timestamp
wp_next_scheduled('steam_status_daily_summary');       // Doit retourner un timestamp

⚙️ Configuration recommandée

Pour notifications Discord actives

Cache serveur          : 15 secondes (équilibre perf/réactivité)
Cache latence          : 5 secondes (mises à jour fréquentes)
Cooldown Discord       : 300 secondes (5 min, évite le spam)
Vérification serveurs  : 60 secondes (via cron)

Pour performance maximale

Cache serveur          : 60 secondes
Cache latence          : 30 secondes
Désactiver Discord     : Si non utilisé

🐛 Bugs connus corrigés

  • Widget Elementor ne pouvait pas accéder aux données serveur
  • Test serveur simulé au lieu d'être réel
  • Preview des couleurs non fonctionnelle
  • Interface Discord sans backend
  • Pas de nonce de sécurité
  • Options Discord non enregistrées
  • Méthodes privées inaccessibles depuis Elementor
  • Duplication de code entre widget et plugin
  • Cache latence pouvait rester à false indéfiniment

📚 Documentation des nouvelles méthodes

Méthodes AJAX

ajaxTestDiscordWebhook()

// Teste la connexion au webhook Discord
// Retourne: JSON success/error
// Sécurité: Vérifie nonce et permissions

ajaxTestServerConnection()

// Teste la connexion à un serveur
// Paramètres: ip, port, game_type
// Retourne: JSON avec données serveur ou erreur

Méthodes Discord

sendDiscordMessage($webhook_url, $data)

// Envoie un message via webhook
// Retourne: bool (true si succès)

checkServersStatus()

// Vérifie l'état de tous les serveurs
// Appelé automatiquement par cron toutes les minutes

buildDiscordEmbed($server, $state, $type)

// Construit un embed Discord formaté
// Types: offline, online, player_threshold, high_latency

sendDailySummary()

// Envoie le résumé quotidien à minuit
// Appelé automatiquement par cron

Méthodes publiques (pour Elementor)

public function getServerDataCached($server, $id)
public function getGameIcon($game_type)
public function getLatencyClass($latency)
public function getProtocolFromGameType($game_type)
public function getSupportedGames()
public function getServers()
public function renderServerForElementor($server_id, $options)

🧪 Tests recommandés

1. Test des serveurs

  • Ajouter un serveur valide et le tester
  • Ajouter un serveur invalide et vérifier le message d'erreur
  • Tester différents types de jeux (Source, GoldSource, Minecraft)

2. Test Discord

  • Configurer un webhook de test
  • Cliquer sur "Tester" et vérifier la réception
  • Activer les notifications et simuler un serveur offline
  • Vérifier le cooldown entre notifications

3. Test Elementor

  • Créer une page avec le widget
  • Tester l'affichage en mode cartes
  • Tester l'affichage en mode tableau
  • Vérifier la personnalisation des styles

4. Test shortcodes

[steam_status id="0"]                    // Serveur unique
[steam_status_all]                       // Tous les serveurs

⚠️ Limitations connues

  1. WP-Cron : Nécessite du trafic sur le site ou un vrai cron système
  2. Discord Rate Limits : Max 30 webhooks/minute par webhook
  3. Latence : 3 requêtes par mesure = charge réseau
  4. Cache : Les états peuvent être en retard selon la configuration

🔮 Améliorations futures possibles

  • Interface de logs pour historique des notifications
  • Graphiques de statistiques serveurs
  • Intégration Telegram/Slack en plus de Discord
  • API REST pour accès externe
  • Dashboard avec état en temps réel
  • Support de plus de protocoles (FiveM, Teamspeak, etc.)
  • Webhooks sortants pour intégrations tierces
  • Mode maintenance programmé (pas de notifications)

💡 Conseils d'utilisation

Pour administrateurs de serveurs gaming

  1. Configurez Discord pour être alerté des pannes
  2. Réglez le cooldown à 5-10 minutes pour éviter le spam
  3. Utilisez la mention de rôle pour les alertes critiques
  4. Activez le résumé quotidien pour suivre les tendances

Pour développeurs WordPress

  1. Les méthodes publiques permettent l'extension du plugin
  2. Utilisez les hooks steam_status_check_servers et steam_status_daily_summary
  3. Le cache peut être vidé avec delete_transient('steam_status_X')

Pour designers

  1. Le widget Elementor offre un contrôle complet du style
  2. Les classes CSS sont cohérentes : .steam-status.online / .offline
  3. Les couleurs peuvent être personnalisées par serveur via CSS avancé

🆘 Support et dépannage

Discord ne fonctionne pas

  1. Vérifier que le webhook URL est correct
  2. Tester avec le bouton "Tester"
  3. Vérifier les logs PHP pour erreurs
  4. S'assurer que wp_remote_post() n'est pas bloqué

Les notifications ne s'envoient pas

  1. Vérifier que WP-Cron est actif : wp cron event list
  2. Tester manuellement : wp cron event run steam_status_check_servers
  3. Augmenter le cache si trop de notifications

Widget Elementor ne s'affiche pas

  1. Vérifier qu'Elementor est à jour
  2. Régénérer les CSS Elementor
  3. Vider le cache WordPress et du navigateur

Serveurs non détectés

  1. Vérifier IP et port
  2. Tester avec le bouton "Tester" dans l'admin
  3. Vérifier que le protocole (Source/GoldSource/Minecraft) est correct
  4. Certains hébergeurs bloquent les connexions sortantes

📄 Licence et crédits

  • Plugin : GPL-2.0+
  • SourceQuery : xPaw/PHP-Source-Query-Class
  • MinecraftQuery : xPaw/PHP-Minecraft-Query
  • Auteur : Skylide
  • Version : 1.4.0

🔄 Workflow de mise à jour GitHub

Le plugin supporte les mises à jour automatiques via GitHub :

  1. Push une nouvelle version sur GitHub
  2. Créer une release avec tag (ex: v1.4.0)
  3. WordPress détectera automatiquement la mise à jour
  4. Les utilisateurs verront la notification dans leur admin

Conclusion

Cette version 1.4.0 transforme le plugin d'un simple afficheur de statut en une solution complète de monitoring avec notifications intelligentes. Toutes les fonctionnalités promises sont maintenant implémentées et fonctionnelles.

Merci d'utiliser Steam Server Status SourceQuery PHP !