25/06/2009, 09:55
tcl
proc publicite { hand arg idx } {
Un bind DCC envoie trois arguments à une procédure, à savoir dans l'ordre le handle de l'utilisateur, son idx et le texte qu'il a tapé. Donc dans ce cas, ça serait plus "hand idx arg" que "hand arg idx". Il vaut mieux aussi utiliser autre chose que "arg" pour éviter de confondre avec "args" (qui regroupe les arguments supplémentaires dans une liste).
Sinon j'ai quelques autres remarques concernant le script :
- La variable s'appelle salons, et pas salon. On peut donc penser que le script est concu pour fonctionner sur plusieurs chans (par exemple en les séparant par des virgules). Le problème, c'est que ca passera pas sur eggdrop, au niveau des "validchan" "channel add" etc.
- A cause du SAJOIN j'en conclus que le bot est IRCOp... Et donc, je pense qu'il serait carrément plus simple d'utiliser les services si possible (Global, BotServ, tout ça)
-
Voila une version modifiée pour prendre en compte les salons multiples :
tcl
bind dcc - publicite dcc:publicite:main
proc dcc:publicite:main {handle idx text} {
foreach currentChan [split $text ", "] {
if {$currentChan eq ""} { continue }
if {[validchan $currentChan]} { putdcc $idx "Je suis déjà sur le canal $currentChan !"; continue }
lappend chanList $currentChan
append modeTargets "MODE $currentChan +oq $::botnick $::botnick\n" }
if {![llength $chanList]} { putdcc $idx "Canaux invalides ?" }
set joinedList [join $chanList ","]
# Note: Plutôt que de channel add / channel remove
# il est plus simple de tout faire d'un coup, le bot quittera automatiquement le chan ensuite
putdccraw 0 [string length [set rawText "SAJOIN $::botnick [join $joinedList]\n[set modeTargets]PRIVMSG [join $joinedList] :$::phrasepub"]] $rawText
return }
Je ne l'ai pas testé mais (euh) je pense qu'il devrait fonctionner