07/05/2014, 15:44
Bonjour à tous :)
Je souhaite faire un script tcl qui pourrait permettre la modération par les voices.
A partir des flags que j'aurai ajouté à mes voices (hv) je souhaiterai leur donner la possibilité d'utiliser 2 commandes. La première qui sera le kick et la deuxième le ban bien évidemment...
Mais je voudrai pouvoir stocker dans un fichier .db le voice qui a utilisé la commande et quelle commande il a utilisé et sur quel pseudo.
Je ne rencontre pas trop de problème pour les premières étapes, c'est pour la partie écriture dans le fichier que j'ai plus de mal...
Voici le code :
Après ça il faudra que je fasse la même chose avec !vdmban
Merci beaucoup pour l'aide :)
Je souhaite faire un script tcl qui pourrait permettre la modération par les voices.
A partir des flags que j'aurai ajouté à mes voices (hv) je souhaiterai leur donner la possibilité d'utiliser 2 commandes. La première qui sera le kick et la deuxième le ban bien évidemment...
Mais je voudrai pouvoir stocker dans un fichier .db le voice qui a utilisé la commande et quelle commande il a utilisé et sur quel pseudo.
Je ne rencontre pas trop de problème pour les premières étapes, c'est pour la partie écriture dans le fichier que j'ai plus de mal...
Voici le code :
tcl
namespace eval vdmodo {
# emplacement de la base de données
variable vdmododb "/home/portgasdkiba/vdmbot/databases/carton.db"
variable punish
variable vdmodochan "#viedemerde"
bind pub hv|hv "!vdmkick" [namespace current]::vdmkick
proc vdmkick {nick uhost handle chan text} {
if { [string tolower $chan] ne [string tolower $::vdmodo::vdmodochan] } {
putlog "Script non actif sur $chan"
puthelp "NOTICE $nick :Script non actif sur $chan !"
return 0;
}
set args [split $text]
if {$args=="" || [llength [split $args]]!=1} {
# Oubli de la victime ?
puthelp "NOTICE $nick :Syntaxe: !vdmkick <pseudo>"
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 {[isvoice $victim $chan]||[ishalfop $victim $chan]||[isop $victim $chan] || (![matchattr $handle gv $chan]&&![matchattr $handle hp])} {
puthelp "NOTICE $nick :$victim ne peut pas être kické sur $chan car il a un accès."
putlog "$nick vient d'essayer de kicker $victim sur $chan"
putlog "flags gv pour $handle sur $chan : [matchattr $handle gv $chan]"
putlog "flags hp global pour $handle : [matchattr $handle hp]"
return 0
}
if {![info exists ::vdmodo::punish($chan$victim)]} {
# Pas de précédent carton, on l'ajoute dans le fichier et on kick
set ::vdmodo::punish($nick a utilisé la commande !vdmkick sur $victim)
putkick $chan $victim "PAN ! $victim, dans ta tronche !"
}
# Et maintenant, sauvegarde
::vdmodo::save
return 0
}
# procédure de sauvegarde
proc save {} {
set fo [open $::vdmodo::vdmododb w]
foreach cv [array names ::vdmodo::punish] {
puts $fo "$cv $::vdmodo::punish($cv)"
}
close $fo
}
# chargement de la base
proc load {} {
if {![file exists $::vdmodo::vdmododb]} {
return 0
}
set fi [open $::vdmodo::vdmododb r]
set cartons [read -nonewline $fi]
close $fi
foreach carton [split $cartons "n"] {
set fields [split $carton " "]
set ::vdmodo::punish([lindex $fields 0]) [lindex $fields 1]
}
}
}
::vdmodo::load
putlog "VDM Modération chargé par KiBa adapté de la version Carton.tcl de CrazyCat"
Après ça il faudra que je fasse la même chose avec !vdmban
Merci beaucoup pour l'aide :)