Xchat - tcl - mysql anciens pseudos

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 804 fois - Téléchargée 18 fois

Contenu du snippet

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

A voir également

Ajouter un commentaire

Commentaire

Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
4
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 !

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.