Overblog Suivre ce blog
Administration Créer mon blog
Le blog du CRRIAM

Articles avec #enregistrement des variables et auto apprentissage tag

Enregistrer et lire des cookies avec rivescript

15 Octobre 2015 , Rédigé par crriam Publié dans #Enregistrement des variables et auto apprentissage

Bon, je vous préviens la méthode que je vais vous exposer n'est pas conventionnel. J'ai demandé à kirsle (Noa Peterbridge) le concepteur du rivescripte comment on pourrait mémoriser des cookies etc, mais sa réponse ne m'a pas satisfait, elle ne fonctionne pas sur la version de rivscripte que j'utilise qui est plus ancienne car la nouvelle version ne marche pas en local aa cause de nod js. Donc, moi ça ne m'interesse pas puisque le but était de pouvoir s'affranchir d'une connection internet. Et déja que si on veut utiliser l'enregistrement des variable, il faut monter un serveur php , je voulais pas avoir en plus a installer nod js !

Bon, bref,

1ere observation,

enregistrer des cookies, les lire, pas de probléme particulier, il suffit de faire ça :

// lecture d'une variable dans un cookie

// fonction lecture tout les cookies > object liretoutcookie javascript var id = args[0]; var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "="; var ca = document.cookie.split(';'); //alert(ca); juste pour le debug

return ca; var dim = ""; return dim; < object // fin fonction lecture tout les cookie

// code rs lecture tout les cookies

+ test80 - je lis tout les cookies liretoutcookie // fin code rs lecture tout les cookies

// fonction lecture un seul cookie > object lirecookie javascript var id = args[0]; var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "="; var ca = document.cookie.split(';'); // alert(nom1); juste pour le debug for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameeq) == 0) return c.substring(nameeq.length,c.length); } return null; var dim = ""; return dim; < object // fin fonction lecture un seul cookie

// code rs lecture 1 seul cookie

+ recup * - > lirecookie

// fin code rs lecture 1 seul cookies

// ----- ca marche pour les ecrires, attention ne pas mettre comme valeur oui ou non, sinon ca bug a cause du pattern oui non // et bien penser a mettre la durée en jour du cookie // je n'ai pas mis cookie ou lecture cookie ou memo cookie car cookie bug avec d autres truc

// fonction ecrire cookie > object ecrirecookie javascript

var id = args[0]; var name = rs.getUservar(id, "nom1"); // alert(name); juste pour le debug var value = rs.getUservar(id, "value"); var days = rs.getUservar(id, "days"); if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; var dim = ""; return dim; < object

// fin fonction ecriture cookie

// code rs ecriture cookie

+ memo * * - > > ecrirecookie

// commentaire : j ai mis 100 ans de duree de vie du cookie

// debut fonction effacer cookie

+ efface varsurpc * - > ecrirecookie // pour effacer un cookie, il suffit de mettre une valeur de nombre de jours (day ) à -1 j'aai mis null a la valeur, car on s'en fou // pour effaacer le cookie "login", il suffit donc de tapper dans le tchat ou de renvoyer dessus // efface varsurpc login // si on veut aussi effacer la variable il suffit d'ajouter la commande

// fin fonction effacer cookie

// fin code rs ecriture cookies

/* pour enregistrer ou lire une variable dans un cookie, il faudra donc faire comme ca : exemple :

+ salut - salut, tu es un garcon ou une fille ?

+ je suis une fille - ha ok une fille tres bien {@memo genre fille}

et pour la lire

+ je suis une fille ou un garcon ? - tu es {@recup genre}

*/

ça parait tout con, mais je m'y suis bien casser la tête dessus.

Le probléme qui se posait ensuite, c'est que même si le bot arriver a récuperer les cookies, impossible de les mémoriser directement dans une variable !!!

Pourquoi ?

Parce que l'insctruction est utiliser en dernier ! donc

+ recup * - > = lirecookie >

ne peut pas fonctionner !

Solution d'enregistrement dans un <set>

C'est là que j'ai eu l'idée de contourner le probléme en utlisant la fonction celle qui permet au robot de redire ce qu'il a dit. Le but va donc être de créer dans une nouvelle fram de la page web, un 2eme robot qui ne servira qu'a renvoyer une instruction dans notre 1ere fenêtre de tchat.

