Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


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
}

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#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 :)

Mais faut dire qu'il y'a toujours un chieur :p ( et là c'est moi :D ) Alors petit problème avec le statpart qui marche pas trop chez moi :/ mais le join nickel :) 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é :)
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 :)

Merci d'avance :) ( j'ai fini )

EDIT: le part fonctionne mais le temps est plus long que le join a afficher :)
#3
Ok pour le part, tu m'as fait peur :)
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
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#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 :/
#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.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#6
Hum, pas si simple du coup
#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
}

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#8
(11/02/2013, 22:49)CrazyCat Wrote: 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 :)
#9
(12/02/2013, 20:12)kipof Wrote: Je regarde ton dernier script ce soir mais si j'ai bien compris il calcul les trois non ? ( pas test encore :p ) mais merci :)
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).
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#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
#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.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#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.
#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
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Résolu] récupérer texte dans page html BrYcOu 5 5,590 22/09/2015, 06:46
Last Post: BrYcOu
  [Demande] Script recupération dedicace sur une page web fedora 6 5,701 10/03/2015, 02:20
Last Post: angels
  nick list dans fichier html loulou7593 20 11,670 04/02/2012, 18:43
Last Post: djkenny
  recuperer les infos d'une page web loulou7593 0 3,620 23/12/2011, 00:20
Last Post: loulou7593
  page html trivia.tcl sur un site web Illuminati 6 5,027 14/04/2008, 17:40
Last Post: ours_en_pluche
  Lire une ligne précise sur une page html BdS 7 7,794 03/10/2006, 21:58
Last Post: BdS

Forum Jump:


Users browsing this thread: 1 Guest(s)