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


Soucis avec une Blacklist [résolu]
#1
Bonjour,
je viens poster ce message car j'ai une blackliste qui fonctionne parfaitement la voici


tcl
set blacklist_file "scripts/dbase/blacklist"
 
 
bind PUB  m|- \!bl  blacklist:list
bind PUB  m|- \.+bl   blacklist:add
bind PUB  m|- \.-bl   blacklist:del
bind TIME -|- "0* * * * *" blacklist:sentry
bind JOIN -|- *            blacklist:join
 
proc blacklist:list {nickname hostname handle channel arguments} {
 global blacklist
  set entrys 0
  puthelp "PRIVMSG $nickname :Liste des Blacklistés"
  puthelp "PRIVMSG $nickname :Nr. Owner           Hostmask"
  foreach entry [array names blacklist] {
    incr entrys
    set owner [lindex $blacklist($entry) 0]
    while {[string length $owner] < 15} {
      set owner "$owner "
    }
    if {[string length $entrys] < 2} {
      set target "$entrys "
    } else {
      set target $entrys
    }
    puthelp "PRIVMSG $nickname :#$target $owner $entry"
  }
  puthelp "PRIVMSG $nickname :Fin de liste."
}
 
 
proc blacklist:add {nickname hostname handle channel arguments} {
 global blacklist
  set arguments [blacklist:clean $arguments]
  set banmask [blacklist:validate:host [lindex $arguments 0]]
  if {([regexp -all -- {!} $banmask] > 1) || ([regexp -all -- {@} $banmask] > 1)} {
    puthelp "NOTICE $nickname :Sorry, couldn't add that hostmask."
    return
  }
  set owner $handle
  if {[regexp {^(\d{1,2}|[0-3][0-6][0-5])$} [lindex $arguments 1]]} {
   set expire [expr ([lindex $arguments 1] * 86400) + [unixtime]]
   set reason [join [lrange $arguments 2 end]]
  } else {
   set expire 0
   set reason [join [lrange $arguments 1 end]]
  }
  if {[llength $reason] >= 1} {
    if {![info exists blacklist($banmask)]} {
      set blacklist($banmask) "$owner $expire $reason"
      puthelp "NOTICE $nickname :Fait. $banmask Blacklisté éffectué (raison: $reason)."
      blacklist:sentry
    } else {
      puthelp "NOTICE $nickname :Désolé, impossible d'ajouter ce Hostmask."
    }
  } else {
    puthelp "NOTICE $nickname :Precisez la raison de Blacklist."
  }
}
 
 
proc blacklist:del {nickname hostname handle channel arguments} {
 global blacklist
  set arguments [blacklist:clean $arguments]
  set banmask [lindex $arguments 0]
  set success 0
  if {[regexp {^#([0-9]+)$} $banmask tmp number]} {
    set item 0
    foreach entry [array names blacklist] {
      incr item
      if {$item == $number} {
        unset blacklist($entry)
        set success 1
      }
    }
  } else {
    if {[info exists blacklist($banmask)]} {
      unset blacklist($banmask)
      set success 1
    }
  }
  if {$success == 0} {
    puthelp "NOTICE $nickname :Erreur: enlever le pseudo comme suit: .-bl Pseudo!*@* ."
  } else {
    puthelp "NOTICE $nickname :Pseudo enlevé de la Blacklist."
  }
}
 
 
proc blacklist:sentry {{minute "0"} {hour "0"} {day "0"} {week "0"} {year "0"}} {
 global blacklist
  foreach channel [channels] {
    if {![botisop $channel]} {continue}
    foreach target [chanlist $channel] {
      set userhost [blacklist:weirdclean "$target![getchanhost $target]"]
      foreach entry [array names blacklist] {
        set expire [lindex $blacklist($entry) 1]
        if {$expire >= [unixtime] || ($expire == 0)} {
          set reason [lrange [blacklist:clean $blacklist($entry)] 2 end]
          set blackhost [blacklist:weirdclean $entry]
          if {[string match -nocase $blackhost $userhost]} {
            putquick "MODE $channel -o+b $target $entry"
            putquick "KICK $channel $target :[join $reason]"
          }
        } else {
          unset blacklist($entry)
        }
      }
    }
  }
  blacklist:save
}
 
 
proc blacklist:join {nickname hostname handle channel} {
 global blacklist
  if {![botisop $channel]} {return}
  set userhost [blacklist:weirdclean "$nickname![getchanhost $nickname]"]
  foreach entry [array names blacklist] {
    set reason [lrange [blacklist:clean $blacklist($entry)] 2 end]
    set blackhost [blacklist:weirdclean $entry]
    if {[string match -nocase $blackhost $userhost]} {
      putquick "MODE $channel -o+b $nickname $entry"
      putquick "KICK $channel $nickname :[join $reason]"
    }
  }
}
 
 
proc blacklist:validate:host {i} {
  regsub -all {\*+} $i {*} i
  array set ban {
    ident *
    host *
  }
  set ban(nick) $i
  if {[regexp -- {!} $i]} {
    regexp -- {^(.+?)!(.*?)(@(.*))?$} $i tmp ban(nick) ban(ident) tmp ban(host)
  } elseif {[regexp -- {@} $i]} {
    regexp -- {^(.+!)?(.*?)(@(.*))?$} $i tmp ban(nick) ban(ident) tmp ban(host)
  }
  foreach item [array names ban] {
    if {[string length $ban($item)] < 1} {
      set ban($item) *
    }
  }
  return $ban(nick)!$ban(ident)@$ban(host)
}
 
 
proc blacklist:load {} {
 global blacklist blacklist_file
  regexp {(\S+/)?} $blacklist_file tmp blacklist_dir
  if {$blacklist_dir != ""} {
    if {![file isdirectory $blacklist_dir]} {
      file mkdir $blacklist_dir
      putlog "Created directory: $blacklist_dir"
    }
  }
  if {![file exists $blacklist_file]} {
    array set blacklist {}
    return
  }
  if {[array exists blacklist]} {
    array unset blacklist
  }
  set file [open $blacklist_file r]
  while {![eof $file]} {
    gets $file line
    if {[regexp -- {(\S+)\s(\S+)\s(\S+)\s(.+)} $line tmp banmask owner expire reason]} {
      if {$expire >= [unixtime] || ($expire == 0)} {
        set blacklist($banmask) "$owner $expire $reason"
      }
    }
  }
  close $file
}
 
 
proc blacklist:save {} {
 global blacklist blacklist_file
  set file "[open $blacklist_file w]"
  foreach entry [array names blacklist] {
    puts $file "$entry $blacklist($entry)"
  }
  close $file
}
 
 
proc blacklist:weirdclean {i} {
  regsub -all -- \\\\ $i \001 i
  regsub -all -- \\\[ $i \002 i
  regsub -all -- \\\] $i \003 i
  regsub -all -- \\\} $i \004 i
  regsub -all -- \\\{ $i \005 i
  return $i
}
 
 
proc blacklist:clean {i} {
  regsub -all -- \\\\ $i \\\\\\\\ i
  regsub -all -- \\\[ $i \\\\\[ i
  regsub -all -- \\\] $i \\\\\] i
  regsub -all -- \\\} $i \\\\\} i
  regsub -all -- \\\{ $i \\\\\{ i
  regsub -all -- \\\" $i \\\\\" i
  return $i
}
 
 
blacklist:load


Maintenant j'aimerais y ajouter une commande quand je tape !purgebl que ca m'efface le fichier entier de la blacklist j'ai essayé d'ajouter comme ceci


tcl
bind pub m|- \!purgebl blacklist:purge 
proc blacklist:purge { nick host hand chan args } { 
global blacklist 
set f [delete "./scripts/dbase/blacklist"] 
close $f 
}


Mais rien n'y fais si je tape purgebl et que je rehash ca fonctionne mais apres quand j'ajoute quelqu'un à la blacklist et bien si je retape !purgebl ca n'enleve rien.

je cherche donc une petite commande simple qui en tapant !purgebl supprime le fichier entier de la blacklist.

Merci de votre futur aide
#2
Et comme ceci ->


tcl
bind pub m !purgebl blacklist:purge 
proc blacklist:purge { nick uhost hand chan arg } { 
global blacklist 
    set blID [open "scripts/dbase/blacklist" w+] 
    close $blID
    putserv "PRIVMSG $chan: Purge de la blackliste éffectuée." 
    return 
}


A savoir que cette commande va vider le fichier et non le supprimer.
Pour la suppression de ton fichier tu devras utiliser
Code:
exec rm "scripts/dbase/blacklist"

Crdlt
#3
Merci pour la reponse

j'ai juste rectifié une erreure

tcl
putserv "PRIVMSG $chan: Purge de la blackliste éffectuée."


j'ai mis puthelp et rectifié en mettant
tcl
puthelp "PRIVMSG $chan :Purge de la blackliste éffectuée."

car ca ne mettais pas le message sur le chan lol

Merci encore.
#4
Je reviens sur le sujet de la Blackliste car en fait jeme suis aperçus que quand on ajoute quelqu'un dans la BL elle s'ajoute bien, quand on la retire elle se retire MAIS apres un rehash ou restart la personne retiré de la BL réapparais dans la liste.

voici le tcl


tcl
set blacklist_file "scripts/dbase/blacklist"
 
 
bind PUB  m|- \!bl  blacklist:list
bind PUB  m|- \.+bl   blacklist:add
bind PUB  m|- \.-bl   blacklist:del
bind TIME -|- "0* * * * *" blacklist:sentry
bind JOIN -|- *            blacklist:join
 
proc blacklist:list {nickname hostname handle channel arguments} {
global blacklist
  set entrys 0
  puthelp "PRIVMSG $nickname :Liste des Blacklistés"
  puthelp "PRIVMSG $nickname :Nr. Owner           Hostmask"
  foreach entry [array names blacklist] {
    incr entrys
    set owner [lindex $blacklist($entry) 0]
    while {[string length $owner] < 15} {
      set owner "$owner "
    }
    if {[string length $entrys] < 2} {
      set target "$entrys "
    } else {
      set target $entrys
    }
    puthelp "PRIVMSG $nickname :#$target $owner $entry"
  }
  puthelp "PRIVMSG $nickname :Fin de liste."
}
 
 
proc blacklist:add {nickname hostname handle channel arguments} {
global blacklist
  set arguments [blacklist:clean $arguments]
  set banmask [blacklist:validate:host [lindex $arguments 0]]
  if {([regexp -all -- {!} $banmask] > 1) || ([regexp -all -- {@} $banmask] > 1)} {
    puthelp "NOTICE $nickname :Sorry, couldn't add that hostmask."
    return
  }
  set owner $handle
  if {[regexp {^(\d{1,2}|[0-3][0-6][0-5])$} [lindex $arguments 1]]} {
   set expire [expr ([lindex $arguments 1] * 86400) + [unixtime]]
   set reason [join [lrange $arguments 2 end]]
  } else {
   set expire 0
   set reason [join [lrange $arguments 1 end]]
  }
  if {[llength $reason] >= 1} {
    if {![info exists blacklist($banmask)]} {
      set blacklist($banmask) "$owner $expire $reason"
      puthelp "NOTICE $nickname :Fait. $banmask Blacklisté éffectué (raison: $reason)."
      blacklist:sentry
    } else {
      puthelp "NOTICE $nickname :Désolé, impossible d'ajouter ce Hostmask."
    }
  } else {
    puthelp "NOTICE $nickname :Precisez la raison de Blacklist."
  }
}
 
 
proc blacklist:del {nickname hostname handle channel arguments} {
global blacklist
  set arguments [blacklist:clean $arguments]
  set banmask [lindex $arguments 0]
  set success 0
  if {[regexp {^#([0-9]+)$} $banmask tmp number]} {
    set item 0
    foreach entry [array names blacklist] {
      incr item
      if {$item == $number} {
        unset blacklist($entry)
        set success 1
      }
    }
  } else {
    if {[info exists blacklist($banmask)]} {
      unset blacklist($banmask)
      set success 1
    }
  }
  if {$success == 0} {
    puthelp "NOTICE $nickname :Erreur: enlever le pseudo comme suit: .-bl Pseudo!*@* ."
  } else {
    puthelp "NOTICE $nickname :Pseudo enlevé de la Blacklist."
  }
}
 
 
proc blacklist:sentry {{minute "0"} {hour "0"} {day "0"} {week "0"} {year "0"}} {
global blacklist
  foreach channel [channels] {
    if {![botisop $channel]} {continue}
    foreach target [chanlist $channel] {
      set userhost [blacklist:weirdclean "$target![getchanhost $target]"]
      foreach entry [array names blacklist] {
        set expire [lindex $blacklist($entry) 1]
        if {$expire >= [unixtime] || ($expire == 0)} {
          set reason [lrange [blacklist:clean $blacklist($entry)] 2 end]
          set blackhost [blacklist:weirdclean $entry]
          if {[string match -nocase $blackhost $userhost]} {
            putquick "MODE $channel -o+b $target $entry"
            putquick "KICK $channel $target :[join $reason]"
          }
        } else {
          unset blacklist($entry)
        }
      }
    }
  }
  blacklist:save
}
 
 
proc blacklist:join {nickname hostname handle channel} {
global blacklist
  if {![botisop $channel]} {return}
  set userhost [blacklist:weirdclean "$nickname![getchanhost $nickname]"]
  foreach entry [array names blacklist] {
    set reason [lrange [blacklist:clean $blacklist($entry)] 2 end]
    set blackhost [blacklist:weirdclean $entry]
    if {[string match -nocase $blackhost $userhost]} {
      putquick "MODE $channel -o+b $nickname $entry"
      putquick "KICK $channel $nickname :[join $reason]"
    }
  }
}
 
 
proc blacklist:validate:host {i} {
  regsub -all {\*+} $i {*} i
  array set ban {
    ident *
    host *
  }
  set ban(nick) $i
  if {[regexp -- {!} $i]} {
    regexp -- {^(.+?)!(.*?)(@(.*))?$} $i tmp ban(nick) ban(ident) tmp ban(host)
  } elseif {[regexp -- {@} $i]} {
    regexp -- {^(.+!)?(.*?)(@(.*))?$} $i tmp ban(nick) ban(ident) tmp ban(host)
  }
  foreach item [array names ban] {
    if {[string length $ban($item)] < 1} {
      set ban($item) *
    }
  }
  return $ban(nick)!$ban(ident)@$ban(host)
}
 
 
proc blacklist:load {} {
global blacklist blacklist_file
  regexp {(\S+/)?} $blacklist_file tmp blacklist_dir
  if {$blacklist_dir != ""} {
    if {![file isdirectory $blacklist_dir]} {
      file mkdir $blacklist_dir
      putlog "Created directory: $blacklist_dir"
    }
  }
  if {![file exists $blacklist_file]} {
    array set blacklist {}
    return
  }
  if {[array exists blacklist]} {
    array unset blacklist
  }
  set file [open $blacklist_file r]
  while {![eof $file]} {
    gets $file line
    if {[regexp -- {(\S+)\s(\S+)\s(\S+)\s(.+)} $line tmp banmask owner expire reason]} {
      if {$expire >= [unixtime] || ($expire == 0)} {
        set blacklist($banmask) "$owner $expire $reason"
      }
    }
  }
  close $file
}
 
 
proc blacklist:save {} {
global blacklist blacklist_file
  set file "[open $blacklist_file w]"
  foreach entry [array names blacklist] {
    puts $file "$entry $blacklist($entry)"
  }
  close $file
}
 
 
proc blacklist:weirdclean {i} {
  regsub -all -- \\\\ $i \001 i
  regsub -all -- \\\[ $i \002 i
  regsub -all -- \\\] $i \003 i
  regsub -all -- \\\} $i \004 i
  regsub -all -- \\\{ $i \005 i
  return $i
}
 
 
proc blacklist:clean {i} {
  regsub -all -- \\\\ $i \\\\\\\\ i
  regsub -all -- \\\[ $i \\\\\[ i
  regsub -all -- \\\] $i \\\\\] i
  regsub -all -- \\\} $i \\\\\} i
  regsub -all -- \\\{ $i \\\\\{ i
  regsub -all -- \\\" $i \\\\\" i
  return $i
}
 
 
blacklist:load


Si quelqu'un a une petite idée du pourquoi sur le moment ca retire bin de la BL mais qu'apres un rehash ou restart la personne reviens en BL

Merci d'avance
#5
Problème résolu
j'ai ajouté un blacklst:save dans la procedure de suppression d'un Blacklisté.

Merci de votre aide
#6
elle a l'air bien ta blackliste.est ce possible de mettre une raison par default si jamais ont n'en met pas quand ont ajoute un user ?

ont peut la recuperer ou ?
#7
Bonjour Amélie,

Tu peux recuperer la Blacklist en copiant le code qui est dans le message.


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Bug] Soucis avec un tcl Dark.tcl de Kyrien d'après la création de GeoZzZ [Sujet Reformulé] KeeViiNou 2 3,329 24/02/2017, 10:59
Last Post: KeeViiNou
  [Demande] Soucis avec expr aliasangelius 6 4,242 13/01/2017, 18:06
Last Post: aliasangelius
  Soucis avec un tcl KeeViiNou 1 3,775 08/05/2016, 14:06
Last Post: KeeViiNou
  [Résolu] Soucis avec une commande Scorpio 11 6,484 22/01/2016, 12:58
Last Post: Scorpio
  Soucis de codage avec un kick KeeViiNou 14 8,615 26/03/2014, 23:18
Last Post: KeeViiNou
  Soucis avec un codage KeeViiNou 9 6,418 14/03/2014, 21:22
Last Post: aliasangelius
  Soucis avec un tcl de sajoin KeeViiNou 15 11,307 14/03/2014, 10:51
Last Post: KeeViiNou
  [Résolu] [Aide]Problème avec un tcl Naruto 6 5,972 17/07/2013, 20:56
Last Post: CrazyCat
  [résolu] beug avec Clams moderation final lesny 8 6,939 01/11/2012, 22:53
Last Post: heretoc
  Une Blacklist par salon. aliasangelius 4 5,022 15/10/2012, 12:07
Last Post: aliasangelius

Forum Jump:


Users browsing this thread: 1 Guest(s)