[Tuto] mysqltcl pour les nuls
#1
à la demande d'un utilisateur de la board je me permet de refaire un tuto

@Source: Eggdrop.fr - wiki:mysqltcl

Pré-requis: Votre dédié dois disposer d'un serveur mySQL

le package mysqltcl
information:

Le package mysqltcl permet a un script TCL d'effectuer des requêtes
sur une base de donnée SQL, On va donc travailler sur les principales
requêtes qui sont: INSERT INTO, UPDATE, SELECT & DELETE FROM, mais avant
on va préparer le serveur à accueillir les requêtes via le language TCL

Nous avons besoin du package mysqltcl
logguez-vous en root sur votre serveur et effectuez la commande suivante
Code :
# apt-get install mysqltcl

Si vous n'avez pas accès au root du dédié demandez à l'administrateur
si le package mysqltcl à été installé sur son dédié

Ce dont on a besoin pour ce TCL:
Le login
Le pass
Le nom de la base
un endroit pour générer une socket

on commence:

on va donc maintenant créer notre requête SQL pour créer notre table
Code :
--
-- Structure de la table `acces`
--
CREATE TABLE  `acces` (
`pseudo` TEXT NOT NULL ,
`pass` TEXT NOT NULL ,
`grade` TEXT NOT NULL ,
`suspend` TEXT NOT NULL ,
`status` TEXT NOT NULL ,
`nick` TEXT NOT NULL
) ENGINE = MYISAM DEFAULT CHARSET=latin1;
--
-- Contenu de la table `acces`
--
INSERT INTO `acces` (`pseudo`, `pass`, `grade`, `suspend`, `statut`, `nick`) VALUES ('Ahinu', 'b3rliN', '4', 'OFF', 'OFF', '0');
On crée donc par la même occasion l'accès (pseudo Ahinu) avec le mot de passe (pass b3rliN) sur le grade IRC Admin (grade 4)
dont le suspend n'est pas actif (suspend Off) ou l'accès n'est pas utilisé (status off) et le nick n'est pas logué (nick 0)

Code :
# vi acces.tcl

On va dans un premier temps créer la configuration de connexion à la base mySQL
Et afficher la liste des utilisateurs enregistrés dans le robot

tcl
#######################################
# Mon premier script tcl avec mysqtcl #
#######################################
#Login mySQL
set ahi(sql:login) "ahinu"
#Pass mySQL
set ahi(sql:pass) "beRl1"
#base mySQL			
set ahi(sql:db) "ahinu"
#IP mySQL		
set ahi(sql:host) "127.0.0.1"
#socket mySQL
set ahi(sql:sock) "/tmp/ahi.sock"

#Vérification si le package mysqltcl est prèsent !
catch {package require mysqltcl}

# Connexion à la base SQL #
proc service:connect {} {
	set ::mysqlink [mysqlconnect -host $::ahi(sql:host) -user $::ahi(sql:login) -password $::ahi(sql:pass) -sock $::ahi(sql:sock)]
	mysqluse $::mysqlink $::ahi(sql:db)
}
# Déconnexion de la base SQL # 
proc service:deconnect {} {
	mysqlclose $::mysqlink; unset -nocomplain ::mysqlink	
}
 
bind pub - !admin admin:pub
	proc admin:pub {nick host hand channel arg} {
	set nbadmin "0"
	set nblog "0"
	dccbroadcast "*** \2Admin\2 by $nick"
	putquick "NOTICE $nick :\2\0034Authed IDNick Level Nick" 
	service:connect
	mysqlsel $::mysqlink "SELECT * FROM `acces` ORDER BY pseudo"
	if {[mysqlresult $::mysqlink rows] ne 0} {
		while {[set row [mysqlnext $::mysqlink]] != ""} {
			set suspend [lindex $row 3]
			set status [lindex $row 4]
			if {$suspend!="ON"} {
				incr nbadmin 1
				if {$status=="ON"} {
					incr nblog 1
					set status "\2\0033YES\003\2"
					putquick "NOTICE $nick :$status [lindex $row 0] [lindex $row 2] [lindex $row 5]"
				} else {
					set status "\2\0034NO\003\2"
					putquick "NOTICE $nick :$status [lindex $row 0] [lindex $row 2]"
				}
			}
		}
	}
	service:deconnect
	putquick "NOTICE $nick :Il y a $nbadmin Admin enregistré dont $nblog en ligne"
}



Si vous exécutez la commande !admin vous verrez apparaître:

Code :
# Authed IDNick Level Nick
# NO Ahinu 4

PS: Ce tutoriel sera mis à jour très fréquemment
Répondre Avertir
#2
Hum, ce script n'explique pas grand chose.
Et je rappelle qu'il y a la page http://wiki.eggdrop.fr/Package:MySQLTcl (et ses sous-pages) qui ne demande qu'à s'enrichir.
Répondre
#3
Je ne l'ai pas fini, je vais l'enrichir de jour en jour Crazy et oui, ton article wiki et déjà cité tout en haut Wink
Répondre Avertir
#4
As-tu compris la différence entre un forum et un wiki ?
Si tu comptes modifier ton post initial de temps en temps, outre que tu ne pourras pas, ça ne sert à rien, il vaut mieux une page wiki.
Si tu comptes ajouter des réponses pour enrichir ton tutoriel, tu devrais faire des posts complets, pas juste mettre une source et dire "ben voila ce que ça fait".

Pour moi, un tuto c'est un code bien expliqué, ligne par ligne ou presque.
Répondre
#5
bien dans c'est cas la supprime le sujet ! MERCI
Répondre Avertir
#6
Sympa..

Je pense que je vais me faire mon Gestion.Bot en mysqltcl sa l'air sympatique.
Faudrais je regarde de plus près comment faire sa correctement mais c'est assez pas mal.

Une question :
Il et possible de faire ce type de codage en mysqltcl ayant du namespace et du msgcat ?
Répondre Avertir
#7
(14/12/2012, 16:48)Ahinu a écrit : bien dans c'est cas la supprime le sujet ! MERCI

Pourquoi ne pas plutôt contribuer au wiki comme le propose CrazyCat ?
Répondre Avertir
#8
@MenzA Razzas de droit pour modifié le wiki MenzA sinon sa aurai été avec plaisir pour le faire, mais pas grave, j'ai repris mon modele pour le faire sur mon site

@alias :Je l'avais commencé pour toi alias justement, et oui c'est possible Wink
Répondre Avertir
#9
@Ahinu : Essaie de te loguer sur le wiki avec le même nom d'utilisateur / mot de passe que sur le forum.

Si ça ne fonctionne pas, c'est qu'il y a un problème que CrazyCat s'empressera de régler si tu le confirmes.
Répondre Avertir
#10
(14/12/2012, 19:57)alias_angelius a écrit : Une question :
Il et possible de faire ce type de codage en mysqltcl ayant du namespace et du msgcat ?
Je ne vois pas le rapport (ou les soucis possibles) avec l'utilisation d'un namespace ou de msgcat.
Une requête SQL, c'est du texte, tu la fais comme tu veux. Et les champs qu'elle retourne, tu en fais ce que tu veux, ce sont des variables comme les autres.

(14/12/2012, 21:01)Ahinu a écrit : @MenzA Razzas de droit pour modifié le wiki MenzA sinon sa aurai été avec plaisir pour le faire, mais pas grave, j'ai repris mon modele pour le faire sur mon site
(14/12/2012, 21:09)MenzAgitat a écrit : @Ahinu : Essaie de te loguer sur le wiki avec le même nom d'utilisateur / mot de passe que sur le forum.

Si ça ne fonctionne pas, c'est qu'il y a un problème que CrazyCat s'empressera de régler si tu le confirmes.

Comme dit MenzAgitat, c'est d'ailleurs clairement dit sur le wiki, dans la page d'accueil:
Pour pouvoir éditer ou ajouter un article, vous devez être inscrit sur le Forum
Répondre
#11
Voila, il y a désormais la plupart des commandes MysqlTcl expliquées sur le wiki.
Ce n'est pas complet, je n'ai mis que les principalement utilisées, mais cela doit vous permettre de comprendre les scripts utilisant ce package et de créer les votres.

Comme précisé sur la page, il vaut mieux utiliser les commandes du namespace mysql plutôt que les alias.
Répondre
#12
Sympa j'aime bien.
Par contre il et pas expliquer Ou mettre la base SQL exemple :

J'ai une table SQL je fait quoi je mais quand quel type de fichier il se nomme comment ?
Ont mais sa dans un eggdrop ou autre faudrait préciser ce point là x)
Répondre Avertir
#13
Heu, une table MySQL, ça va sur un serveur MySQL, pas sur l'eggdrop. Ce n'est pas un simple fichier.
Je pense qu'il te manque certaines (sans jeu de mots) bases Wink
Répondre
#14
J'ai pas commencer encore..

Oui me manque certaines bases..
J'essayerai de chercher
Répondre Avertir
#15
Un petit rappel qui me semble utile, suite à une question posée sur IRC:
Citation :et toute les instruction mysql fonctionne left join entre autre ???

Ainsi que je l'ai dit plus haut:
CrazyCat a écrit :Une requête SQL, c'est du texte, tu la fais comme tu veux. Et les champs qu'elle retourne, tu en fais ce que tu veux, ce sont des variables comme les autres.
mysqltcl permet de se connecter à un serveur MySQL et d'effectuer des requêtes, mais il ne les interprète pas, c'est bien le serveur qui fait ça. Cette question revient un peu à demander si les commandes party-line d'un eggdrop, lorsqu'on se connecte par telnet, sont les mêmes que celles utilisées lorsqu'on est en DCC. Ca n'est qu'un tunnel dans lequel vous envoyez vos requêtes.
Répondre


Atteindre :


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