Compteur de mots
#1
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
Répondre
#2
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)
Répondre
#3
Yep Heretoc,

Comment vas-tu depuis le temp poto ?
Tien regarde si ceci peut t'aider ou pas : stats
Répondre Avertir
#4
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
Répondre
#5
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
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#6
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
Répondre
#7
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
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#8
Daccord, merci de la precision
Répondre
#9
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.
Répondre
#10
rien n’empêche d'utiliser dict et de sauvegarder la table sql toutes les X minutes, plutôt que de sauvegarder chaque changement.
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir


Atteindre :


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