Statistiques d'un canal dans une page HTML
#1
Ce n'est pas la première fois que l'on me demande comment mettre le nombre de connectés d'un canal dans une page html.

Voici un petit code fonctionnel (mais pas du tout optimum).
Il suffit d'avoir un template de la page de sortie dans lequel la chaîne NB_USERS sera remplacée par le nombre d'utilisateurs.
TCL
set schan "#canal"
set template "/home/user/template.html"
set sfile "/home/user/count.html"
 
bind join - "$schan *" statcount
bind part - "$schan *" statpart
 
proc statpart { nick uhost handle chan {msg ""} } {
   statcount $nick $uhost $handle $chan
   return 0;
}
 
proc statcount { nick uhost handle chan } {
   set fi [open $::template r]
   set lines [read -nonewline $fi]
   close $fi
   set tot [llength [chanlist $chan]]
   regsub -all -- NB_USERS $lines $tot lines
   set fo [open $::sfile w]
   puts $fo $lines
   close $fo
   return 0
}


Répondre
#2
Salut CrazyCat,
Après avoir vue ton script bien sympathique qui est dans la catégorie inutile mais surtout indispensable :p j'ai fait une petite mise en place chez moi et semble bien marcher Smile

Mais faut dire qu'il y'a toujours un chieur :p ( et là c'est moi Very Happy ) Alors petit problème avec le statpart qui marche pas trop chez moi :/ mais le join nickel Smile une petite idée sur le problème ?

TCL
set schan "#jeuxfr.quizz"
set template "/home/jeuxfr/eggdrop/oxys/scripts/template.php"
set sfile "/home/jeuxfr/www/index.php"
 
bind join - "$schan *" statcount
bind part - "$schan *" statpart
 
proc statpart { nick uhost handle chan {msg ""} } {
   statcount $nick $uhost $handle $chan
   return 0;
}
 
proc statcount { nick uhost handle chan } {
   set fi [open $::template r]
   set lines [read -nonewline $fi]
   close $fi
   set tot [llength [chanlist $chan]]
   regsub -all -- NB_USERS $lines $tot lines
   set fo [open $::sfile w]
   puts $fo $lines
   close $fo
   return 0
}



Comme tu peux voir j'ai rien touché Smile
Et autre petite question je voudrais ajouter deux autres chans sur le script du genre :

Code :
set schan(1) "#jeuxfr.quizz"
set schan(2) "#jeuxfr.motus"
set schan(3) "#jeuxfr.village"

Mais je vois pas trop comment modifier le reste du code :p donc un petit coup de pousse si possible m'aiderai bien Smile

Merci d'avance Smile ( j'ai fini )

EDIT: le part fonctionne mais le temps est plus long que le join a afficher Smile
Répondre Avertir
#3
Ok pour le part, tu m'as fait peur Smile
Pour faire fonctionner avec plusieurs canaux, deux options:
- générer les binds pour chaque canal (simple à mettre en oeuvre mais lourd s'il y a beaucoup de canaux),
- avoir des procédures globales (pour tous les canaux) qui vérifient tout d'abord si le canal est à surveiller (très consommateur de cpu).

Par contre, il faudrait savoir si tu veux des fichiers différents pour chaque canal ou pas
Répondre
#4
C est juste pour les trois chans que j ai indiqué. J ai test avec les binds par chans mais ça marche pas trop :/
Répondre Avertir
#5
Ben oui, tout va dans le même fichier, donc il contient à chaque fois le nombre d'utilisateur du dernier canal où il y a eu un join ou un part.
Répondre
#6
Hum, pas si simple du coup
Répondre Avertir
#7
Peut être que le script suivant t'aidera:
TCL
set schan(jeuxfr.quizz) "quizz"
set schan(jeuxfr.motus) "motus"
set schan(jeuxfr.village) "village"
 
set template "/home/user/template.html"
set sfile "/home/user/%fname.count.html"
 
foreach chan [array names $schan] {
	bind join - "#$chan *" statcount
	bind part - "#$chan *" statpart
}
 
proc statpart { nick uhost handle chan {msg ""} } {
   statcount $nick $uhost $handle $chan
   return 0;
}
 
proc statcount { nick uhost handle chan } {
   set fi [open $::template r]
   set lines [read -nonewline $fi]
   close $fi
   set tot [llength [chanlist $chan]]
   regsub -all -- NB_USERS $lines $tot lines
   regsub -all %fname $::sfile $::schan([string range $chan 1 end]) cfile
   set fo [open $cfile w]
   puts $fo $lines
   close $fo
   return 0
}


Répondre
#8
(11/02/2013, 22:49)CrazyCat a écrit : Par contre, il faudrait savoir si tu veux des fichiers différents pour chaque canal ou pas
Oui, pardon j'avais pas vue le poste sur mobile c'est la daube xD donc un NB_USERSquizz NB_USERSmotus ect

Je regarde ton dernier script ce soir mais si j'ai bien compris il calcul les trois non ? ( pas test encore :p ) mais merci Smile
Répondre Avertir
#9
(12/02/2013, 20:12)kipof a écrit : Je regarde ton dernier script ce soir mais si j'ai bien compris il calcul les trois non ? ( pas test encore :p ) mais merci Smile
Le script donné crée un fichier par canal, en renommant le fichier de sortie en fonction de ce qu'il y a dans schan(canal).
Répondre
#10
Ah bien ( d'ou le pas test :p ) le truc est que je voulais test d'afficher les trois sur la même page ( index ) ou sont annoncé les trois chans de jeux disponible sur le réseau. J'avais voulu faire plus simple du genre trois bot qui gère chacun le nombre de connecté sur son chan mais le problème ( Ouai c'est jamais facile ) est vue qu'ils doivent gérer l'index les deux autres chans sont jamais renseigné ( ce qui est normale si on réfléchi :° )

Je me serais jamais cassé la tête si j'avais pas lus ce topic :p
Répondre Avertir
#11
Si tu veux mettre les stats des 3 canaux dans un seul fichier, il faudra boucler sur les 3 canaux dans la procédure statcount afin de remplir 3 variables et de les substituer dans ton template. Enfin, c'est la méthode bourrin, parce que tu peux aussi juste mettre à jour une variable globale et chaque fois recompter pour le canal sélectionné, mais cela implique une initialisation lorsque ton eggdrop entre sur les canaux, ou lors d'un retour de netsplit.
Répondre
#12
salut,
Petite apparté ( chieur² lol ) il s'avere que ce TCL ne fonctionne que si l'on possede un shell ( serveur), il fonctionne trés bien, neamoins, pas ou peu d'infos pour ce qui n'ont pas cette chance, et utilisent un truc type pages perso ( orange, free ect .. ) la methode n'est pas la meme, serait il possible que quelqu'un s'y colle ( pas moi, hors de mes competences, dsl)
Mais j'avoue que j'ai beaucoup cherché à mes debuts sur le comment faire, et malheureseusement je n'ai jamais reussi à l'époque.

cordialement.
Répondre Avertir
#13
Il n'y a rien de plus simple à faire dans un tel cas.
Il suffit d'avoir une page de mise à jour (en php par exemple) à laquelle on passe les différentes valeurs en GET, et que la page génère la nouvelle page de stats.
Donc, il faut que le script utilise le package http, pour aller sur http://ton.hebergeur/tapage.php?canal=machin&users=X
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté