09/06/2013, 17: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.
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é"