Quand on est admin, c'est parfois lourd de voir quelqu'un changer de pseudo pour retenter sa chance apres qu'il au pourri sa reputation, ce script l'empechera de faire puisqu'il affiche les anciens pseudos de chaque personne se connectant...
Code tcl
Comatible xchat
mysqltcl requis
la seconde ligne vous permet de configurer vos parametres sql : [mysqlconnect -host localhost -user root]
Source / Exemple :
package require mysqltcl
set db [mysqlconnect -host localhost -user root]
mysqlquery $db {CREATE DATABASE IF NOT EXISTS tcl}
mysqlquery $db {USE tcl}
mysqlquery $db {CREATE TABLE IF NOT EXISTS hosts2nicks(nick VARCHAR(100), host VARCHAR(100));}
on JOIN reqjoin {
splitsrc
if { $_nick != [me] } {
autrenicks $_host $_nick $_dest
}
}
# Ceci alerte chaque fois que quelqu'un join
# Les anciens pseudos et vhosts qu'il a eu.
# si qqn vole un pseudo a qqn, alors le code est fausse..
proc allnick { host liste } {
#donne tout les pseudos qui ont ete associe a un vhost
global db
set query [mysqlquery $db "SELECT trim(nick) as nick FROM hosts2nicks WHERE host=\"$host\""]
mysqlmap $query nick {
if { [inliste $host $nick $liste] == 0 } {
set liste [ addliste $host $nick $liste ]
set liste [ allhosts $nick $liste ]
}
}
mysqlendquery $query
return $liste
}
proc allhosts { nick liste } {
#donne tout les vhosts qui ont ete associes a un pseudo
global db
set query [mysqlquery $db "SELECT host FROM hosts2nicks WHERE nick=\"$nick\"" ]
mysqlmap $query host {
if { [inliste $host $nick $liste] == 0 } {
set liste [ addliste $host $nick $liste ]
set liste [ allnick $host $liste ]
}
}
mysqlendquery $query
return $liste
}
proc addliste { host nick liste } {
#ajoute quelqu'un dans la liste des gens selectiones pour l'affichage
set var "[string trim $nick]"
lappend liste $var
return $liste
}
proc inliste { host nick liste } {
#dit si qqn a deja ete selectione
set var "[string trim $nick]"
foreach { each } $liste {
if { $each == $var } {
return 1
}
}
return 0
}
proc noalreadyregister { nick host } {
#dit si qqn a deja ete enregistre avec un pseudo et un vhost
global db
set query [mysqlquery $db "SELECT 1 FROM hosts2nicks WHERE nick=\"$nick\" AND host=\"$host\"" ]
mysqlmap $query nombre { return 1 }
mysqlendquery $query
return 0
}
proc enregnickhosts { nick host } {
#enregistre un pseudo et un vhost dans la base
global db
if { ! [noalreadyregister $nick $host] } {
mysqlquery $db "INSERT INTO hosts2nicks SET nick=\"$nick\", host=\"$host\""
}
}
proc noserv { hash } {
set r {^(.*@)?([^\-]*)(\-?.*)$}
if { [ regexp $r $hash m ] } {
regexp $r $hash s top serveur clients
if { $clients == "" } {
return $serveur
} else {
return $clients
}
} else {
return $hash
}
}
proc autrenicks { _host _nick _dest } {
#affiche lors de la connexion tout les pseudos et vhosts associes a une personne.
if { [can_ghost $_host ] } {
set _host [noserv $_host]
enregnickhosts $_nick $_host
set liste [ allnick $_host [ list ] ]
set liste [ allhosts "$_nick " $liste ]
if { [llength $liste] > 1 } {
print $_dest [join $liste " "]
} else {
#print $_dest "un seul login et host"
}
}
}
alias autres {
#commande pour chercher qqn
set liste [ allhosts $_rest [list ] ]
print [join $liste " "]
}
alias register__ {
#commande pour enregistrer qqn
set a [split $_rest " "]
set nick [lindex $a 0]
set host [noserv [lindex $a 1] ]
if { ! [noalreadyregister $nick $host ] } {
print "nick : $nick host : $host"
enregnickhosts $nick $host
}
}
Conclusion :
sur certains serveurs, ils ips sont formates bizarements, les regexp que j'ai places ne seront pas forcement les bonnes pour vos serveurs favoris...
j'utilise ca sur irc.heliosnet.org #programmation le chan officiel de codes-sources entre autre
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.