Package:MySQLTcl

De Base de connaissances eggdrops & TCL

Dans ce tutoriel vous allez apprendre a utiliser le paquage mySQLTCL.

Pré-requis

  • La présence de la librairie MysqlTcl sur votre machine (si elle n'est pas installée, allez sur http://www.xdobry.de/mysqltcl/)
  • Connaissance du language SQL

Pourquoi utiliser les bases de données sql ?

On pourrait bien évidement se poser la question de pourquoi utiliser les bases de données sql alors qu'on a beaucoup de fonction à notre disposition sur notre eggdrop. On peut par exemple utiliser les fichiers et donc se compliquer beaucoup moins la vie.

La réponse est simple. Personnelement, j'utilise les bases de données mySQL car je trouve le système facile, une fois qu'on a compris, l'utilisation reste hyper simple.

Après, vous avez la possibilité en utilisant des bases de données sql de pouvoir générer des statistiques plus facilement depuis votre site internet (je sais bien qu'il existe plusieurs façon pour générer des statistiques de ce genre, mais je pense que l'utilisation des bases de donnée sql est la meilleure solution), aussi, vous pouvez vous en servir pour faire un panel réservé aux personnes ayant accé a votre robot.

Bref, je ne sais encore quel délire vous pourrez réalisé avec l'utilisation de ces bases.

Comment utiliser les bases de données sql ?

Liste des fonctions MySQL

Le Package:MySQLTcl permet d'effectuer la plupart des opérations courante sur MySQL.

Attention.png Les commandes données ici sont génériques, mais depuis la version 3 du package il est recommandé d'utiliser le namespace ::mysql.


Voici la liste des commandes disponibles:

Code exemple

##############
# CONFIGURATION #
##############

# -> Login 
set sql(login) "root"
# -> Mot de passe 
set sql(pass) "pass" 
# -> Nom de la base de donnée
set sql(db) "root"
# -> L'host a l'aquelle ce connecté
set sql(host) "localhost"
# -> Localisation de fichier mysql.sock
set sql(sock) "/tmp/mysql.sock"

###########
# PAQUETAGE #
###########

catch {package require mysqltcl}

#######
# CODE  #
#######

#########
# CONNECT #
#########
proc service:connect {} {
	set ::mysqlink [::mysql::connect -host $::sql(host) -user $::sql(login) -password $::sql(pass) -sock $::sql(sock)]
	::mysql::use $::mysqlink $::sql(db)
}

###########
# DECONNECT #
###########

proc service:deconnect {} {
	::mysql::close $::mysqlink;
        unset -nocomplain ::mysqlink
}

Bon ben dans un premier temps, ont définit la configuration du script, soit les informations qui vont nous permettres de ce connecté a la base.

Ensuite, la ligne ci dessous "dit a l'interpreteur que l'on veut utilité le paquage mysqltcl", c'est a dire pouvoir utilisé les commandes utilisables par ce paquage.

catch {package require mysqltcl}

A noter que "catch" permet de parer les éventuelles érreur, soi de ne pas faire planter votre eggdrop au cas ou la librairie ne soit pas installer cher votre hébergeur.

Pour finir, on a les fonctions "connect" et "deconnect". Je ne voie pas ce que je peut expliquer, les commandes sont simple, cela fonctionne comme je l'ai mit dans la source, donc a vous de faire un effort de comprehension (en gros, je vais pas m'amuser a expliquer les deux lignes importante, car les mots-clefs veulent tout dire).

Jusqu'a présent, c'est bien, ont a la possibilité de ce connecté a une base de donnée. Nous allons voir maintenant comment vérifier des conditions, et ma fois s'amuser, car c'est un jeux d'enfant.

Copier dans un premier temps ce code par le biais de phpmyadmin :

-- 
-- Structure de la table `access`
-- 

