Tutoriel PHP - Récupérer des informations d'Essentials

Naruhiko315

Bucheron
16 Décembre 2013
4
0
12
25
Bonjour,

Je mets à la disposition des développeurs WEB un script que je viens de faire et testé en 1.7.2 dans le but récupérer des informations (dernière connexion, dernière déconnexion, dernière IP, l'argent sur le compte (à condition d'utiliser l'argent d'Essentials), la raison de bannissement et le temps de bannissement si l'utilisateur est banni) depuis les fichiers des utilisateurs d'Essentials (plugins/Essentials/userdata/pseudo.yml).

Il y aura cependant 2 modifications à faire, dans la class __construct, il faudra modifier le chemin vers votre fichier:
PHP:
$this->fichier = file('/home/' . $serveur . '/plugins/Essentials/userdata/' . strtolower($pseudo) . '.yml');

Après il vous suffit de modifier le nom "Naruhiko315" en bas du fichier par le pseudo souhaité.
PHP:
$minecraft = new Essentials('Naruhiko315');

Si jamais des développeurs professionnels ont des conseils à me donner... je suis à l'écoute ;) !

PHP:
<?php
 
// -------------------------------------
// -------------------------------------
// ------ DEBUT DE LA CLASS A INCLURE
// -------------------------------------
// -------------------------------------
 
/**
* Permet de récupérer des informations dans le fichier d'Essentials
* Class Essentials
*/
 
class Essentials{
 
    /**
    * @var string Fichier avec les informations à récupérer
    */
    private $fichier;
 
    /**
    * Permet de configurer les paramètres pour récupérer le bon fichier
    * @param string $pseudo Pseudo du joueur
    * @param string $serveur Nom du serveur
    */
    public function __construct($pseudo, $serveur = 'pvp'){
        $fichier = '/home/' . $serveur . '/plugins/Essentials/userdata/' . strtolower($pseudo) . '.yml';
        if (file_exists($fichier)) {
            $this->fichier = file($fichier);
        } else {
            $this->fichier = [];
        }
    }
 
    /**
    * Affiche l'argent du joueur
    * @return string $value Retourne la réponse
    */
    public function money(){
        // Boucle pour pouvoir récupérer les informations
        foreach($this->fichier as $key => $value) {
 
            // La chaîne contient le mot
            if (stripos($value, 'money:') !== FALSE) {
                // Enleve 8 caractères au début
                $value = substr($value, 8);
 
                // Enleve 2 caractères à la fin (dont le caractère pour sauter une ligne)
                $max_caractere = strlen($value);
                $value = substr($value, 0, $max_caractere-2);
 
                // Retourne le résultat
                return $value;
            }
        }
    }
 
    /**
    * Affiche la dernière connexion du joueur
    * @return string $value Retourne la réponse
    */
    public function login(){
        // Boucle pour pouvoir récupérer les informations
        foreach($this->fichier as $key => $value) {
 
            // La chaîne contient le mot
            if (stripos($value, 'login:') !== FALSE) {
                // Enleve 8 caractères au début
                $value = substr($value, 8);
 
                // Enleve 4 caractères en fin de nombre pour le timestamp soit correct en PHP et le caractère pour sauter une ligne)
                $max_caractere = strlen($value);
                $value = substr($value, 0, $max_caractere - 4);
 
                // Retourne le résultat
                return $value;
            }
        }
    }
 
    /**
    * Affiche la dernière déconnexion du joueur
    * @return string $value Retourne la réponse
    */
    public function logout(){
 
        // Boucle pour pouvoir récupérer les informations
        foreach($this->fichier as $key => $value) {
 
            // La chaîne contient le mot
            if (stripos($value, 'logout:') !== FALSE) {
                // Enleve 10 caractères au début
                $value = substr($value, 10);
 
                // Enleve 4 caractères en fin de nombre pour le timestamp soit correct en PHP et le caractère pour sauter une ligne)
                $max_caractere = strlen($value);
                $value = substr($value, 0, $max_caractere - 4);
 
                // Retourne le résultat
                return $value;
            }
        }
    }
 
    /**
    * Affiche la dernière adresse IP du joueur
    * @return string $value Retourne la réponse
    */
    public function ipAddress(){
        // Boucle pour pouvoir récupérer les informations
        foreach($this->fichier as $key => $value) {
 
            // La chaîne contient le mot
            if (stripos($value, 'ipAddress:') !== FALSE) {
                // Enleve 11 caractères au début
                $value = substr($value, 11);
 
                // Enleve 1 caractères à la fin (le caractère pour sauter une ligne)
                $max_caractere = strlen($value);
                $value = substr($value, 0, $max_caractere-1);
 
                // Retourne le résultat
                return $value;
            }
        }
    }
 
