Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


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 8) 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.
#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..
#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 ?
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#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
#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
     }
  }
 
}

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#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..
#7
salut ..

excuse me CrazyCat ^^

Code:
set e lsearch $pot $bot]
<->
Code:
set e [lsearch $pot $bot]
bonne nuit :)
Away
#8
(28/06/2013, 23:11)aliasangelius Wrote: 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 Wrote: excuse me CrazyCat ^^

Code:
set e lsearch $pot $bot]
<->
Code:
set e [lsearch $pot $bot]
Bien vu, une erreur de mauvaise simplification du code :) Je corrige le code initial
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#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
#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.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#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, ...
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP


Possibly Related Threads…
Thread Author Replies Views Last Post
  Eggdrop maitre + sockets pheeric 11 5,928 06/01/2012, 22:03
Last Post: pheeric

Forum Jump:


Users browsing this thread: 1 Guest(s)