Communauté Eggdrop

Version complète : Detection des mots Interdits
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour,

Je viens de mettre un TCL sur mon Eggdrop pour la détection des Mots interdits après les avoir enregistrés dans un fichier txt.

Le 1er problème c'est quand j'ajoute des mots dans le fichier .txt une fois je fais un .rehash la liste s’efface toute seule.

Le 2ème problème c'est quand j'ai ajouté des mots interdits à la liste, et j'ai essayé de les prononcés sur le salon à surveiller, le bot ne réagit pas.

Merci de me préciser ce qu'il ne va pas dans le code.

tcl
set bwLog "badwords.tcl"
 
set bwChan "#maghreb";
 
set logchan "#test";
 
 
# YOU SHOULDN'T MODIFY ANTYTHING BELOW THIS LINE
set bwRun 1
set bwArray() ""
set bwNumber 0
set bwFilename "./scripts/db/badwordsfile.txt"

#################
##  PUTQUICK   ##
#################
 
 
proc putquick {arg} {
 append arg "\n"
 putdccraw 0 [string length $arg] $arg
}

 
############################################################################
# SURVEYpub proc
############################################################################
 
bind pubm - * bwSurveypub
proc bwSurveypub {nick uhost hand channel args} {
	global bwLog bwChan bwArray bwNumber bwRun
	set channel [string tolower $channel]
	if { "#maghreb" != $channel } { 
		return 0
	}
	if { ([isop $nick "#maghreb"])||([matchattr $nick o|o "#maghreb"])||([isvoice $nick "#maghreb"]) } {
		return 0
	}
 
	set args [join $args]
	set args [string tolower $args]
 
	for {set i 0} {$i < $bwNumber} {incr i} {
		if { $bwArray($i) != "" } {
			set badw [join $bwArray($i)]
			set dummy ""
			set bwtime [clock format [clock seconds]]
			if { [regsub -all "$badw" $args "" dummy] } {
				putquick "privmsg "#test" :\002\00312Mot interdit: \0031$nick \00312a pornoncé \002\00304($badw) \00312sur\00306 ($channel) \00312à\00301 $bwtime !"
			}
		}
	}
	return 0
}

############################################################################
# SURVEYact proc
############################################################################
bind ctcp - ACTION bwSurveyact
proc bwSurveyact {nick uhost hand channel keyword args} {
	bwSurveypub $nick $uhost $hand $channel $args
	return 0
}

############################################################################
# LIST proc
############################################################################
 
 
bind pub -|- !bwlist bwList
proc bwList {nick uhost hand channel args} {
	global logChan bwArray bwNumber bwRun
	set channel [string tolower $channel]
	if { "#test" != $channel } {
		return 0
	}
	putlog "$nick ($uhost) uses !lst"
	set txForbidden ""
	set nWords 0
	for {set i 0} {$i < $bwNumber} {incr i} {
		if { $bwArray($i) != "" } {
			set txForbidden "$txForbidden $bwArray($i)"
			incr nWords
		}
	}
	if { $nWords == 0 } {
		putquick "NOTICE $nick :\002\00312Mots interdits: \0036la liste est vide."
	} else {
	    putquick "NOTICE $nick :\002\00306 Liste des Mots interdits:"
		putquick "NOTICE $nick :\002\00312Mots interdits:\002 \00304$txForbidden"
		putquick "NOTICE $nick :\002\00306 Fin des Mots interdits:"
	}
	return 0
}

############################################################################
# ADD proc
############################################################################
 
 
bind pub o|o !bwAdd bwAdd
proc bwAdd {nick uhost hand channel args} {
	global bwLog bwChan bwArray bwNumber bwFilename bwRun
	set channel [string tolower $channel]
	if { "#test" != $channel } {
		return 0
	}
	if { ![isop $nick "#test"] } {
	putquick "NOTICE $nick :\002\00304Accès refusé. \00301Vous devez être au minimum \00304OP\00301 sur \00312$channel ."
		return 0
	}
	if { $args == [list {}] } {
		putquick "NOTICE $nick :\002\00312Mots interdits :\002 \00306Syntax \00304!bwAdd Mot interdit"
		return 0
	}
 
	set args [string tolower $args]
 
	putlog "$nick ($uhost) uses !bwAdd (word is : '$args')"
	for {set i 0} {$i < $bwNumber} {incr i} {
		if { $args == $bwArray($i) } {
			putquick "NOTICE $nick :\002\00312Mots interdits:\002 \00304'$args' \00312existe déjà."
			return 0
		}
	}
	set bwArray($bwNumber) "$args"
	incr bwNumber
	putquick "PRIVMSG #test :\002\00312Mots interdits :\002\ ajout de\00304 '$args'"
	bwWritefile
}

############################################################################
# DEL proc
############################################################################
 
 
bind pub o|o !bwDel bwDel
proc bwDel {nick uhost hand channel args} {
	global bwLog bwChan bwArray bwNumber bwFilename
	set channel [string tolower $channel]
	if { "#test" != $channel } {
		return 0
	}
	if { ![isop $nick "#test"] } {
	putquick "NOTICE $nick :\002\00304Accès refusé. \00301Vous devez être au minimum \00304OP\00301 sur \00312$channel ."
		return 0
	}
	if { $args == [list {}] } {
		putquick "PRIVMSG #test :\002\00312Mots interdits :\002 \00306Syntax \00304!bwDel Mot interdit"
		return 0
	}
 
	set args [string tolower $args]
 
	putlog "$nick ($uhost) uses !bwDel (word is : '$args')"
	for {set i 0} {$i < $bwNumber} {incr i} {
		if { $args == $bwArray($i) } {
			set bwArray($i) ""
		}
	}
	putquick "PRIVMSG "#test" :Mots interdits : \002\00312Mots interdits :\002\ suppression de\00304 '$args'"
 
	bwWritefile
	return 0
}

############################################################################
# WRITEFILE proc
############################################################################
proc bwWritefile {} {
	global bwArray bwNumber bwFilename
	set fd [open $bwFilename w]
	for {set i 0} {$i < $bwNumber} {incr i} {
		if { $bwArray($i) != "" } {
			puts $fd "$bwArray($i)"
		}
	}
	close $fd
	return 0
}


A mon avis, le tcl que tu utilises est incomplet. Il ne va jamais lire le fichier de badwords.