    /**
    * Affiche la raison du bannissement au joueur s'il est banni
    * @return string $value Retourne la réponse
    */
    public function ban(){
        // Boucle pour pouvoir récupérer les informations
        foreach($this->fichier as $key => $value) {
 
            // La chaîne contient le mot
            if (stripos($value, 'ban:') !== FALSE) {
 
                // Défini un nouveau tableau
                $tab['ban'] = [];
            }
 
            // Si le tableau existe
            if (isset($tab['ban'])) {
 
                // La chaîne contient le mot "reason: '" (banni définitivement)
                if (stripos($value, "reason: '") !== FALSE) {
                    // Enleve 2 caractères au début
                    $value = substr($value, 19);
 
                    // Enleve 2 caractères à la fin (dont le caractère pour sauter une ligne)
                    $max_caractere = strlen($value);
                    $value = substr($value, 0, $max_caractere - 2);
 
                    // Retourne le résultat
                    return $value;
                }
 
            }
 
            // La chaîne contient le mot "reason: ) (banni temporairement)
            if (stripos($value, 'reason:') !== FALSE) {
                // Enleve 2 caractères au début
                $value = substr($value, 10);
 
                // Enleve 1 caractères à la fin (le caractère pour sauter une ligne)
                $max_caractere = strlen($value);
                $value = substr($value, 0, $max_caractere - 1);
 
                // Retourne le résultat
                return $value;
            }
        }
    }
 
    /**
    * Affiche le temps qu'il reste au joueur s'il est banni
    * @return string $value Retourne la réponse
    */
    public function timeout(){
        // Boucle pour pouvoir récupérer les informations
        foreach($this->fichier as $key => $value) {
 
            // La chaîne contient le mot
            if (stripos($value, 'ban:') !== FALSE) {
 
                // Défini un nouveau tableau
                $tab['ban'] = [];
            }
 
            // Si le tableau existe
            if (isset($tab['ban'])) {
 
                // La chaîne contient le mot
                if (stripos($value, 'timeout:') !== FALSE) {
                    // Enleve 2 caractères au début
                    $value = substr($value, 11);
 
                    if ($value !== '0') {
                        // Enleve 3 caractères en fin de nombre pour le timestamp soit correct en PHP
                        $max_caractere = strlen($value);
                        $value = substr($value, 0, $max_caractere - 3);
                    }
 
                    // Défini la variable dans le nouveau tableau
                    return $value;
                }
            }
        }
    }
 
}
// -------------------------------------
// -------------------------------------
// ------ FIN DE LA CLASS A INCLURE
// -------------------------------------
// -------------------------------------
 
// Défini le joueur
$minecraft = new Essentials('Naruhiko315');
 
// Execute les diffèrentes methodes
echo 'IP: ' , $minecraft->ipAddress() , '<br>';
echo 'Dernière connexion: ' , $minecraft->login() , '<br>';
echo 'Dernière déconnexion: ' , $minecraft->logout() , '<br>';
echo 'Argent: ' , $minecraft->money() , '<br>';
echo 'Temps du bannissement: ' , $minecraft->timeout() , '<br>';
echo 'Raison du bannissement: ' , $minecraft->ban(), '<br>';
 
/*
* Après, évidemment, il faudra faire quelques modifications
    * - 0 dans Timeout = banni définitivement
    * - Aucune informations = membre pas encore connecté
    * - Formater la date
    * - ... etc ...
*/

http://pastebin.com/g2PyknAe (au cas où.. ;) )

Bonne chance !
 

lebabadu35

Architecte en herbe
21 Août 2014
115
10
80
24
Salut, très bon script, je pense que je vais l'utiliser ;) mais il faut que tu précises que cette méthode ne marche que sur serveur dédié/VPS, et qu'il faut avoir le site web sur la même machine que le serveur minecraft ;)
 

Naruhiko315

Bucheron
16 Décembre 2013
4
0
12
25
Oui, c'est vrai. Après si l'utilisateur s'y connait un peu, il est possible de l'utiliser sur une autre machine que celle où est hébergé le serveur en modifiant quelques parties du script. ^^