CREATE TABLE `access` (
  `id` int(4) NOT NULL auto_increment,
  `pseudo` text NOT NULL,
  `pass` text NOT NULL,
  `grade` text NOT NULL,
  `suspend` text NOT NULL,
  `statut` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

-- 
-- Contenu de la table `access`
-- 

INSERT INTO `access` (`id`, `pseudo`, `pass`, `grade`, `suspend`, `statut`) VALUES 
(1, 'DaV34', 'machin', '4', 'Off', 'On');

Bien, en gros, la, ont crée une table avec 6 colones qui sont les suivantes : id pseudo pass grade suspend statut.

Ici, je reprend un systeme d'authentification.

Il faut savoir que la colone grade sera un chiffre (afin de faciliter la gestion, en effet, ont peut imaginer que les helpeurs auront un access 1, les géo un access niveau 2 ...) et les commandes suspend et statut pourront contenir ou "On" ou Off" (en effet, pour savoir si quelqu'un est auth, si son access est suspendue ...

Treve d'explication, voila maintenant un code qui vous explique comment proceder pour votre systeme d'authentification :

##############
# CONFIGURATION #
##############

# -> Login 
set sql(login) "root"
# -> Mot de passe 
set sql(pass) "pass" 
# -> Nom de la base de donnée
set sql(db) "root"
# -> L'host a l'aquelle ce connecté
set sql(host) "localhost"
# -> Localisation de fichier mysql.sock
set sql(sock) "/tmp/mysql.sock"

###########
# PAQUETAGE #
###########

catch {package require mysqltcl}

#######
# CODE  #
#######

#########
# CONNECT #
#########
proc service:connect {} {
	set ::mysqlink [::mysql::connect -host $::sql(host) -user $::sql(login) -password $::sql(pass) -sock $::sql(sock)]
	::mysql::use $::mysqlink $::sql(db)
}

###########
# DECONNECT #
###########

proc service:deconnect {} {
	::mysql::close $::mysqlink; unset -nocomplain ::mysqlink	
}

########
# ISAUTH #
########

proc isauth {arg} {
   service:connect
   set res [::mysql::sel $::mysqlink "select statut from access where pseudo = '$arg' and statut = 'On'"]
   service:deconnect
   return $res
}

##########
# ISSUSPEND #
##########

proc issuspend {arg} {
   service:connect
   set res [::mysql::sel $::mysqlink "select statut from access where pseudo = '$arg' and suspend = 'On'"]
   service:deconnect
   return $res
}

############
# ISVALIDUSER #
############

proc isvaliduser {arg} {
   service:connect
   set res [::mysql::sel $::mysqlink "select pseudo from access where pseudo = '$arg'"]
   service:deconnect
   return $res
}

################
# ISVALIDPASSWORD #
################

proc isvalidpassword {pseudo pass} {
   service:connect
   set res [::mysql::sel $::mysqlink "select pseudo, pass from access where pseudo = '$pseudo' and pass = '$pass'"]
   service:deconnect
   return $res
}

########
# AUTH #
########

proc auth {arg} {
   service:connect
   ::mysql::exec $::mysqlink "UPDATE `access` SET `statut` = 'On' WHERE pseudo = '$arg'"
   service:deconnect
}

#######
# AUTH  #
#######

bind msg - auth msg:auth
proc msg:auth {nick host hand arg} {
   set pseudo [lindex $arg 0]
   set pass [lindex $arg 1]
   if { $pseudo == "" || $pass == "" } { puthelp "NOTICE $nick :Commande auth : /msg $::botnick auth <pseudo> <pass>"; return 0 }
   if { ![isvaliduser $pseudo] } { puthelp "NOTICE $nick :$pseudo user inconnue !"; return 0 }
   if { [isvalidpassword $pseudo $pass] } {
      if { [issuspend $pseudo] } { puthelp "NOTICE $nick :Accés suspendu"; return 0 }
      if { [isauth $pseudo] } { puthelp "NOTICE $nick :Vous êtes déjà  identifié !"; return 0 }
      puthelp "NOTICE $nick :Félicitation, vous êtes identifié"
      auth $pseudo
   } else {
      puthelp "NOTICE $nick :Erreur, mot de passe incorrect."; return 0
   }
}
Attention.png Notez bien sur la procédure auth que l'on utilise ::mysql::exec plutôt que ::mysql::sel car ce n'est pas une requête SELECT.


Liens utiles