10/04/2008, 21:49
Bonjour loulou.
Donc dans un premier temps, utilise les balises "tcl" dans le forum, c'est mieux que les balises "code".
Ton code n'est pas très cohérent, dans le sens ou tu veux détecter un message sur un salon et ton tcl en détecte un en privé.
J'ai codé rapidement ce que tu voulais faire, ayant vu que tu avais essayer quelque chose.
En revanche, je n'ai pas tester ma source, faute de ne pas disposer de shell actuellement.
Voilivoilou :
Je doute qu'il marche du premier coup, merci de me faire un rapport des éventuels bugs/erreurs.
Sache qu'il est codé de telle façon qu'il ne peut être opérationnel a 100%.
Exemple foireux :
Il faudrait apporter quelques modification, bref, il est facilement modifiable, améliorable.
J'ai fais exprès de bien commenter ... pour que si tu veuilles le modifier, tu puisses le faire.
Bref, bon courage a toi !
PS : Bienvenue sur le forum aussi ;)
Donc dans un premier temps, utilise les balises "tcl" dans le forum, c'est mieux que les balises "code".
Ton code n'est pas très cohérent, dans le sens ou tu veux détecter un message sur un salon et ton tcl en détecte un en privé.
J'ai codé rapidement ce que tu voulais faire, ayant vu que tu avais essayer quelque chose.
En revanche, je n'ai pas tester ma source, faute de ne pas disposer de shell actuellement.
Voilivoilou :
tcl
bind pub - * pub:spam
proc pub:spam {nick host hand chan arg} {
set arg [split $arg]
# Je détecte l'éventuelle présence du signe # dans ce que la personne vien d'écrire sur le salon
if {[string match *#* $arg]} {
# Dans le cas ou il y a une diese, je récupere le channel pour lequel la personne à fait la pub.
set spam_chan [lindex $arg [detect_spam $arg]]
# Je join le salon
channel add $spam_chan
# Je demande d'arrêter de spammer
utimer 3 avert_spam $nick $chan $spam_chan
# Je pars du salon
utimer 5 channel remove $spam_chan
return 0
}
}
#
# -> Je suis persuiader qu'il existe l'équivalent de ma proc detect_spam en tcl
# Une fonction toute prête, mais ayant la flemme (très franchement) de chercher
# Puis ayant voulu m'amuser un petit-peu, j'ai recoder l'éventuelle fonction
# Qui existe.
#
proc detect_spam {arg} {
# On affecte a la variable "nb_char" le nombre de mot qu'il y a dans $arg
set nb_char [llength $arg]
# On crée une variable nommé "nb" qui sera notre point de référence dans la chaine.
# A savoir pour récuperer la position du mot par rapport a la chaine.
set nb -1
# On lance la boucle qui va donc trier notre chaine
foreach a $arg {
# On incrément la variable "nb"
incr nb
# Si le premier charactere du mot qui est vérifier est "#" (la dièse), ont considère cela comme du spam
# On renvoie la position du mot dans la chaine
if {[string index $a 0] == "#"} { return $nb; break }
}
}
#
# J'aurai pu intégrer cette procédure dans celle qui détecte un méssage
# Mais j'ai séparé le tout car si maintenant tu veux détecter en pv,
# Tu n'as plus qu'a faire appel à cette fonction.
proc avert_spam {pseudo salon salonspam} {
puthelp "PRIVMSG $salonspam :Merci d'éviter de faire de la pub sur $salon ($pseudo)"
return 0
}
Je doute qu'il marche du premier coup, merci de me faire un rapport des éventuels bugs/erreurs.
Sache qu'il est codé de telle façon qu'il ne peut être opérationnel a 100%.
Exemple foireux :
Citation :<Spammeur> Kikoolol venez tous sur #machin ensuite sur #bidule puis sur #chouetMon tcl devrait fonctionner, auquel cas il rejoindra uniquement le salon #machin, et aucun autre salon.
Il faudrait apporter quelques modification, bref, il est facilement modifiable, améliorable.
J'ai fais exprès de bien commenter ... pour que si tu veuilles le modifier, tu puisses le faire.
Bref, bon courage a toi !
PS : Bienvenue sur le forum aussi ;)