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 ? Smile
Répondre Avertir
#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
[font=Times New Roman]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.[/font]
Répondre Avertir
#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
Répondre Avertir
#4
Il suffit de remplacer le bind, et de modifier la procédure dovoice.
Répondre
#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
Répondre Avertir
#6
Cobraz a écrit :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 a écrit :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


Répondre
#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 Wink
Répondre Avertir
#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,
Répondre Avertir
#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.
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté