Communauté Eggdrop

Version complète : Tcl limite salon
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2
Bonjour ,
je viens de dl un tcl pour mettre une limite dynamique sur un salon.
Ce dernier marche bien sauf que qu'en quelqu'un part , il ne fait pas -1 a la limite chan Sad
Quelqu'un pourrait il m'aider rapidement svp
Par avance merci Smile
re Smile
Probleme resolu seulement le +/- 1 aux joints/parts ne se fait qu'au bout de 1 mins et je trouve pas ou modifier pour le mettre a 20sc
si quelqu'un peut m'aider ...
merci
bewess
En fait, le système est "bridé", il check toutes les minutes s'il doit augmenter ou diminuer la limite.

Tu pourrais ajouter:
tcl
bind join - "*" limit:join
bin part - "*" limit:part
proc limit:join {nick handle host chan} {
   limit:time:check 0 0 0 0 0
}
proc limit:part {nick handle host chan {msg ""}} {
   limit:time:check 0 0 0 0 0
}


Ca forcera l'appel de la procédure principale sitôt que quelqu'un entrera ou sortira.
Merci pour la reponse, ( desoler pour le retard Mad )
et je rajoute ca ou exactement? histoire de pas tout foirer :p

Bon week-end Smile
bewess a écrit :Merci pour la reponse, ( desoler pour le retard Mad )
et je rajoute ca ou exactement? histoire de pas tout foirer :p

Bon week-end Smile

Tu l'ajoutes ou tu veux, en dehord d'une procédure.
Concrètement, le bout de code que CrazyCat ta fait va lancer a chaque fois que quelqu'un join ou part un salon ou se trouve l'eggdrop la procédure limit:join ou limit:part (ça dépend s'il s'agit d'un join ou part).

Les deux ... auront pour but de faire la même chose, c'est a dire appeller la procédure limit:time:check.

Alors voila ce qu'éventuellement tu ne comprends pas :
Code :
limit:time:check 0 0 0 0 0

En fait, ta procédure limit:time:check nécessite d'être appeler par un bind time, mais il est possible de l'appeler via autre chose (cf ci-dessus).

Les "0 0 0 0 0" sont les arguments pour ta procédure (elle a besoin de cet indicateur pour se lancer, si non elle te retourne une érreur de code).
Ces "arguments" correspondent a "minute jour semaine mois année" (que tu as abrégé en anglais dans proc limit:time:check {min ...}) et donc en donnant comme valeur 0 0 0 0 0, la proc se lance tout desuite Wink


Bon courage, et si tu n'as pas compris, n'hésite pas a re-poster Wink
Merci pour toutes ces explications, un vrai bonheur de poster ici Smile
Réponse rapide claires le top
Encore merci a vous
ok moi j'ai fais se qui a été dis dans se post sauf que j'ai cette erreur si indiquer dans mon eggdrop:

DJ-VARIOUS a écrit :Tcl error [limit:time:check]: can't read "limit(channel)": no such variable

alors je me demande pourquoi et quoi faire Wink svp
DJ-VARIOUS a écrit :ok moi j'ai fais se qui a été dis dans se post sauf que j'ai cette erreur si indiquer dans mon eggdrop:

DJ-VARIOUS a écrit :Tcl error [limit:time:check]: can't read "limit(channel)": no such variable

alors je me demande pourquoi et quoi faire Wink svp

Tu peux nous C/C parfaitement le code que tu as ?
Même si je me doute de ce que tu as, je préfère quand même (on sais jamais) chercher l'erreur sur ton code.
tcl
##### DEBUT DU PROGRAMME #####
 
bind time - "* * * * *" limit:time:check
bind join - "*" limit:join
bind part - "*" limit:part
proc limit:join {nick handle host chan} {
   limit:time:check 0 0 0 0 0
}
proc limit:part {nick handle host chan {msg ""}} {
   limit:time:check 0 0 0 0 0
}
proc limit:time:check { min hour day month year } {
	global limit
	set limite_actuelle 5
	foreach chan [channels] {
		if {(($limit(channel) != "all") && ([lsearch -exact $limit(channel) $chan] != -1)) || ($limit(channel) == "all")} {
			if {[string match *l* [lindex [getchanmode $chan] 0]]} {
				if {[string match *k* [lindex [getchanmode $chan] 0]]} {
					set limite_actuelle [lindex [getchanmode $chan] 2]
				} else {
					set limite_actuelle [lindex [getchanmode $chan] 1]
				}
			}
			if {![info exists limit($chan,stop)]} {
				set limit($chan,stop) 0
			}
			set limit($chan,total) [llength [chanlist $chan]]
			if {![info exists limit($chan,total,old)]} {
				set limit($chan,total,old) $limit($chan,total)
			}
			
			# on regarde si y'a pas trop de gens qui sont rentrés sur le channel en 1 minute
			if {![info exists limit($chan,danger)]} {
				set limit($chan,danger) 1
			}
			if {$limit($chan,total) == [expr $limit($chan,total,old) + $limit(plus)]} {
				if {![info exists limit($chan,danger,moment)]} {
					set limit($chan,danger,moment) "$hour:$min"
				}
				if {([lindex [split $limit($chan,danger,moment) :] 0] == $hour) && ([expr [lindex [split $limit($chan,danger,moment) :] 1] + 1] == $min)} {
					# si la limite était pleine il y a une minute deja alors on incremente le danger
					set limit($chan,danger) [expr $limit($chan,danger) + 1]
				}
 
			}
			if {$limit($chan,danger) == 2} {
				putlog "#LIMIT# Je trouve qu'il y a bcp de personne qui ont rejoin $chan ... je n'augmente plus la limite pendant X secondes !"
				puthelp "privmsg $chan :#LIMIT# Je trouve qu'il y a bcp de personne qui ont rejoin $chan ... je n'augmente plus la limite pendant X secondes !"
				set limit($chan,stop) 4
				set limit($chan,danger) 1
			} else {
				if {$limit($chan,stop) > 0} {
					set limit($chan,stop) [expr $limit($chan,stop) - 1]
				} else {
					if {$limit($chan,danger) < 2} {
						if {$limite_actuelle != [expr $limit($chan,total) + $limit(plus)]} {
							pushmode $chan +l [expr $limit($chan,total) + $limit(plus)]
							set limit($chan,total,old) $limit($chan,total)
						}
					}
				}
			}
		}
	}
	return 0
}



voila se fameux code loll ;p
aider moi svp ...
Il manque l'initialisation de la limite:
tcl
set limit(channel) "all"


(à mettre au début du script)
ok je vais essayer Wink
jai fais la modification j'ai rajouter
Code :
set limit(channel) "all"
en dessous de ##### DEBUT DU PROGRAMME ##### alors je crois que c la bonne manipulation.

ensuite j'ai fais un .rehash a sa me marque ceci dans le chat du eggdrop
Code :
Tcl error [limit:time:check]: can't read "limit(plus)": no such element in array

je comprend plus rien loll
Le tcl n'est pas complet, il manque toute la partie de configuration, et donc les variables initiales ne sont pas correctement renseignées.

Il te manque:
tcl
##### CONFIGURATION #####

 
### Channels sur lesquels la limite doit etre mise en place (mettre "all" pour tous les channels où le bot est)
### Séparer les channels par un espace
set limit(channel) "#canal"

### Indiquer ici de combien la limite doit etre augmenté
set limit(plus) 2


la limit c pourquoi ?
Pages : 1 2