Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Débannir un utilisateur au bout de X minutes
#1
Bonsoir everybody,

Voici un script qui vous permet de débannir un utilisateur au bout d'une heure dans votre channel. Je ferais une amélioration pour pouvoir définir le temps du ban dans une variable.

Explication du script: Le script va enregistrer dans un fichier tous les nouveaux ban de votre channel et supprimer du fichier/channel les bans au bout d'une heure.

Pensez à modifier le chemin vers le fichier unbantime.txt

Pour activer le script : .chanset #channel +unbantime


tcl
if {[::tcl::info::commands ::unbantime::uninstall] eq "::unbantime::uninstall"} { ::unbantime::uninstall }
if { [package vcompare [regexp -inline {^[[:digit:]\.]+} $::version] 1.6.20] == -1 } {
putloglev o * "\00304\[unbantime - erreur\]\003 La version de votre Eggdrop est\00304 ${::version}\003; unbantime ne fonctionnera correctement que sur les Eggdrops version 1.6.20 ou supérieure." ; return }
if { [::tcl::info::tclversion] < 8.5 } {
putloglev o * "\00304\[unbantime - erreur\]\003 unbantime nécessite que Tcl 8.5 (ou plus) soit installé pour fonctionner. Votre version actuelle de Tcl est\00304 ${::tcl_version}\003." ; return }
package require Tcl 8.5
 
namespace eval ::unbantime {
 
 
############
# VARIABLE #
############
 
set ::unbantime::fichier(unbantime) "scripts/Eggdrop/bdd/unbantime.txt"
 
###########
# FICHIER #
###########
 
if { ![file exists $::unbantime::fichier(unbantime)] } {
  close [open $::unbantime::fichier(unbantime) w+]
}
 
# Procédure de désinstallation : le script se désinstalle totalement avant
# chaque rehash ou à chaque relecture au moyen de la commande "source" ou
# autre.
 
proc ::unbantime::uninstall {args} {
putlog "Désallocation des ressources de \002unbantime\002..."
# Suppression des binds.
foreach binding [lsearch -inline -all -regexp [binds *[set ns [::tcl::string::range [namespace current] 2 end]]*] " \{?(::)?$ns"] {
unbind [lindex $binding 0] [lindex $binding 1] [lindex $binding 2] [lindex $binding 4]
}
# Arrêt des utimers en cours.
foreach running_timer [timers] {
if { [::tcl::string::match "*[namespace current]::*" [lindex $running_timer 1]] } { killtimer [lindex $running_timer 2] }
}
 
namespace delete ::unbantime
}
}
 
############
#  PROC  #
############
 
setudef flag unbantime
 
proc ::unbantime:autounban {nick uhost hand chan mode target} {
 
  set bantime [list [unixtime] $target $chan]
 
  if {![channel get $chan unbantime]
  } then {
    return
  } else {
    ::unbantime::ajouter:donnee $::unbantime::fichier(unbantime) $bantime
  }
 
}
 
bind time - "* * * * *" ::unbantime::unbanauto
proc ::unbantime::unbanauto {minute hour day month year} {
 
  set fp [open $::unbantime::fichier(unbantime) r]
 
  while {![eof $fp]} {
  set data [gets $fp]
 
  lassign $data timestampban banmask chanban
 
    if {($data ne "") && ($timestampban + 3600 <= [unixtime])} {
 
      putserv "MODE $chanban -b $banmask"
      ::unbantime::effacer:donnee $::unbantime::fichier(unbantime) $data
 
    }
 
  }
  close $fp
}
 
proc ::unbantime::ajouter:donnee {fichierss arg} {
  set liste [open $fichierss a]
  puts $liste "$arg"
  close $liste
}
 
proc ::unbantime::effacer:donnee {fichierss arg} {
  set tmp "unbantime.tmp"
  set fi [open $fichierss r]
  set fo [open $tmp w]
  while {![eof $fi]} {
    gets $fi a
    if {$a ne ""} {if {[string equal -nocase [lrange $a 0 end] $arg]} {} else {puts $fo "[lrange $a 0 end]"}
    }
  }
  close $fi
  close $fo
  file delete $fichierss
  file rename -force $tmp $fichierss
}
 
############
#       BIND        #
############
 
bind mode -|- "% +b" ::unbantime:autounban

  Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Diffuser une annonce sur un channel toutes les x minutes Amand 2 125 24/04/2023, 23:52
Last Post: Amand

Forum Jump:


Users browsing this thread: 1 Guest(s)