nick list dans fichier html
#1
Bonjour, je viens car j'avais trouvé à une periode
un petit tcl qui permet d'enregistrer la liste des users dans un fichier html.

Voici le code
tcl
###################################
########### Liste users ###########
###################################
 
set canal "#accueil"
set fichier "/home/loulou/public_html/liste.html"
 
bind join - "$canal *" list:join
bind part - "$canal *" list:part
bind sign - "$canal *" list:quit
 
proc list:join {nick uhost handle chan} { list:log; }
proc list:part {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}
proc list:quit {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}
 
proc list:log {} {
    set fp [open $::fichier w]
    foreach cnick [chanlist $::canal] {
        if { $cnick == $::botnick } { continue; }
        if { [isop $cnick $::canal] == 1 } {
            set st "@"
        } elseif { [ishalfop $cnick $::canal] == 1 } {
            set st "%"
        } elseif { [isvoice $cnick $::canal] == 1 } {
            set st "%"
        } else {
            set st ""
        }
        puts $fp "$st$cnick<br />"
    }
    close $fp
}

##########
# Putlog #
##########
#
putlog "nick list par CrazyCat"



Le systeme de differencier les @, les % et les normaux fonctionne bien, j'aurais aimer savoir si il etait possible sur cette page html d'y mettre un fond, et d'associer par exemple la couleur rouge pour les @, Bleue pour les % et Vert pour les normaux mais aussi de classer par ordre sur le fichier par exemple les @ en premiers , les % en deuxiemes et les normaux en troisiemes.

comme ceci

@Niubot
@Popcorn

%loulou
%steph
%Tiger

ben
joe
cindy


Si quelqu'un peut m'aider, merci d'avance
Répondre Avertir
#2
Voici ce que ça peut donner, sans optimisation:
tcl
###################################
########### Liste users ###########
###################################
 
set canal "#accueil"
set fichier "/home/loulou/public_html/liste.html"
 
bind join - "$canal *" list:join
bind part - "$canal *" list:part
bind sign - "$canal *" list:quit
 
proc list:join {nick uhost handle chan} { list:log; }
proc list:part {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}
proc list:quit {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}
 
set u(op) {}
set u(hop) {}
set u(vop) {}
set u(nop) {}
 
proc list:log {} {
    foreach cnick [chanlist $::canal] {
        if { $cnick == $::botnick } { continue; }
        if { [isop $cnick $::canal] == 1 } {
            lappend ::u(op) $cnick
        } elseif { [ishalfop $cnick $::canal] == 1 } {
            lappend ::u(hop) $cnick
        } elseif { [isvoice $cnick $::canal] == 1 } {
            lappend ::u(vop) $cnick
        } else {
            lappend ::v(op) $cnick
        }
    }
    save:log
}
 
proc save:log {} {
	set fp [open $::fichier w]
	foreach nick $::u(op) {
		puts $fp "<span style='font-color:red;'>@$nick</span><br />"
	}
	foreach nick $::u(hop) {
		puts $fp "<span style='font-color:blue;'>%$nick</span><br />"
	}
	foreach nick $::u(vop) {
		puts $fp "<span style='font-color:yellow;'>+$nick</span><br />"
	}
	foreach nick $::u(nop) {
		puts $fp "<span style='font-color:green;'>$nick</span><br />"
	}
	close $fp
}

##########
# Putlog #
##########
#
putlog "nick list par CrazyCat"


Répondre
#3
J'ai donc modifié comme indiqué, les catégories @ % et normaux sont ien classées, mais je n'ai pas la couleur et
je me retrouve avec plusieurs fois les pseudos.

comme ceci

@niubot
@popcorn
+loulou
+joe
+sarah
cindy
@niubot
@popcorn
+loulou
+joe
+sarah
cindy
@niubot
@popcorn
+loulou
+joe
+sarah
cindy

Environ 10 fois lol
Répondre Avertir
#4
En fait je pense que quand quelqu'un join ou quit le chan, ca ecrit dans liste.html à
la suite de la précedente ecriture, ca doit etre pour ca que ca apparait plusieurs fois.
Répondre Avertir
#5
Ouais, j'ai un peu foiré mon code, j'ajoute toujours dans les listes sans retirer... Tout àa à cause d'une erreur d'initialisation (placée au mauvais endroit).
Et pour les couleurs, c'est color et non pas font-color qu'il faut utiliser.
Ce qui donne donc:
tcl
###################################
########### Liste users ###########
###################################
 
set canal "#accueil"
set fichier "/home/loulou/public_html/liste.html"
 
bind join - "$canal *" list:join
bind part - "$canal *" list:part
bind sign - "$canal *" list:quit
 
proc list:join {nick uhost handle chan} { list:log; }
proc list:part {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}
proc list:quit {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}
 
proc list:log {} {
   set ::u(op) {}
   set ::u(hop) {}
   set ::u(vop) {}
   set ::u(nop) {}
    foreach cnick [chanlist $::canal] {
        if { $cnick == $::botnick } { continue; }
        if { [isop $cnick $::canal] == 1 } {
            lappend ::u(op) $cnick
        } elseif { [ishalfop $cnick $::canal] == 1 } {
            lappend ::u(hop) $cnick
        } elseif { [isvoice $cnick $::canal] == 1 } {
            lappend ::u(vop) $cnick
        } else {
            lappend ::v(op) $cnick
        }
    }
    save:log
}
 
proc save:log {} {
   set fp [open $::fichier w]
   foreach nick $::u(op) {
      puts $fp "<span style='color:red;'>@$nick</span><br />"
   }
   foreach nick $::u(hop) {
      puts $fp "<span style='color:blue;'>%$nick</span><br />"
   }
   foreach nick $::u(vop) {
      puts $fp "<span style='color:yellow;'>+$nick</span><br />"
   }
   foreach nick $::u(nop) {
      puts $fp "<span style='color:green;'>$nick</span><br />"
   }
   close $fp
}
 
##########
# Putlog #
##########
#
putlog "nick list par CrazyCat"


Répondre
#6
Ah oui Impeccable, les pseudos sont en couleurs.

Par contre j'aimerais savoir comment faire pour avoir une mise en page pour cette liste.html ?

Mettre un fond de la page principale genre en noir
Que les pseudos soit incorporés dans un tableau
Avoir le nombre total d'users connectés

?????
Répondre Avertir
#7
Heu, la tu as toutes les bases.

Modifie save:log pour faire toute la mise en forme html que tu veux, ajoute un compteur, ... Je ne vais pas tout faire non plus, le html c'est simple comme <h1>hello world</h1>
Répondre
#8
Non je me doute bien que tu vas pas tout faire,
c'est juste pour savoir si c'est faisable à partir de ce tcl, d'integrer dedans une mise
en forme pour la page html aussi.

Mais disont que jme demande un peu comment faire car pour integrer les pseudos
dans un tableau, vu qu'on ne sais pas combien il ya d'users comment definir le nombres de lignes et de colones du tableau lol.
Répondre Avertir
#9
J'ai testé de mettre le code html pour le fond

Code :
<div style='background:black;'>  </div>

Mais ca ne prend pas lol.
Répondre Avertir
#10
Bon, avant que ça ne me fatigue:
Le script tcl
Code :
###################################
########### Liste users ###########
###################################

set canal "#accueil"
set fsource "/home/loulou/liste.tpl"
set fichier "/home/loulou/public_html/liste.html"

bind join - "$canal *" list:join
bind part - "$canal *" list:part
bind sign - "$canal *" list:quit

proc list:join {nick uhost handle chan} { list:log; }
proc list:part {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}
proc list:quit {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}

proc list:log {} {
   set ::u(op) {}
   set ::u(hop) {}
   set ::u(vop) {}
   set ::u(nop) {}
   set ::count 0
    foreach cnick [chanlist $::canal] {
        if { $cnick == $::botnick } { continue; }
        incr ::count
        if { [isop $cnick $::canal] == 1 } {
            lappend ::u(op) $cnick
        } elseif { [ishalfop $cnick $::canal] == 1 } {
            lappend ::u(hop) $cnick
        } elseif { [isvoice $cnick $::canal] == 1 } {
            lappend ::u(vop) $cnick
        } else {
            lappend ::v(op) $cnick
        }
    }
    save:log
}

proc save:log {} {
   set fp [open $::fichier w]
   set fi [open $::fsource r]
   set tpl [read $fi -nonewline $fi]
   close $fi
   $ulist = ""
   foreach nick $::u(op) {
       append $ulist "<tr><td style='color:red;'>@$nick</td></tr>\n"
   }
   foreach nick $::u(hop) {
      append $ulist "<tr><td style='color:blue;'>%$nick</td></tr>\n"
   }
   foreach nick $::u(vop) {
      append $ulist "<tr><td style='color:yellow;'>+$nick</td></tr>\n"
   }
   foreach nick $::u(nop) {
      append $ulist "<tr><td style='color:green;'>$nick</td></tr>\n"
   }
   regsub -all %count $tpl $::count tpl
   regsub -all %channel $tpl $::canal tpl
   regsub -all %list $tpl $ulist tpl
   fputs $fp $tpl
   close $fp
}

##########
# Putlog #
##########
#
putlog "nick list par CrazyCat"

Le fichier template
A mettre dans /home/loulou/liste.tpl
Code :
<html>
<head>
<title>Les %count connectés sur %channel</title>
<style>body { background-color: black; }</style>
</head>
<body>
<table>
    <tr><th>Il y a %count personnes sur %channel</th></tr>
    %list
