Commande à trois fonctions (carton jaune)
#11
Si tu pouvais être un peu plus poli, comme ça j'apprécierai de t'aider.
Je te rappelle, comme je viens de le dire, qu'on aide, et bénévolement. Et que les personnes qui demandent des scripts sont là pour apprendre un peu le tcl.

Donc, voici un script testé, toute modification sur le fonctionnement devra être faite par toi.
tcl
namespace eval cj {
 
	# emplacement de la base de données
	variable cjdb "databases/cj.db"
	
	# Durée de validité d'un carton
	variable delay 24
 
	variable punish
 
	bind pub o|- "!cj" [namespace current]::carton
 
	proc carton {nick uhost handle chan text} {
		set args [split $text]
		if {$args=="" || [llength [split $args]]!=1} {
			# Oubli de la victime ?
			puthelp "NOTICE $nick :Syntaxe: !cj <nick>"
			return 0
		}
		set victim [lindex [split $args] 0]
		if {![onchan $victim $chan]} {
			# victime pas sur le canal
			puthelp "NOTICE $nick :$victim n'est pas sur $chan"
			return 0
		}
		if {![info exists ::cj::punish($chan$victim)]} {
			# Pas de précédent carton, on le met et on kick
			set ::cj::punish($chan$victim) "1/[clock seconds]"
			putkick $chan $victim "Carton jaune N°1 !"
		} else {
			# Utilisateur déjà sanctionné
			set tmp [split $::cj::punish($chan$victim) /]
			if {[expr [expr 3600 * $::cj::delay] + [lindex $tmp 1]]>=[clock seconds]} {
				# La sanction date de moins de "delay" heures
				if {[lindex $tmp 0]==1} {
					# Il n'a eu qu'un carton, on lui met le 2ème
					set ::cj::punish($chan$victim) "2/[clock seconds]"
					putkick $chan $victim "Carton jaune N°2 !"
				} else {
					putlog "!=1"
					# Il en a eu 2, on le banni
					newchanban $chan "$victim!*@*" $nick "Carton rouge" [expr 60 * $::cj::delay]
					putkick $chan $victim "Carton rouge !"
					unset ::cj::punish($chan$victim)
				}
			} else {
				# Cas particulier: c'est un carton ancien, on repart à 1
				set ::cj::punish($chan$victim) "1/[clock seconds]"
				putkick $chan $victim "Carton jaune N°1 !"
			}
		}
		# Et maintenant, sauvegarde
		::cj::save
		return 0
	}
	
	# procédure de sauvegarde
	proc save {} {
		set fo [open $::cj::cjdb w]
		foreach cv [array names ::cj::punish] {
			puts $fo "$cv $::cj::punish($cv)"
		}
		close $fo
	}
	
	# chargement de la base
	proc load {} {
		if {![file exists $::cj::cjdb]} {
			return 0
		}
		set fi [open $::cj::cjdb r]
		set cartons [read -nonewline $fi]
		close $fi
		foreach carton [split $cartons "\n"] {
			set fields [split $carton " "]
			set ::cj::punish([lindex $fields 0]) [lindex $fields 1]
		}
	}
}
 
::cj::load
 
putlog "Carton jaune chargé"


Répondre


Messages dans ce sujet
RE: Commande à trois fonctions (carton jaune) - par CrazyCat - 09/06/2013, 17:11

Atteindre :


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