Timer / instructions à exécuter périodiquement [Résolu]

Messages postés
10
Date d'inscription
vendredi 29 décembre 2000
Statut
Membre
Dernière intervention
27 mai 2009
- - Dernière réponse : cs_wims
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
- 14 déc. 2008 à 17:05
Bonjour,

je souhaiterais qu'un bot, à l'aide d'un fichier texte contenant déjà un certain nombre de phrases, puisse à intervalles régulier adresser la parole à un chatteur présent sur le salon et choisi au hasard dans la liste des nicks.

Alors pour choisir un chatteur au hasard je n'ai pas eu de soucis, pour l'instant j'ai écrit ça :

  /set %nbpseudos $nick($chan,0)
  /set %n $rand(1,%nbpseudos)
  if ($nick($chan,%n) != NomDuBot) {
msg $chan $nick($chan,%n) $read(phrases.txt)
}

Mon problème est de faire répéter l'ensemble de ces instructions à intervalles réguliers : si je mets un timer avant msg, il s'adressera toujours au même puisque les variables ne seront pas réévaluées. Comment puis-je procéder ?

Merci d'avance :-)
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
3
Merci
Regarde ce sujet pour savoir comment evalue les choses au bon moment :) :
http://www.ircfr.com/forum/sujet-READ-TIMER_1236367.aspx#2

Sinon evite d'utiliser des variables globales (/set) quand c'est pas necessaire et utilise des variables locales (/var)
Pour etre sur que ton pseudo aleatoire n'est jamais celui du bot, execute une boucle :

While ($nick($chan,$r(1,$nick($chan,0))) != $me)
;ensuite tu sais que le bon pseudo est le resultat de la derniere condition, soit $v1
var %randpseudo = $v1

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 145 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_wims
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
3
Merci
Euh la condition de la while est plutot
While ($nick($chan,$r(1,$nick($chan,0))) == $me)

Ce qui se traduit par tant que le pseudo aleatoire est egal au pseudo de ton bot, alors on ne fait rien, mais la boucle continu, et des que le pseudo aleatoire est different du bot, on sortira de cette boucle.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 145 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_wims
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
3
Merci
Euh ouais, il faut revoir un peu comment faut faire, tu ne montre qu'une ligne a chaque fois, je peux pas vraiment t'aider, c'est quoi ce $randpseudo ?
Voici ce que jte propose :

tu fait un alias qui dis que tant que le pseudo aleatoire qu'on tente de retourne est celui du bot, tu continu de changer ce pseudo et quand cette condition deviens fausse, on sort de la boucle et on recupere la valeur de ce pseudo ds $v1, ca se resume a ca en fait :

alias rnick While ($nick($$1,$r(1,$nick($$1,0))) == $me) | return $v1
et ensuite tu apelle ton timer comme ca :

/.timer1 0 30 /msg $chan $!rnick($chan) $!read(phrases.txt)

l'alias rnick prend en parametre le salon, ($$1 permet d'arreter le code si $1 est  $null) et retourne le pseudo aleatoire.Comme tu veux pas qu'il soit evalue par le timer mais par le /msg tu met un ! comme pour le $read.
Dans $!rnick($chan),  $chan ne sera evalue egalement qu'au moment du /msg, ce n'est pas genant, mais pour que le ! n'affecte pas les parametres il suffit de les espacer : $!rnick(  $chan )

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 145 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_wims
Messages postés
10
Date d'inscription
vendredi 29 décembre 2000
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
Ok, je vois, merci beaucoup, ça m'a permis d'avancer un peu :-)

par contre si ensuite je rajoute mon timer, du genre :

timer1 0 30 /msg $chan $randpseudo $!read(phrases.txt)

la phrase qu'il dit change bien à chaque fois. Mais s'il ne s'adresse pas à lui-même, il s'adresse par contre toujours au même :o(
Commenter la réponse de Hosko59
Messages postés
10
Date d'inscription
vendredi 29 décembre 2000
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
Ok, merci beaucoup pour toutes ces explications très bien détaillées ;o)
ça marche impec ainsi !

Alors pour répondre à ta question, le $randpseudo, c'était celui que toi même tu m'avais suggéré de mettre, dans ta première réponse, après le while ;o)
Donc la ligne suivante que j'ai écrite à mon tour était ce que j'avais ajouté à la suite de tes consignes ;o)

Merci beaucoup en tout cas !
Commenter la réponse de Hosko59
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
0
Merci
Ah ok, mais donc c'etais une variable %randpseudo et non l'apel de l'alias customise (comme rnick maintenant)
Commenter la réponse de cs_wims