Communauté sur les Eggdrops - Community about Eggdrops
Tcl limite salon - 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: Tcl limite salon (/showthread.php?tid=175)

Pages: 1 2


Tcl limite salon - bewess - 08/03/2008

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 :(
Quelqu'un pourrait il m'aider rapidement svp
Par avance merci :)


RE: Tcl limite salon - bewess - 08/03/2008

re :)
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


RE: Tcl limite salon - CrazyCat - 08/03/2008

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.


RE: Tcl limite salon - bewess - 16/03/2008

Merci pour la reponse, ( desoler pour le retard :x )
et je rajoute ca ou exactement? histoire de pas tout foirer :p

Bon week-end :)


RE: Tcl limite salon - DaV34 - 18/03/2008

bewess Wrote:Merci pour la reponse, ( desoler pour le retard :x )
et je rajoute ca ou exactement? histoire de pas tout foirer :p

Bon week-end :)

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 ;)


Bon courage, et si tu n'as pas compris, n'hésite pas a re-poster ;)


RE: Tcl limite salon - bewess - 18/03/2008

Merci pour toutes ces explications, un vrai bonheur de poster ici :)
Réponse rapide claires le top
Encore merci a vous


RE: Tcl limite salon - DJ-VARIOUS - 27/03/2008

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 Wrote:Tcl error [limit:time:check]: can't read "limit(channel)": no such variable

alors je me demande pourquoi et quoi faire ;) svp


RE: Tcl limite salon - DaV34 - 27/03/2008

DJ-VARIOUS Wrote: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 Wrote:Tcl error [limit:time:check]: can't read "limit(channel)": no such variable

alors je me demande pourquoi et quoi faire ;) 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.


RE: Tcl limite salon - DJ-VARIOUS - 28/03/2008


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


RE: Tcl limite salon - DJ-VARIOUS - 28/03/2008

aider moi svp ...


RE: Tcl limite salon - CrazyCat - 28/03/2008

Il manque l'initialisation de la limite:

tcl
set limit(channel) "all"

(à mettre au début du script)


RE: Tcl limite salon - DJ-VARIOUS - 29/03/2008

ok je vais essayer ;)


RE: Tcl limite salon - DJ-VARIOUS - 29/03/2008

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


RE: Tcl limite salon - CrazyCat - 29/03/2008

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




RE: Tcl limite salon - DJ-VARIOUS - 29/03/2008

la limit c pourquoi ?