begin process at 2008 07 06 07:29:49
1 205 474 membres
53 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

XCHAT - TCL - MYSQL ANCIENS PSEUDOS


Information sur la source



Description

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

  • 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
  • }
  • }
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
  • signaler à un administrateur
    Commentaire de PaDa le 13/12/2007 13:31:05

    Je tombe sur ce code par hasard, je trouve ça très sympa, et facile à lire.
    Ca me donne envie de me mettre à TCL sous Xchat :) Merci !

Ajouter un commentaire

Discussions en rapport avec ce code source

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS