Commande à trois fonctions (carton jaune)
#7
Bon, j'ai fait un petit script rapide (même pas testé Very Happy)...

Le fonctionnement est très simple, c'est juste le moteur, il peut bien sûr être énormément amélioré, pour l'instant il ne se base que sur les nicks.

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|o "!cj" [namespace current]::carton
 
	proc carton {nick uhost handle chan args} {
		if {[llength $args]!=1} {
			# Oubli de la victime ?
			puthelp "NOTICE $nick :Syntaxe: !cj <nick>"
			return 0
		}
		set victim [string tolower [lindex $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 {[$tmp[1] + (3600*$::cj::delay)]>=[clock seconds]} {
				# La sanction date de moins de "delay" heures
				if {[$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 {
					# Il en a eu 2, on le banni
					newchanban $chan "$victim!*@*" $nick "Carton rouge" 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 -nonewlines $fi]
		close $fi
		foreach carton [split $cartons "\n"] {
			set fields [split $carton " "]
			set ::cj::punish($fields[0]) $fields[1]
		}
	}
}
 
::cj::load
 
putlog "Carton jaune chargé"



Deux petits notas:
- les cartons jaunes expirés ne sont retirés que si l'on remet un carton à la personne,
- une personne qui a un carton rouge est "supprimée" de la base pour le canal, en partant du principe que le ban l'empèche de revenir et donc de reprendre un carton jaune pendant 24h.
Répondre


Messages dans ce sujet
RE: Commande à trois fonctions (carton jaune) - par CrazyCat - 08/06/2013, 15:33

Atteindre :


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