pour ça, j'ai donc créer une nouvelle fram, et j'y ai fais charger un nouveau fichier chat rivescripte que j'ai appeler chat02.html dans ce rivescript, je ne fais charger que le fichier renvois.rs, j'ai enlever aussi tout les codes javascript qui font parler etc. bref le rivescript presque comme d'origine, presque parceque j'ai garder la fonction de remplacement des lettres accentuées ou cédillées françaises.

ça me donne donc une double fenêtre, partager horizontalement, en haut la tchat normal, en bas le tchat de renvois. (voir image)

Et le code rs dans la tchat normal est le suivant :

// fonction renvois sur la fenetre du bas // le retour est assuré uniquement par le fichier renvois.rs qui n'est charger que dans la fenetre chat02.html du droitebas

> object renvois1 javascript

var id = args[0]; var renv1 = rs.getUservar(id, "renvois1"); // alert(renv1); juste pour le debug

setTimeout(function(){parent.droitebas.document.form1.message.value=renv1;if(parent.droitebas.document.form1.onsubmit()) {parent.droitebas.document.form1.submit();}},20); var dim = ""; return dim; < object

// fin fonction renvois

// lecture d'une variable dans un cookie

// fonction lecture tout les cookies > object liretoutcookie javascript var id = args[0]; var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "="; var ca = document.cookie.split(';'); //alert(ca); juste pour le debug

return ca; var dim = ""; return dim; < object // fin fonction lecture tout les cookie

// code rs lecture tout les cookies

+ test80 - je lis tout les cookies liretoutcookie // fin code rs lecture tout les cookies

// fonction lecture un seul cookie > object lirecookie javascript var id = args[0]; var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "="; var ca = document.cookie.split(';'); // alert(nom1); juste pour le debug for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameeq) == 0) return c.substring(nameeq.length,c.length); } return null; var dim = ""; return dim; < object // fin fonction lecture un seul cookie

// code rs lecture 1 seul cookie

+ recup * - {@renvois1 tent1 } > lirecookie

// {@renvois1 tent1 } sert a envoyer tente1 et recuperer le nom de la variable qu'on veut recuperer sur le chat02 par exempel "genre" // puis > lirecookie lit le cookie corespondant

+ renvois1 * - > renvois1 // ca ecrit tente1 et en star la variable sur chat02 pour declencher la commande "tente1 *" du fichier renvois.rs

+ reply1 * - => et voila j ai enregistrer le cookie // sert a faire reecrire le cookie pour pouvoir le memoriser dans la variable revenu par chat02

// fin code rs lecture 1 seul cookies

// ----- ca marche pour les ecrires, attention ne pas mettre comme valeur oui ou non, sinon ca bug a cause du pattern oui non // et bien penser a mettre la durée en jour du cookie // je n'ai pas mis cookie ou lecture cookie ou memo cookie car ca bug avec d autres truc

// fonction ecrire cookie > object ecrirecookie javascript

var id = args[0]; var name = rs.getUservar(id, "nom1"); // alert(name); juste pour le debug var value = rs.getUservar(id, "value"); var days = rs.getUservar(id, "days"); if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; var dim = ""; return dim; < object

// fin fonction ecriture cookie

// code rs ecriture cookie

+ memo * * - > > ecrirecookie

// commentaire : j ai mis 100 ans de duree de vie du cookie

// debut fonction effacer cookie

+ efface varsurpc * - > ecrirecookie // pour effacer un cookie, il suffit de mettre une valeur de nombre de jours (day ) à -1 j'aai mis null a la valeur, car on s'en fou // pour effaacer le cookie "login", il suffit donc de tapper dans le tchat ou de renvoyer dessus // efface varsurpc login // si on veut aussi effacer la variable il suffit d'ajouter la commande

// fin fonction effacer cookie

// fin code rs ecriture cookies

/* pour enregistrer ou lire une variable dans un cookie, il faudra donc faire comme ca : exemple :

+ salut - salut, tu es un garcon ou une fille ?

+ je suis une fille - ha ok une fille tres bien {@memo genre fille}

et pour la lire

+ je suis une fille ou un garcon ? - tu es {@recup genre}

*/

On remaque que le code de recupération des cookies a changé

Code pour le fichier renvois.rs de la 2eme fenêtre tchat :

> object renvois javascript

var id = args[0]; var renv = rs.getUservar(id, "renvois"); // alert(renv); juste pour le debug

setTimeout(function(){parent.droite.document.form1.message.value=renv;if(parent.droite.document.form1.onsubmit()) {parent.droite.document.form1.submit();}},20); var dim = ""; return dim; < object

// tent1 * recois de chat.html la variable a remplire par le cookie + tent1 * @renvois reply1 // @renvois reply1 reporte sur la commande renvois * en inscivant renvois reply1 + le nom de la variable arrivee de chat

+ renvois * - > renvois // ecrit dans la fenetre du chat principal la commande repl1 + le nom de la variable arrivee de chat

Comment ça marche ?

On va prendre l'exemple pour récupérer le cookie genre.

voici une petite photo explicative

Voila, ça fonctionne trés bien. aprés, faudra peut etre fignoler encore un peu tout ça pour que ça fasse beau dans le tchat principal, car là ça écris les renvois. On peut peut etre faire terminer par la phrase déja dite par l'utilisateur en la faisant renvoyer par tchat2.

a voir.

Nouveauté

 

Jusqu'a présent pour enregistrer un cookie, il fallait mettre un syteme lourd de double chat.html d'envois et reception de cocde etc.

Grace au syteme d'autovalidation que j'ai découvert en octobre 2016, cela facillite grandement la tache.

 

Voici le code complet et comment faire :

//----------------------------cookies------debut----------------------------

 

// lecture d'une variable dans un cookie

// fonction lecture tout les cookies
> object liretoutcookie javascript
var id = args[0];
var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "=";
var ca = document.cookie.split(';');
//alert(ca); juste pour le debug

return ca;
var dim = "";
return dim;
< object
// fin fonction lecture tout les cookie

 

// code rs lecture tout les cookies

+ test80
- je lis tout les cookies <call> liretoutcookie <id></call>

 

// fin code rs lecture tout les cookies

 


// fonction lecture un seul cookie

> object lirecookie javascript
var id = args[0];
var nom1 = rs.getUservar(id, "nom1");
var nameeq = nom1 + "=";
var ca = document.cookie.split(';');
// alert(nom1); juste pour le debug
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameeq) == 0) return c.substring(nameeq.length,c.length);
}
return null;
var dim = "";
return dim;
< object


// fin fonction lecture un seul cookie


// code rs lecture 1 seul cookie

+ recup *
- {@autovalid recup1 <star>} {@autovalid ok}  {@autovalid transparent}

+ recup1 *
- <set nom1=<star>> <get nom1> <call> lirecookie <id></call> {topic=recup}

> topic recup

+ *
@cooki qsd<reply>qsd
// qsd sert a delimiter le cookie pour eviter les caractere blanc invisible qui s inscrive automatiquement avant et apres le cookie

+ cooki * * * *
- <set <star2>=<star3>> \s {topic=random}
// j ai donc mis dans la variable <star2> <get nom>
// la 1er et 4 eme * serve a isoler les qsd et laisser le cookie propore
// on sort du topic avec random

< topic

 

// ----- ca marche pour les ecrires, attention ne pas mettre comme valeur oui ou non, sinon ca bug a cause du pattern oui non
// et bien penser a mettre la duree en jour du cookie
// je n'ai pas mis cookie ou lecture cookie ou memor cookie car cookie bug avec le ok du oui general
// j ai mis memor au lieu car memo est utiliser pour la date

// fonction ecrire cookie


> object ecrirecookie javascript

var id = args[0];
var name = rs.getUservar(id, "nom1");
// alert(name); juste pour le debug
var value = rs.getUservar(id, "value");
var days = rs.getUservar(id, "days");
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
var dim = "";
return dim;
< object

// fin fonction ecriture cookie

// code rs ecriture cookie

+ memor * *
- <set nom1=<star1>> <set value=<star2>> <set days=36500> <call>ecrirecookie <id></call>

// commentaire : j ai mis 100 ans de duree de vie du cookie


// debut fonction effacer cookie

+ efface varsurpc *
- <set nom1=<star1>> <set value=null> <set days=-1> <call>ecrirecookie <id></call>


