Worlddmt - statistique v 1.0

Soyez le premier à donner votre avis sur cette source.

Vue 2 893 fois - Téléchargée 129 fois

Description

Salut
C'est un adon de statistique chan et chatteurs.
Donc vous aurez :

- Les statistiques de chaque chan donc totaux d'événements
- Les statistiques de chaque chatteurs
- Top chatteurs dans chaque chan
- Le top chan selon ne nombre d'événements, le plus visité, ou le plus bavard
- la possibilité d'envoyer les infos statistiques des événements du chan, ou les tops chatteurs, sur le chan

Bref ça peut ne pas être très utile pour certain et utile pour d'autres, mais mon but est de scripter et apprendre et avoir des avis.

J'utilise dans ce code des aliases qui peuvent être utilisé par plusieurs événements au lieu de faire plusieurs répétitions

J'utilise aussi les identifieur, $*, $regsubex, $event et les hash tables

Vous allez surement me parlé de $ialchan dans ban/unban, que c'est sans who #
c'est juste parce que si le chan a trop de chatteurs ça sera lourd et pour attendre la réponse ça sera moche

NB: cet addon ne doit pas etre installé dans un bot join/part si non a chaque join part vous perdez les données

a vous de voir le reste.

Source / Exemple :


; Le menu

menu status,nicklist,menubar {
  -
  Wstatistique V1.0
  .Configurer:wstatinfo
  .Désinstaller:dstatinfo
  -
}

; Dialog - Le dialog

dialog wstatch {
  title Statistique des chans
  size -1 -1 367 349
  option pixels
  tab Stat général, 1, 4 112 360 240
  tab Stat Chan, 2
  tab Stat chatteurs, 3
  list 4, 160 141 200 200, tab 1 size
  combo 5, 12 168 110 70, tab 1 drop sort
  button envoyer sur le chan, 6, 12 218 110 20, tab 1
  text Statistique generales des chans, 7, 10 143 147 15, tab 1
  text Le top des chans, 8, 11 143 100 15, tab 2
  radio par nombre d'evenements, 9, 12 163 140 17, tab 2
  radio par nombre de visites, 10, 12 180 140 17, tab 2
  radio par le plus parlé, 11, 12 197 140 17, tab 2
  text Les chans sont classés par ordre croissant selon l'option sélectionné, 12, 13 248 147 45, tab 2
  list 13, 160 141 200 200, tab 2 size
  text Statistique des chatteurs, 14, 10 143 125 15, tab 3
  combo 15, 12 168 110 70, tab 3 drop sort
  radio Top des chatteurs, 16, 10 198 120 17, tab 3
  button envoyer sur le chan, 17, 12 218 110 20, tab 3
  radio Evenement des chatteurs, 18, 10 256 150 17, tab 3
  combo 19, 12 276 110 70, tab 3 drop sort
  list 20, 160 141 200 200, tab 3 size
  icon 21, 0 0 365 111, statistique.gif, 0 noborder
}

; Dialog - les evenements du dialog

on *:dialog:wstatch:*:*:{
  if ($devent == init) {
    didtok $dname 5,15 32 $hget(chan,chan)
    did -c $dname 5,9,15,16 1
    nicklist
    did -c $dname 19 1
    winfoch
    wtopchi
    wtopn
  }
  if ($devent == sclick) {
    if ($did == 5) winfoch
    elseif ($did == 6) wenvoi
    elseif ($istok(9.10.11,$did,46) wtopch
    elseif ($did == 15) {
      did -r $dname 19
      loadbuf -o $dname 19 $did(15).seltext
      did -c $dname 19 1
      $iif($did(16).state,wtopn,wlist)
    }
    elseif ($did == 16) wtopn
    elseif ($did == 17) wenvoi
    elseif ($did == 18) wlist
    elseif ($did == 19) && ($did(18).state) wlist
  }
}

; Dialog - Alias - alias pour l'ouverture du dialog

alias wstatinfo dialog $iif($dialog(wstatch),-v,-m wstatch) wstatch

; Dialog - Alias - alias pour envoyer les resultats vers le chan

alias wenvoi {
  var %id $iif(($did(16).state) && ($did == 17),20,$iif(($did == 6),4))
  if (%id) {
    tokenize 149 $iif(%id == 4,Statistique des evenements de $+($chr(3),7,$chr(44),0,$did(5).seltext,$chr(3)),$reptok($wd(%id,1),$wildtok($wd(%id,1),#*,1,32),$+($chr(3),7,$chr(44),0,$wildtok($wd(%id,1),#*,1,32),$chr(3)),1,32)) $+($chr(3),12,$chr(44),0,$wd(%id,2) $wd(%id,3),$chr(3)) ? $iif(%id == 4,$iif($hget($did(5).seltext,evenement),ce chan a $+(eut,$chr(3),4,$chr(44),0) $ifmatch $+($chr(3),12,$chr(44),0,evenement),ce chan n'a eut),$iif($did(%id).lines > 13,Les TOP 10 sont,Le resultat)) $+ $regsubex($str(x,$did(%id).lines),/x/g,$iif($wd(%id,\n) != $chr(45),$iif((\n > 3) && (\n < 24),$chr(44) $+($chr(3),14,$chr(44),0,$wd(%id,\n),$chr(3),4,$chr(44),0))))
    msg $iif(%id == 4,$did(wstatch,5).seltext,$did(wstatch,15).seltext) $+ 12,0 $*
  }
}
alias wd return $did(wstatch,$1,$2)wd return $did(wstatch,$1,$2)

; Dialog - Alias - ces 4 alias permettent de remplir les lists du dialog pour voir les resultats des données demandé

; pour les info du chan

alias winfoch {
  if ($did(5)) {
    didtok -ra wstatch 4 149 $+(info chan $did(5).seltext,?,$hget($did(5).seltext,debut),?,au $date à $time)
    var %event text notice action join part voice devoice op deop kick ban unban
    didtok wstatch 4 149 $regsubex($str(x,$wildtok(%event,*,0,32)),/x/g,$iif($hget($did(5).seltext,$gettok(%event,\n,32)),$gettok(%event,\n,32) $ifmatch) $+ $chr(149))
    if ($did(4).lines < 4) did -a wstatch 4 Aucun evenement!!
  }
  else did -ra $dname 4 La liste des chans est vide!!
}

;_________________________fin winfoch_______________________________

; pour la liste des top chan

alias wtopchi {
  did -ra wstatch 13 top chan $did(9)
  didtok wstatch 13 32 $wch(9)
  if ($did(13).lines < 2) did -a wstatch 13 Aucun resultat trouvé!!
}
alias wtopch {
  did -ra wstatch 13 top chan $did($v1)
  didtok wstatch 13 32 $wch($v1)
  if ($did(13).lines < 2) did -a wstatch 13 Aucun resultat trouvé!!
}
alias wch {
  var %ch $hget(chan,chan),%i $wildtok(%ch,*,0,32),%final
  if ($1 == 9) var %v evenement
  elseif ($1 == 10) var %v join
  elseif ($1 == 11) var %v text
  tokenize 32 %ch
  while (%i) var %r %r $iif($hget( $eval($ $+ %i,2),$eval(%v,2)),$ifmatch $eval($ $+ %i,2)) $+ $chr(149),%i %i - 1
  %final = $sorttok(%r,149,nr)
  return $regsubex($str(x,$wildtok(%final,*,0,32)),/x/g,$gettok($gettok(%final,\n,149),2,32) $+ $chr(32))
}

;_________________________fin wtopch_______________________________

; pour les info d'evenement sur chaque pseudo

alias wlist {
  if ($did(19)) {
    didtok -ra wstatch 20 149 $+(info evenement de $did(19).seltext,?,sur le chan $did(15).seltext,?,$hget($did(15).seltext,debut),?,au $date à $time)
    var %event join part voice devoice op deop kick ban unban
    didtok wstatch 20 149 $regsubex($str(x,9),/x/g,$wread($gettok(%event,\n,32)) $iif($wread($gettok(%event,\n,32)) > 1,$gettok(%event,\n,32) $+ s,$iif($wread($gettok(%event,\n,32)),$gettok(%event,\n,32))) $+ $chr(149))
    if ($did(20).lines < 5) did -a wstatch 20 Aucun resultat trouvé!!
  }
  else did -ra $dname 20 La liste des chatteurs est vide!!
}
alias wread return $iif($hget($did(19).seltext $+ $did(15).seltext,$1),$ifmatch)

;__________________________fin wlist_______________________________

; pour la liste des top des chatteurs dans chaque chan

alias wtopn {
  if ($did(15)) {
    didtok -ra wstatch 20 149 $+(les Top chatteurs sur $did(15).seltext,?,$hget($did(15).seltext,debut),?,au $date à $time)
    wnk
    if ($did(20).lines < 4) did -a wstatch 20 Aucun resultat trouvé!!
    if $exists(xx.txt) {
      .remove xx.txt
      .remove xy.txt
    }
  }
  else did -ra $dname 20 La liste des chans est vide!!
}
alias wnk {
  var %i $lines($did(15).seltext),%n 1,%ii
  while (%i) {
    if ($hget($did(15).seltext,$read($did(15).seltext,%i))) {
      write xx.txt $read($did(15).seltext,%i) avec $ifmatch $iif($ifmatch > 1,mots,mot)
    }
    dec %i
  }
  if $exists(xx.txt) { filter -tu 3 32 xx.txt xy.txt }
  else return
  %ii = $lines(xx.txt)
  while (%ii) {
    did -a wstatch 20 $chr(45)
    did -a wstatch 20 $iif(%n == 1,%n $+ er,%n $+ e) - $read(xy.txt,%ii)
    dec %ii
    inc %n
  }
}

;__________________________fin wtopn_______________________________

; Evenement - Alias - ici on verifie si l'evenement me conserne

alias edata {
  if ($knick == $me) || (($event == part) && ($nick == $me)) {
    var %sup $remtok($hget(chan,chan),#,1,32)
    hadd -m chan chan %sup
    hfree #
    remove #
  }
  else sdata
}

; Evenement - Alias - ici on ajoute les données selon l'evenement effectué

alias sdata {
  var %val $calc($hget(#,$event) + 1),%vale $calc($hget(#,evenement) + 1)
  hadd -m # $event %val
  hadd -m # evenement %vale
  cnick
  nchan
}

; Evenement - Alias - ici on ajoute les données pour les infos des chatteurs selon l'evenement effectué

alias cnick {
  var %valn
  if ($istok(join part,$event,32)) {
    %valn = $calc($hget($nick $+ #,$event) + 1)
    hadd -m $nick $+ # $event %valn
  }
  elseif ($event == kick) {
    %valn = $calc($hget($knick $+ #,$event) + 1)
    hadd -m $knick $+ # $event %valn
  }
  elseif ($istok(op deop,$event,32)) {
    %valn = $calc($hget($opnick $+ #,$event) + 1)
    hadd -m $opnick $+ # $event %valn
  }
  elseif ($istok(voice devoice,$event,32)) {
    %valn = $calc($hget($vnick $+ #,$event) + 1)
    hadd -m $vnick $+ # $event %valn
  }
  elseif ($istok(ban unban,$event,32)) {
    var %i $ialchan($banmask,#,0).nick,%valn
    while (%i) {
      %valn = $calc($hget($ialchan($banmask,#,%i).nick $+ #,$event) + 1)
      hadd -m $ialchan($banmask,#,%i).nick $+ # $event %valn
      dec %i
    }
  }
}

; Evenement - Alias - cette alias verifie si le pseudo existe dans la liste avant de l'ajouter

alias nchan {
  if $exists(#) {
    var %i $lines(#)
    if ($nick != ChanServ) {
      while (%i) {
        if ($nick == $read(#,%i)) {
          var %r 1
          if (%r) return
        }
        dec %i
      }
      write # $nick
    }
  }
  else write # $nick
}

; Evenement - Alias - cette alias efface les hash tables qu'on a ajouté

alias remh {
  hfree chan
  tokenize 32 $hget(chan,chan)
  hfree $*
  var %i 3
  while (%i) {
    var %l $lines($eval($ $+ $eval(%i,2),2))
    while (%l) {
      hfree $read($eval($ $+ $eval(%i,2),2),$eval(%l,2)) $+ $eval($ $+ $eval(%i,2),2)
      dec %l
    }
    dec %i
  }
  remove $*
}

; Evenement - les evenements

on *:join:#:{
  if ($nick == $me) {
    hadd -m chan chan $hget(chan,chan) #
    hadd -m # debut du $date à $time
  }
  else sdata
}

on *:text:*:#:{
  var %token $calc($gettok($hget(#,$nick),2,32) + $wildtok($strip($1-),*,0,32))
  hadd -m # $nick %token
  sdata
}

on *:part:#:edata
on *:kick:#:edata

on *:ban:#:sdata
on *:unban:#:sdata
on *:op:#:sdata
on *:deop:#:sdata
on *:voice:#:sdata
on *:devoice:#:sdata
on *:invite:#:sdata
on *:notice:*:#:sdata
on *:action:*:#:sdata

on me:*:quit:remh
on *:disconnect:remh

on *:load:return $input(WorldDMT - Statistique V1.0 a été bien installé.,o,WorldDMT - Wstat V1.0)
alias dstatinfo {
  tokenize 32 $hget(chan,chan)
  .remove $*
  var %x $input($str($chr(1),4) Desinstallation terminé. $chr(10) Merci d'avoir bien utilisé WorldDMT - Statistique V1.0.,oi,WorldDMT - Wstat V1.0)
  .unload -rs $scriptdirwstatchan
}

Conclusion :


Téléchargez le zip, loadez le fichier "wstatchan" qui se trouve dans le dossier WorldDMT

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
871
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
la source a jour

ajout de l'alias remh
Messages postés
871
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
ok merci bro je verrai ça je change dejà la source @+ ^^
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Encore une fois $istok serait plus propre :

if ($istok(join part,$event,32))

mais ton isin marchera parfaitement comme tu l'as dis
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Mdr, et tu dis ca comme si c'etais normal "oui je j'efface toutes vos hash table et alors" ?

Il faut bien que tu comprenne qu'effacer toutes les hash tables n'est pas acceptable, tu doit pas repondre a cote, tu doit faire en sorte de pas ecrire ces lignes, c'est ton code qui est mal foutu, tu doit effacer uniquement les tables que tu as cree, pas les autres, t'es en plein reve, tant que tu fais ca, j'demande a l'admin qui voit ca d'effacer ta source.

Idem pour le remove $*, je sais tres bien ce que tu cherches a faire...
Je n'ai pas dis que ca ne marchais pas ni que ca effacais les hash table..., c'est juste inacceptable, relis mon commentaire, ton code permet plus ou moins d'effacer nimporte quel fichier, il suffit de faire ajouter la ou il faut (ds la table, ds le bon item) les fichiers (sans espace ok, mais quand meme inacceptable =)).Idem, ton code devrait etre efface tant qu'il y a ces lignes.
La ligne 55, tu fait if ($did N) || ($did N1) || (...)
tu peux remplacer ca par if ($istok(N.N1.N2...,$did,46)
et pour les id 6 et 17 tu fait exactement la meme command donc tu peux faire pareil

La ligne 90, je peux pas te dire si c'est mal fait, mais je trouve ca super bourrin, beaucoup trop, et illisible, mais c'est ton code, c'est toi qui gere.
Messages postés
871
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
pour la ligne 221
juste une precision esque ça peut bien etre

if ($event isin join part) ??

puisqu'il n'y a pas 2 event qui se resemblent
c'est possible dans ce cas nn?

merci
Afficher les 17 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.