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


Identification MYSQL
#1
Bonjour,

Je m'adresse à vous après plusieurs heures de recherche sans succès.

J'aimerai créé un script qui permet à une personne de se faire voice par mon bot en s'identifiant par l'intermédiaire d'une base SQL par la commande !ident pseudo pass

Voici ce que j'ai fais pour le moment et qui check juste le pseudo sans le mot de passe mais qui ne fonctionne pas...


Code:
set mysqlserver localhost;
set mysqluser user;
set mysqlpwd pass;
set mysqldb base;

set userChan "#monchan"

bind pub - !ident msg_voice

proc msg_voice { nick uhost hand chan arg } {
        global userChan
        set userLogin [lindex $arg 0]
        set userPassword [lindex $arg 1]
        if {[botonchan $userChan]} {
                set h [mysqlconnect -h  $::mysqlserver -u $::mysqluser -password $::mysqlpwd];
                mysqluse $h $::mysqldb;
                if {[mysqlexec $h "SELECT * FROM users WHERE pseudo = '$userLogin'";]}
                {
                putquick "MODE #monchan +v $nick"
                mysqlclose $h;}
}
}

Une idée ? :)
#2
hello,

voici un script tcl qui lui aussi voice par via MSQL,en espérant que cela pourra t’orienté dans ton projet.


tcl
### mysql settings ###
 
set mysql(host) "localhost"
# hostname of the mysql server
set mysql(dbase) "database"
# name of the mysql dbase
set mysql(user) "mysqluser"
# name of the mysql user
set mysql(pass) "password"
# password for the mysql user
set mysql(fbsql) "/home/yourlogin/fbsql/fbsql.so"
# path to the fbsql.so tcl mysql api
 
### other settings ###
set sqlvoice(channels) "#channelA #channelB #channelC"
# channels that script should check nicks on join
set sqlvoice(case) "1"
# should we be case sensitive (1 = yes | 0 = no)
set sqlvoice(greetings) {
	{Welcome $name, you have seat number $seat, there are $count other people registered.}
	{Sup $name, your p0w4h-seat is no. $seat, and you have $count n00bz to 0wn.}
}
# greetings for your users, a random message will be shown on join
# '$name' (users real name) '$seat' (users seat) and '$count' (total users)
 
 
### end settings ###
 
# lets load fbsql tcl mysql api if it is not already loaded
if {![string match *sql* [info commands]]} { catch {load $mysql(fbsql)} }
 
# lets initialize our sqlsessions (see next proc for how sessions are managed)
if {(![info exists sqlsession]) || ($sqlsession > 10)} { set sqlsession 0 }
 
# now, lets make a nice proc to take advantage of the fbsql sessions
proc sql:connect {} {
global mysql sqlsession
	  if {($sqlsession == 0) || ($sqlsession > 10)} {
		set sqlsession 0 ; set sqlcmd "sql"
	} else { set sqlcmd "sql$sqlsession" }
	if {[catch {$sqlcmd connect $mysql(host) $mysql(user) $mysql(pass)} connect_error] != 0} {
		if {[string match {*already connected*} "$connect_error"]} {
			catch {$sqlcmd disconnect} ; sql:connect
		} else {
			putlog "\[\002ERROR\002\] Could not connect do database: $connect_error"
			catch {$sqlcmd disconnect} ; return
		}
	}
	if {[catch {$sqlcmd selectdb $mysql(dbase)} select_error] != 0} {
		putlog "\[\002ERROR\002\] Count not select database: $select_error"
		catch {$sqlcmd disconnect} ; return
	}
	incr sqlsession
	return "$sqlcmd"
}
 