</table>
</body>
</html>
Et je n'aide plus sur ce sujet, tu as toute la solution.
Répondre
#11
Merci beaucoup CrazyCat,
c'est juste ce que je voulais savoir, ma question savoir si on pouvais integrer la mise en page directement dans le tcl de base.

Mais apparement voila il fallait avoir un autre fichier le template.

Je vais voir maintenant pourquoi ca n'ecrit plus dans mon fichier liste.html et que ca donne une erreur

Code :
Tcl error [list:join]: wrong # args: should be "read channelId ?numChars?" or "read ?-nonewline? channelId"

Merci encore je vais me pencher dessus maintenant.
Répondre Avertir
#12
Voila j'ai modifié dans le fichier liste.tpl
pour faire la mise en page.

Par contre je n'avais pas fait attention, mais il y a un soucis au niveau de l'ecriture des pseudos dans le fichier et du compteur.

Exemple :
sur Chanel il y a déjà les personnes suivantes.
Niubot
popcorn

quand on consulte la page elle indique 2 personnes sur le canal, mais elle n'a ecrit que le pseudo de niubot.

si Cindy75 join le canal, la page indique 3 personnes sur le canal, mais il y a toujours que le pseudo de niubot d'ecrit.

et seulement si une autre personne join le canal, là la page indique 4 personnes sur le canal et elle écrit le pseudo de 2 personnes. Le pseudo des 2 premières personnes qui étaient déjà sur le canal.

Je ne vois pas de quoi ca peut venir.

Si quelqu'un a une idée, je suis preneur.

Merci
Répondre Avertir
#13
Effectivement, il y avait quelques erreurs de frappe.

Celui-ci est testé et donc fonctionnel.
Code :
###################################
########### Liste users ###########
###################################

set canal "#accueil"
set fsource "/home/loulou/liste.tpl"
set fichier "/home/loulou/public_html/liste.html"

bind join - "$canal *" list:join
bind part - "$canal *" list:part
bind sign - "$canal *" list:quit

proc list:join {nick uhost handle chan} { list:log; }
proc list:part {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}
proc list:quit {nick uhost handle chan text} {
    if {$nick != $::botnick} { list:log; }
}

proc list:log {} {
   set ::u(op) {}
   set ::u(hop) {}
   set ::u(vop) {}
   set ::u(nop) {}
   set ::count 0
    foreach cnick [chanlist $::canal] {
        if { $cnick == $::botnick } { continue; }
        incr ::count
        if { [isop $cnick $::canal] == 1 } {
            lappend ::u(op) $cnick
        } elseif { [ishalfop $cnick $::canal] == 1 } {
            lappend ::u(hop) $cnick
        } elseif { [isvoice $cnick $::canal] == 1 } {
            lappend ::u(vop) $cnick
        } else {
            lappend ::u(nop) $cnick
        }
    }
    save:log
}

proc save:log {} {
   set fp [open $::fichier w]
   set fi [open $::fsource r]
   set tpl [read -nonewline $fi]
   close $fi
   set ::ulist ""
   foreach nick $::u(op) {
       append ::ulist "<tr><td style='color:red;'>@$nick</td></tr>\n"
   }
   foreach nick $::u(hop) {
      append ::ulist "<tr><td style='color:blue;'>%$nick</td></tr>\n"
   }
   foreach nick $::u(vop) {
      append ::ulist "<tr><td style='color:yellow;'>+$nick</td></tr>\n"
   }
   foreach nick $::u(nop) {
      append ::ulist "<tr><td style='color:green;'>$nick</td></tr>\n"
   }
   regsub -all %count $tpl $::count tpl
   regsub -all %channel $tpl $::canal tpl
   regsub -all %list $tpl $::ulist tpl
   puts $fp $tpl
   close $fp
}

##########
# Putlog #
##########
#
putlog "nick list par CrazyCat"
Répondre
#14
Ca marche impec quand quelqu'un rentre ca ajoute bien,
mais quand une personne part ou quit ca ne l'enleve pas de la liste.

Elle s'enleve de la liste si quelqu'un d'autre join ou quit le chan bizare.


EDIT: En fait je rectifie, ca enleve bien le pseudo mais pas immediatement faut attendre un peu, alors que quand un pseudo join le salon et qu'on actualise la page il est déja ecrit.

ENVIRON 5 minutes apres il s'enleve de la liste
Répondre Avertir
#15
Par contre, Je me posais une question,
dans le
tcl
set canal "#accueil"



Il n'est pas possible de rajouter un autre salon ??

Car du coup je me disais peut etre mettre sur la meme page html la liste d'un autre salon ???
Répondre Avertir


Atteindre :


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