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;}
}
}
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 serverset mysql(dbase)"database"# name of the mysql dbaseset mysql(user)"mysqluser"# name of the mysql userset mysql(pass)"password"# password for the mysql userset 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 joinset 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 loadedif{![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 sessionsproc 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 procproc 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]
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
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
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
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 ?