[script] advoice
#1
Description :
Script pour voicer automatiquement les utilisateurs et leur retirer la voix après un certain temps d'idle

Commandes
En console:
Code :
.chanset #channel advdelay XX
Avec XX en minutes (0 désactive le tcl sur le canal)
Code :
.chanset #channel +/-advjoin
Permet de mettre un +v automatique à ceux qui entrent sur le canal
Code :
.chanset #channel advlines XX
Voice les personnes après XX lignes écrites (désactive advjoin)
En message:
Code :
/msg eggdrop delay help
/msg eggdrop delay #channel on (utilise la durée par défaut)
/msg eggdrop delay #channel XX
/msg eggdrop delay #channel off|0
/msg eggdrop voj #channel on|off
/msg eggdrop nol #channel XX

Télécharger advoice.tcl
Répondre
#2
Version 1.1
Correction d'un bug : les lignes des ops et half-ops n'étaient plus présentes dans le fichier de log du canal.

Ce bug existait depuis le début, je ne l'ai remarqué qu'hier. Et il est totalement de ma faute : l'eggdrop réagit (entre autres) au bind pubm et dans la procédure voice, je faisais des "return 1" lorsque l'utilisateur a le statut @ ou %.
Hors, comme il est bien indiqué dans le wiki (et par moi en plus):
wiki a écrit :Si la procédure renvoit 1, Eggdrop n'enregistrera pas le message qui a déclenché le bind.
Désormais, le code de retour est donc 0, et tout est corrigé.
Répondre
#3
En lisant le code, il me semble qu'il y a un problème si un user cumule plusieurs modes et est par exemple voicé, halfopé et opé.
Une fois le temps d'idle max atteint, il sera d'abord déopé, puis déhalfopé 1mn après, puis dévoicé encore 1mn après.
Je propose le correctif suivant :
tcl
proc check {min hour day month year} {
	foreach chan [channels] {
		set idlemax [channel get $chan advoice]
		if { $idlemax == 0 } {
			continue
		} else {
			foreach nick [chanlist $chan] {
				foreach protected $::advoice::protected {
					if { [lsearch -nocase [::advoice::filt [split $protected]] [::advoice::filt [split $nick]]] != -1 } {
						putlog "protected -> [::advoice::filt [split $protected]]"
						continue
					} else {
						if { [getchanidle $nick $chan] > $idlemax } {
							if { $::advoice::opasvoice } {
								if { [isop $nick $chan] } {
									::advoice::deop $nick $chan
								}
								if { [ishalfop $nick $chan] } {
								::advoice::dehalfop $nick $chan
								}
							}
							if { [isvoice $nick $chan] } {
								::advoice::devoice $nick $chan
							}
						}
					}
				}
			}
		}
	}
}



De plus, la proc filt pourrait être optimisée en :
tcl
proc filt {data} {
	return [regsub -all {\W} $data {\\&}]
}


Répondre Avertir
#4
Nouvelle version disponible: elle permet de voicer un utilisateur après un certain nombre de lignes écrites sur le salon.

Le système inclut une sorte de gracetime: après devoice, le compteur de lignes est décrémenté d'une ligne chaque minute
Répondre
#5
Merci pour ce script Smile
Répondre
#6
Nouvelle version corrigée.
Et changement du nommage de version, bien que cette version ne soit pas une évolution majeure.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté