Bot

Signaler
Messages postés
5
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
25 octobre 2007
-
Messages postés
5
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
25 octobre 2007
-
Bonjour, j'aimerais equipé mon bot mirc d'un anti-idl , je voudrais donc
qu'il agisse sur un salon noté en txt voici mon code
on *:join:#:{
if ( $read(remotes/chan.txt,s,$chan) ) {
timer $+ $nick 1 15 kbidle $nick $chan
}

7 réponses

Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

elo

voudrais tu que le bot ait un anti-idle a lui ou un anti-idle salon ?
je m'explique.

l'anti-idle sur le bot lui-meme ferait en sorte de ne pas laisser son idle grandir alors que l'anti-idle salon surveillerait tous les idle de toutes les personnes du salon en question.

pour les 2 cas, je pense avoir deja vu ce genre de code sur le site.

cordialement,
TropNul
Messages postés
5
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
25 octobre 2007

Je veux que soir sur le salon . De plus mon but etant de comprendre
bien les codes donc je voudrais faire marcher le mien.
Merci a vous.
Messages postés
435
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
17 octobre 2008

Bonjour,
Bah, te suffit sur chak on text de reseter ton timer et de le relancer, par contre faut que tu penses à gerer les trucs genre renick,kick,quit,part etc... pour mettre à jours tes timers ou les supprimer le cas échéant.
fin voila essaye déja d'avancer avec ces indications.
ISoKa
Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

Il faut aussi que tu distingues les cas d'idle suivant:

> idle salon

>> se recupere avec l'identifieur $nick(#salon,n).idle avec n variant de 1 jusqu'au nombre de pseudonyme present dans le #salon. quand n vaut 0, l'identifieur renvoit le nombre de pseudonyme du #salon.

dans ce cas ci, le probleme se resout avec un seul timer infini qui calcule toutes les X secondes, l'idle de tous les pseudos de #salon. cet idle est l'idle salon du pseudonyme et peut etre different du vrai idle (serveur) de celui-ci. c'est a dire que cet idle est calcule par mirc des lors que le pseudonyme rejoint #salon. donc, l'idle serveur peut evidemment etre tout autre a ce moment la. au moment ou le pseudonyme 'parle' dans #salon alors l'idle salon est nul tout comme l'idle serveur.

> idle serveur

>> ne se recupere qu'avec un whois sur le pseudonyme voulu. (dans la RAW 317 si mes souvenirs sont bons ;))
pour ce cas ci, ca se complique si le salon est compose de plus de 99 personnes. en effet, il apparait que mirc ne peut gerer plus de 99 timers en meme temps. bien que pour les petits salons, le whois toutes les X secondes sur tous les pseudonymes du salon serait faisable, il existera toujours le probleme de la 'queue' de whois, qui, si elle n'est pas existante, ferait fort probablement, planter mirc. ou du moins, le ferait freeze. donc, il faudra inclure une queue de whois a chaque recuperation des idle pour que cette fonction soit efficace et fiable.

---

en ce qui concerne le code que tu veux utiliser, a savoir:

on *:join:#:{

  if ( $read(remotes/chan.txt,s,$chan) ) {

    timer $+ $nick 1 15 kbidle $nick $chan

  }

il faudrait le modifier ou alors nous montrer l'alias kbidle (sans nul doute est un kickban des lors qu'il y'a idle). quoiqu'il en soit, dans l'etat ou est le code, ca ne fonctionnera pas.

je vais te proposer un code qui recupere l'idle salon des pseudos et le stock dans une hash table. j'ai prefere utilise une table pour eviter la surcharge de %variables pour un gros salon.

alias CalcIdle {
  ; Parametres: $1 = #salonCible
  Var %ch = $1 , %idle , %n  Var %i 1 , %j $nick(%ch,0)
  If $hget(h.idle) { HFree $ifmatch }
  While (%i <= %j) {    Var %idle $nick(%ch,%i).idle , %n $nick(%ch,%i)
    HAdd -m h.idle %i %ch %n %idle
    Inc %i
  }
  KBIdle
}

alias KBIdle {  Var %i 1 , %j $hget(h.idle,0).item
  Var %lim = 3600
  While (%i <= %j) {
    Var %dat = $hget(h.idle,%i)
    If ($gettok(%dat,3,32) >= %lim) {      Var %ch $gettok(%dat,1,32) , %n $gettok(%dat,2,32)
      If ($me IsOp %ch) {
        Raw -q KICK %ch %n :idle trop grand
      }
    }
    Inc %i
  }
}

alors, ces 2 fonctions doivent parfaitement fonctionner. mais il y a un bemol du moins. les KICKS seront lances immediatement l'un apres l'autre. et comme d'habitude, il y aura surcharge de commandes. la meilleure methode, comme j'en ai parle plus tot, est d'inclure une queue de commande, ici pour les KICKS. je ne vais pas faire ce code. cela te rendrait la tache trop 'facile'. je prefere que tu le fasses ;).

a toi maintenant d'adapter ces 2 fonctions. bon courage !
si toutefois tu veux vraiment tous les idle serveurs, alors, le principe est presque le meme. la queue se situera a 2 endroits. une pour les whois et une autre pour les kicks.

voila ce que je peux te proposer comme solution
cordialement,

TropNul
Messages postés
5
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
25 octobre 2007

Merci bcp pour ses precisions. Seulement mon souci vient de la
deuxieme ligne,
il ne trouve pas le salon dans le .txt, je pense donc que mon code est
mal fait.
Merci encore
Messages postés
5
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
25 octobre 2007

Re bonjour je viens vous revoir pour savoir si qq'un a une idée pour
mon .txt
merci!
Messages postés
5
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
25 octobre 2007

Bonsoir je reviens voir si quelqu'un a une idée pour mon soucie de txt