// pour effacer un cookie, il suffit de mettre une valeur de nombre de jours (day ) a -1 j'ai mis null a la valeur, car on s'en fou
// pour effaacer le cookie "login", il suffit donc de tapper dans le tchat ou de renvoyer dessus
// efface varsurpc login
// si on veut aussi effacer la variable il suffit d'ajouter la commande <set nomvariable=undefined>

// fin fonction effacer cookie

// fin code rs ecriture cookies


/* pour enregistrer ou lire une variable dans un cookie, il faudra donc faire comme ca : exemple :

+ bonjour
- bonjour tu es un garcon ou une fille ?

+ je suis un *
- ha cool, tu es un <star>  {@memor genre <star>}

+ que suis je
-  {@recup genre} {@que suis je2}

+ que suis je2
- tu es un <get genre>

// on ne peut pas mettre directement {@recup genre} <get genre>

*/

//---------------------------- cookies fin -------------------------------------

 

 

Enregistrer et lire des cookies avec rivescript
Lire la suite

apprentissage des variables suite

9 Avril 2014 , Rédigé par crriam Publié dans #Enregistrement des variables et auto apprentissage

// je cherche a mettre une variable dans une variable en utilisant reply

! global id2 = 1234
! global age1234 = 40 ans
! global nom1234 = bernard
! global brunoage = 45 ans
! global julietteage = 28 ans

 // <env age<env id2>

+ test1
- <env id2>

+ test2
- <set variable=<env age<reply>>> {@variable}


+ variable
- j ai mis <get variable>

// si l'on veut modifier la variable env age1234 faire la sequence test1, Test3, test4
 
+ test3
- <env age<reply>=25 ans> enregistrer

+ test4
- <env age1234>


+ je suis * // bruno ou juliette
- ok tu as <set age=<env <star>age>><get age>

/*
+ je suis * // bruno ou juliette
- ok tu es <set nom=<star>> <get nom>, tu as <set age=<env <star>age>> <get age>
*/



// ci dessus ça marche. on n'utilise pas une expression de la forme <env age<get id2>> ou <env age<env id2>> car ça ne marche pas. Maintenant reste a lancer le test1 en automatique puis le test2 en automatique on passe par replay ou par <star> car une redirection simple ne fonctionne pas, il faut l'avoir afficher a l'écrans.

 

J'ai trouver Une SOLUTION !!!!!!
 

 

+ dep
- entrer votre login

+ * // bruno ou juliette
% entrer votre login
* <env <star>age> == undefined => login non reconnu
- ok tu es <env login=<star>> <env login>, tu as <set age=<env <star>age>> <get age>

 


+ d
- dit moi ton age


+ *                // je recupere l age dans un star
%dit moi ton age
@rec age <star> // je creer un double star en envoyant sur prerec car "age" devient un star pour l 'expression prerec * *

// ---------------------------- debut code generique pour enregistrer les variables --------

+ rec * *  // je recupere le double star
@j enregistre <env login><star1>=<star2> // ca me donne une expression du style "je enregistre brunoage = 3"

+ j enregistre *
- <env <star>> ok

// --------------------------- fin code generique pour enregistrer les variables ---------

 

// ---------------------------------- code generique pour lire les variables relative au login -------------
+ lect *
@je lit <env login><star>

+ je lit *
- <env <star>>

// --------------------- fin generique lecture variables -> login -----------------------------------

 

// ---------------- exemple code pour lire des variables par rapport au login ----------------

+ test
- ton login est <env login> et tu as {@lect age} ans

// ------------------ fin exemple lecture des variable / login ---------------------------


// -------------------- exemple enregistrement des variables ---------------------------
+ d1
- tu es marier ? {@rec dejadit 1}
// il sufit de mettre le renvois  avec le nom de la variable et sa valeur sans le signe egal
// le code l'enregistre automatiquement avec le login là avec le login bruno ça ecrira <env brunodejadit=1>

// ------------------------ fin exemple enregistrement des variables -------------------------

 

Voila, en mettant simplement les code générique d'enregistrement et de lecture des variables dans un fichier, il suffit ensuite de suivre les exmple donner pour lire ou enregistrer une variable qui doit etre unique par rapport au login, comme l'age, le nom etc.

:)

 

 

 

Lire la suite
1 2 > >>