Communauté sur les Eggdrops - Community about Eggdrops
Detection de pub et retour de pub - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: Detection de pub et retour de pub (/showthread.php?tid=189)



Detection de pub et retour de pub - loulou7593 - 10/04/2008

Bonjour voila j'ai un petit code qui est censé detecté un user qui fait de la pub pour son salon ( exemple: venez sur #paris )

Le bot devrais detecter le # <== qui est le prefixe des salons

et ensuite il devrais joindre le salon concerné et retourner la pub en y inscrivant le nom de mon salon.

mais il y a un petit soucis quand quelqu'un ecris venez sur #paris il detecte pas mais si c'est ecris venez sur # paris avec un espace il detecte et ensuite à la detection il me repond
Tcl error [pubm:retourpub]: invalid channel prefix

voici le code


tcl
bind pubm - "*#*" pubm:retourpub
proc pubm:retourpub {nick host handle channel arg} {
if {[string match *#* $arg]} {
global spamchan spamnick 
set spamchan "[lindex $arg 0]" 
set spamnick "[lindex $arg 1]" 
channel add $spamchan 
utimer 5 msg 
}
} 
 
proc msg {} { 
global spamchan spamnick 
putserv "PRIVMSG $spamchan :Spam détecté de la part de $spamnick . Retour de spam : Venez sur #pied-davoine2" 
utimer 5 quittt 
} 
 
proc quittt {} { 
global spamchan spamnick 
channel remove $spamchan 
}


Merci de me renseigner


RE: Detection de pub et retour de pub - DaV34 - 10/04/2008

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 :

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 :
Quote:<Spammeur> Kikoolol venez tous sur #machin ensuite sur #bidule puis sur #chouet
Mon 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 ;)


RE: Detection de pub et retour de pub - loulou7593 - 10/04/2008

Merci de la reponse je vais le tester et te faire le rapport de ce que j'ai.


RE: Detection de pub et retour de pub - loulou7593 - 10/04/2008

Donc pour t'expliquer, j'ai tout copier le code que tu as fait,
je l'ai coller dans le fichier scripts de mon egg.

Et donc g pris un pseudo bidon g marqué venez sur #ploploplo

et il ne se passe rien. Le bot ne join pas le salon #ploploplo

est ce qu'il faut autre chose pour que le bot puisse allé sur le salon ? ou bien a partir du code il devrais pouvoir y aller ?

Voila sinon il y a aucune erreure de marqué, donc je ny comprend trop rien lol


RE: Detection de pub et retour de pub - DaV34 - 10/04/2008

Faudrait utiliser un système de "débuggage", mais n'ayant pas d'eggdrop sous la main, je verrais ce que je peux faire demain.


RE: Detection de pub et retour de pub - loulou7593 - 10/04/2008

Ok Merci encore