Recherche d'un .tcl maître/esclave
#1
Bonjour,
j'ai un canal irc ou je tiens plusieurs robots et un autre (sur le meme serveur) ou j'aimerai que 6 ou 8 d'entres-eux seulement y soit.En fet ce que j'recherche c'est qu'a chaque fois qu'un robot quitte le canal (celui ou il y en a 6 ou Cool qu'il soit remplacé par un autre rapidement.Je dois préciser que mon botnet est composé d'un hub (eggdrop) et tous les autres sont des windrop (totalisant au plus fort 20 robots linkés) comme vous le devinez le hub devra rester sur les 2 canaux en permanence.

J'vous remercie de vous pencher sur la question.
Répondre Avertir
#2
Salut,

En utilisant un timer,utimer avec l'enregistrement du canal comme sa il join le salon et une fois le timer ou utimer fini il quitte le salon en supprimant.

Par exemple enfin pour moi c'est ce qui serait plus logique..
Répondre Avertir
#3
Hu ?
un bind sur le part, une comparaison de la liste des windrops présents sur le canal "6" et sur le canal où ils sont tous, et un invite via botnet pour faire joindre les volontaires d'office.
Pourquoi un timer ?
Répondre
#4
Bah moi j'aurais mis des bind time sur les différents bots.
De cette manière chaque bots joins chacun leur tour par exemple moi c'est comme ça que j'aurais fait..

Moi je part sur la base d'eggdrop et non pas de botnet car botnet n'es pas prévus à cette effet a la base pour ma part.
Enfin je me trompe peut-être
Répondre Avertir
#5
Voici un petit script qui peut fonctionner :
Par contre, il n'agit que lorsqu'il y a un départ du canal, mais le principe est là. Il faut que les nicks des eggdrops et les botnet-nicks soient pareils.

TCL
namespace eval joiner {
 
   # Nom de l'eggdrop hub
   variable hub "toto"
   
   # Canal "pool"
   variable pool "#eggdrops"
   
   # Canal à nombre d'eggdrops fixe
   variable target "#target"
   
   # Nombre d'eggdrops
   variable nbb 6
 
  bind part -  "$::joiner::target *" ::joiner::partchan
  bind sign -  "$::joiner::target *" ::joiner::partchan
 
  proc partchan {nick uhost handle chan {msg ""}} {
     if { [string tolower $::botnick] != [string tolower $::joiner::hub] } { return 0; }
     set nb [llength [chanlist $chan]]
     if { $nb < $::joiner::nbb } {
        ::joiner::invite [expr $::joiner::nbb - $nb]
     }
     return 0
  }
 
  proc invite { nb } {
     set pres [chanlist $::joiner::target]
     set pot [chanlist $::joiner::pool]
     foreach drop [split $pres] {
        set e [lsearch $pot $drop]
        set pot [lreplace $pot $e $e]
     }
     set inv 0
     while {$inv < $nb } {
        set bot [lindex $pot [rand [llength $pot]]]
        set e [lsearch $pot $bot]
        set pot [lreplace $pot $e $e]
        putbot $bot ">come"
        incr inv
     }
     return 0
  }
 
  bind bot - ">come" ::joiner::come
  proc come {frm_bot command arg} {
     if { [string tolower $frm_bot] != [string tolower $::joiner::hub] } { return 0; }
     channel add $::joiner::target
  }
 
  bind evnt - "init-server" ::joiner::init_server
  proc init_server {$type} {
     if {[string tolower $::botnick] == [string tolower $::joiner::hub]} { return 0;}
     if {[lsearch [channels] $::joiner::target]} {
        channel remove $::joiner::target
     }
  }
 
}


Répondre
#6
Salut,

Je vais faire mon chieur je pense.. Mais un truc que je ne comprend pas dans le code.
Dans ton code tcl tu appel comme ceci :

TCL
channel add $::joiner::target



Donc la en exemple tu fait $::ns::salon
Mais la ou je comprend pas c'est pourquoi tu ne racourcis pas ça ?
Car dans la proc si tu mais par exemple comme celà :

TCL
bind bot - ">come" ::joiner::come
proc come {frm_bot command arg} {
    variable target
    if { [string tolower $frm_bot] != [string tolower $::joiner::hub] } { return 0; }
    channel add $target
}



Pareil pour les autres c'est sa que je comprend pas pourquoi vous n'utiliser pas namespace de cette manière..
Répondre Avertir
#7
salut ..

excuse me CrazyCat ^^
Code :
set e lsearch $pot $bot]
<->
Code :
set e [lsearch $pot $bot]

bonne nuit Smile
Répondre Avertir
#8
(28/06/2013, 23:11)aliasangelius a écrit : Donc la en exemple tu fait $::ns::salon
Mais la ou je comprend pas c'est pourquoi tu ne racourcis pas ça ?
Car dans la proc si tu mais par exemple comme celà :
Je ne comprends pas ce que tu veux dire, désolé.

(28/06/2013, 23:33)heartbroken a écrit : excuse me CrazyCat ^^
Code :
set e lsearch $pot $bot]
<->
Code :
set e [lsearch $pot $bot]
Bien vu, une erreur de mauvaise simplification du code Smile Je corrige le code initial
Répondre
#9
Regarde bien mon exemple de procédure et compare la tienne au niveau du channel add regarde ma variable..

Ensuite en dessous de proc j'appel la variable de manière a raccourcir
Répondre Avertir
#10
Je ne vois pas l'intérêt de raccourcir une variable tout en ajoutant une ligne.
Et techniquement, je ne vois pas ce que ça change.
Répondre
#11
Bon, demande supplémentaire : le canal "cible" est protégé par un mot de passe :
TCL
namespace eval joiner {
 
   # Nom de l'eggdrop hub
   variable hub "toto"
   
   # Canal "pool"
   variable pool "#eggdrops"
   
   # Canal à nombre d'eggdrops fixe
   variable target "#target"

   # Mot de passe du canal cible
   variable tpass "lepassword"
   
   # Nombre d'eggdrops
   variable nbb 6
 
  bind part -  "$::joiner::target *" ::joiner::partchan
  bind sign -  "$::joiner::target *" ::joiner::partchan
 
  proc partchan {nick uhost handle chan {msg ""}} {
     if { [string tolower $::botnick] != [string tolower $::joiner::hub] } { return 0; }
     set nb [llength [chanlist $chan]]
     if { $nb < $::joiner::nbb } {
        ::joiner::invite [expr $::joiner::nbb - $nb]
     }
     return 0
  }
 
  proc invite { nb } {
     set pres [chanlist $::joiner::target]
     set pot [chanlist $::joiner::pool]
     foreach drop [split $pres] {
        set e [lsearch $pot $drop]
        set pot [lreplace $pot $e $e]
     }
     set inv 0
     while {$inv < $nb } {
        set bot [lindex $pot [rand [llength $pot]]]
        set e [lsearch $pot $bot]
        set pot [lreplace $pot $e $e]
        putbot $bot ">come"
        incr inv
     }
     return 0
  }
 
  bind bot - ">come" ::joiner::come
  proc come {frm_bot command arg} {
     if { [string tolower $frm_bot] != [string tolower $::joiner::hub] } { return 0; }
     channel add $::joiner::target
     if { $::joiner::pass != '' } {
        channel set $::joiner::target need-key { putquick "JOIN $::joiner::target $::joiner::tpass" }
     }
  }
 
  bind evnt - "init-server" ::joiner::init_server
  proc init_server {$type} {
     if {[string tolower $::botnick] == [string tolower $::joiner::hub]} { return 0;}
     if {[lsearch [channels] $::joiner::target]} {
        channel remove $::joiner::target
     }
  }
 
}


Une autre alternative proposée par MenzAgitat sur le canal, c'est de ne pas gérer le mot de passe et de mettre un "cs invite" sur le need-key.
A voir en fonction des possibilités du réseau, du canal, ...
Répondre


Atteindre :


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