Communauté Eggdrop
Compteur de mots - Version imprimable

+- Communauté Eggdrop (https://forum.eggdrop.fr)
+-- Forum : Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum : Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Sujet : Compteur de mots (/showthread.php?tid=1057)



Compteur de mots - heretoc - 18/10/2011

Bonjour,
Ayant decider de reprendre legerement le TCL, j'avais pour idée de faire un "compteur de mots" hors je ne voit pas du tout comment faire, même après recherche dans le forum (ou alors je suis pas doué).

Plus l'utilisateur parle sur un salon, plus sa augmente sont compteur de mots dans une base de donnée (non defini) par salon.

Via une commande du style "!mots pseudo" le robot effectuerais une requete afin de me sortir le total des mots que l'utilisateur à dit sous la forme suivante:
"!mots blabla"
> Blabla Xmots sur #chan1
> Blabla Wmots sur #chan2


Je m'excuse d'avance pour l'orthographe.
Merci aux gens qui prenne la peine de lire le sujet


RE: Compteur de mots - CrazyCat - 18/10/2011

Il te faut d'abord définir ta base, ou du moins sur quoi elle sera faite (fichier, MySQL, SQLite, ...).
Si c'est une base de type MySQL, une structure simple peut suffire:
Code :
nick => varchar(32),
chan => varchar(50),
compteur => bigint(8),
UNIQUE KEY (nick, chan)



RE: Compteur de mots - aliasangelius - 18/10/2011

Yep Heretoc,

Comment vas-tu depuis le temp poto ?
Tien regarde si ceci peut t'aider ou pas : stats


RE: Compteur de mots - heretoc - 18/10/2011

J"ai regarder mais j'aimerais créer un code beaucoup plus "simpliste"
PS: je vais bien mais ce n'est pas forcement le lieu pour parler de cela


RE: Compteur de mots - djkenny - 18/10/2011

salut,

pour faire une structure simple
en tcl, je te conseil d utiliser la commande "dict" avec un array
par exemple:
TCL
bind pubm - * stat:incr
proc stat:incr {nick host hand chan arg} {
  variable stat
  set $chan [string tolower $chan]
  if ![info exists stats($nick)] {
    set stat($nick) [dict create]
  }
  dict incr stat($nick) $chan [llength $arg]
}
 
bind pub - !mots stat:return
proc stat:return {nick host hand chan arg} {
  variable stat
  set pseudo [lindex $arg 0]
  if [info exists stats($pseudo)] {
    foreach list [dict get $stat($pseudo)] {
      putserv "PRIVMSG $chan :$pseudo à dit [lindex $list 1] sur [lindex $list 0]"
    }
  } else {
    putserv "PRIVMSG $chan :$pseudo inconnu"
  }
}


avec un "bind save" pour sauvegarder toutes les heures dans un fichier ou sur une base sql (au choix)

edit: ne pas oublier de charger le fichier (ou la base de donnée sql) au chargement du tcl


RE: Compteur de mots - heretoc - 18/10/2011

Daccord, merci de toutes ces indications, je vais faire surement en SQL afin de pouvoir si le coeur m'en dit retransmettre facilement les informations sur une page internet.
Juste est-il possible d'avoir une explication sur le "dict" car j'ai pas forcement compris sont fonctionnement à partir du wiki : http://wiki.eggdrop.fr/Dict


RE: Compteur de mots - djkenny - 18/10/2011

c'est une manière différente de gérer une variable en fait.
en gros la ta variable stat(pseudo) contiendra
"#salon1 35 #salon2 12 salon3 50"
si tu fais
TCL
dict get $stat(pseudo) #salon2


ça te retournera la valeur associée donc 12


RE: Compteur de mots - heretoc - 18/10/2011

Daccord, merci de la precision


RE: Compteur de mots - CrazyCat - 18/10/2011

heretoc a écrit :Daccord, merci de toutes ces indications, je vais faire surement en SQL afin de pouvoir si le coeur m'en dit retransmettre facilement les informations sur une page internet.
Juste est-il possible d'avoir une explication sur le "dict" car j'ai pas forcement compris sont fonctionnement à partir du wiki : http://wiki.eggdrop.fr/Dict

Attention, en passant par SQL, le système de comptage sera différent. En te basant sur ma structure de base initiale, il te faudra 2 requètes chaque fois (un select et un replace/insert).
Alors qu'avec du tcl pur et dict, ça se fait en une passe et c'est autonome.


RE: Compteur de mots - djkenny - 18/10/2011

rien n’empêche d'utiliser dict et de sauvegarder la table sql toutes les X minutes, plutôt que de sauvegarder chaque changement.