# okie...here it is, the actual voice on join proc
proc do:voice { nick uhost hand chan } {
global sqlvoice botnick
	set sqlcmd [sql:connect]
	if {$sqlvoice(case)} {
		foreach {name seat} [lindex [$sqlcmd "SELECT `Navn`, `Seat` FROM `Deltakere` WHERE binary `Nick` = '$nick'"] 0] {}
	} else {
		foreach {name seat} [lindex [$sqlcmd "SELECT `Navn`, `Seat` FROM `Deltakere` WHERE `Nick` = '$nick'"] 0] {}
	}
	set count [$sqlcmd "SELECT COUNT(*) FROM `Deltakere`"]; catch {$sqlcmd disconnect}
	if {((([info exists name]) && (![string equal {} $name])) && (([info exists seat]) && (![string equal {} $seat])))} {
		puthelp "PRIVMSG $chan :[subst [join [lindex $sqlvoice(greetings) [rand [expr [llength $sqlvoice(greetings)] -1]]]]]"
		puthelp "MODE $chan +v $nick"
	}
}
bind join - * do:voice



Cordialement DnS
La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.
#3
Ton script est sympa, mais il ne résout pas mon soucis il me semble.

Moi, je souhaite que mon bot aille checker un login et un mot de passe dans une base de donnée quand l'utilisateur saisit la commande !ident pseudo pass

=O
#4
Il suffit de remplacer le bind, et de modifier la procédure dovoice.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#5
Le soucis, c'est que je débute en codage TCL. Je suis un Newbie dans ce bel univers. Une explication codée me serait très utile, j'ai effectivement du mal avec les syntaxes.. =S
#6
Cobraz Wrote:Voici ce que j'ai fais pour le moment et qui check juste le pseudo sans le mot de passe mais qui ne fonctionne pas...
Cobraz Wrote:Le soucis, c'est que je débute en codage TCL. Je suis un Newbie dans ce bel univers. Une explication codée me serait très utile, j'ai effectivement du mal avec les syntaxes.. =S
Tu te contredis... Très fortement.

Mais je suis dans un jour de bonté:

tcl
proc do:voice { nick uhost hand args } {


tcl
bind msg - "!ident" do:voice

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#7
Merci !

Bon mon seul soucis c'est qu'il faut que je trouve la librairie fbsql.so qui n'est apparemment pas dispo dans les paquets de Debian.

J'utilisais mysqltcl.so jusqu'à présent ;)
#8
Je viens de tester votre code avec la bonne librairie il ne fonctionne pas.

Je vais essayé de me débrouiller autrement en essayant de bidouiller mon propre code et de trouver la bonne syntaxe.

Merci quand même,
#9
Je reviens vers vous concernant mon bout de code. J'ai réussi à faire ce que je voulais grâce notamment à votre très bon tuto sur le wiki de eggdrop.fr

Il me reste un tout petit soucis avec ce bout de code:


Code:
bind pub - !grade_up grade:up
proc grade:up {nick host hand chan arg} {
   set mot1 [lindex $arg 0]
   service:connect
   set grade [mysqlresult $::mysqlink "select grade from users where pseudo = '$mot1'"]
    service:deconnect
    puthelp "NOTICE $nick : $grade"
   if { [isauth $mot1] } { putquick "MODE $chan +v $mot1";}
    }
Je voudrais en fait stocker dans la variable $grade la chaine de caractère qui se trouve dans ma commande mysql, mais au lieu de stocker cette chaine de caractère, cela m'enregistre la valeur "1" qui est le code réponse de la bonne opération de la commande SQL.

Comment faire pour stocker ma chaine de caractère qui se trouve dans ma BDD dans cette variable ?

Merci d'avance pour vos lumières.


Possibly Related Threads…
Thread Author Replies Views Last Post
  [HELP@mysql~TCL] Script perso trent 3 4,299 05/09/2010, 10:17
Last Post: CrazyCat
  MySQL-TCL BeussAy 15 10,627 11/01/2009, 01:19
Last Post: BeussAy
  Identification automatique CrazyCat 7 10,998 23/06/2008, 10:17
Last Post: BdS
  Topic avec un Db mysql [ Resolu ] Smatrix3 2 5,161 03/10/2006, 23:48
Last Post: Smatrix3

Forum Jump:


Users browsing this thread: 1 Guest(s)