Messages : 710
Sujets : 66
Inscription : Apr 2010
Niveau d’avertissement :
0%
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..
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
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 ?
Messages : 710
Sujets : 66
Inscription : Apr 2010
Niveau d’avertissement :
0%
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
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
27/06/2013, 22:19
(Modification du message : 28/06/2013, 23:48 par CrazyCat.)
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
}
}
}
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
(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

Je corrige le code initial
Messages : 710
Sujets : 66
Inscription : Apr 2010
Niveau d’avertissement :
0%
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
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
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.
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
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, ...