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
}
}