Timer, chronomètre.

Timer, chronomètre. - C#/.NET managed - Programmation

Marsh Posté le 19-07-2011 à 16:44:07    

Bonjour...
Je suis le créateur d'un petit chatterbot Jeanneton (un robot parleur,  
dire une Ia serait prétentiard. C'est fait avec le moteur Verbots qui  
est écrit en CSharp...) Si on veut lui parler, c'est ici:
http://www.jeanneton.blueinfos.com/
 
Je voudrai le perfectionner... Je ne suis pas du tout programmeur...  
(Je me casse ! Bon d'accord...)
 
Plus sérieusement, j'aimerai que qqun m'aide à faire un chronomètre...
 
C'est à dire. Jeanneton, mon bot. Ex il possède en output un texte à lire...
 
"Aurevoir ami." <exit>
(<exit> est la commande qui ferme le programme.)
 
 
C'est là mon problème. Cette commande agit immédiatement avant que  
mon bot ait finit sa phrase... Je voudrai délayer ça.  
 
Ex: Jeanneton dit:
"Aurevoir ami." Puis, le code en c sharp que je vous demande compte  
5 secondes (ou 10, qqchose de réglable), et ferme l'application...
Laissant au bot le temps de terminer sa phrase.
 
Donc si qqun à le temps, la gentillesse. Bon je sais que les non(s)  
pros sont des pénibles. (J'ai mal au dos à force de faire des  
courbettes. :0) Soyez cool et ne m'envoyez pas ballader.)
 
Amicalement
Sylvain

Reply

Marsh Posté le 19-07-2011 à 16:44:07   

Reply

Marsh Posté le 19-07-2011 à 17:05:06    

A mon avis, il y a probablement un "evenement" en c# qui signale la fin de la commande par verbot. Le plus simple est donc d'executer ton exit sur cet evenement.
Ceci dit, sans les sources que tu utilise, je ne vois pas bien ce que l'on peut faire...
A+
Fred

Reply

Marsh Posté le 21-07-2011 à 10:56:33    

Merci... Ok je vois, rien n'est fastoche...
Avant tout, un exemple de "code module" CSharp qui n'a rien à voir avec  
ce que je vous demande, c'est juste pour situer la chose et vous montrer
comment ça fonctionne. Il sert à manipuler le moteur Verbots. Ce code  
interdit les   " .:,;!?   " dans une variable.
 
__
  Code module
Fonction:
 Function Name:  
  asterix
 Parameter:
  string op1
 Return Type
  string
 
Code:
string target = @".:,;!?";  
char[] anyOf = target.ToCharArray();  
if (op1.IndexOfAny(anyOf, 0) >= 0) op1 = op1.Substring(0, op1.IndexOfAny(anyOf, 0));  
return op1;
__
 
Ex de conversation:  
Rule Name: Test [thing] ?
Input Text: Test [thing] ?
Output Text: [thing].
 
Si je tape "Test grenouille ?" , le bot répond
"Grenouile ?"
 
Ok facile, si je rajoute cette fonction plus ht le code module du moteur  
et si je retape "Test grenouille ?" , le bot répond
"Grenouille"
 
Plus de "?"  
Super. C'était le but.
 
(On appelle la fonction en output comme ça:
Input Text: Test [thing] ?
Output Text: "<?csharp Console.WriteLine(Athena.asterix(vars["thing"])); ?>". "[thing]".)
 
 
 
 
J'ai trouve un bout de code avec 4 fonctions qui semble détecter  
le début etla fin du texte lu par mon bot. C'est dans un  
"code module" (ajouté au moteur Verbot.) Nouvelle conversation:
Rule Name: Hello
Input Text: Hello
Output Text: Bye.
 
 
 
Voilà le code module qui permet de faire ça (réprérer le début et la  
fin d'un phrare...)
 
__
 Code module.
*Fonction 1:
 
Function name:
OnBeforeRuleFired
Parameter:
State s
Return Type:
Console.WriteLine("A OnBeforeRuleFired triggered" );
 
code:  
Console.WriteLine("A OnBeforeRuleFired triggered" );
/*
Console.WriteLine("State Object: " );
foreach(object oKey in s.Vars.Keys)
{
   Console.WriteLine(oKey + " : " + (string)s.Vars[oKey]);
}
*/
//Console.WriteLine("Changing Input to \"test\"" );
//s.Vars["_input"] = "test";
__
 
 
 
 
__
*Fonction 2 :
 
Function name:
OnAfterRuleFired
 
Parameter:
State s, Reply r
 
Return Type:
void
 
Code
Console.WriteLine("B OnAfterRuleFired triggered." );
/*
Console.WriteLine("State Object: " );
foreach(object oKey in s.Vars.Keys)
{
   Console.WriteLine(oKey + " : " + (string)s.Vars[oKey]);
}
 
Console.WriteLine("Reply Object: " );
Console.WriteLine("r.Text: " + r.Text);
Console.WriteLine("r.AgentText: " + r.AgentText);
Console.WriteLine("r.Cmd: " + r.Cmd);
Console.WriteLine("r.RuleId: " + r.RuleId);
*/
__
 
 
__
*Fonction 3:
 
Function name:  
OnNoRuleFired
 
Parameter
State s, Reply r
 
Return Type
void
 
Code
Console.WriteLine("C OnNoRuleFired triggered" );
 
 
 
__
*Fonction 4:
 
Function name:
OnNoOutputFound
 
Parameter
Hashtable vars, Reply r
 
Return Type
string
 
Code:
Console.WriteLine("OnNoOutputFound" );
Console.WriteLine("Reply Object Details:" );
Console.WriteLine("Chosen Rule ID: " + r.RuleId);
Console.WriteLine("From KB: " + r.KBItem.Filename);
 
return "OnNoOutputFound";
__
 
Conversation.
Rule Name: Hello
Input Text: Hello
Output Text: Bye.
 
 
Ex, si je tape en input "Hello", j'obtiens en output:
 
A OnBeforeRuleFired triggered
Salut.
B OnAfterRuleFired triggered.
 
Si je ne me "fourvoie" pas, je peux donc détecter cette fin de phrase  
où je pourrai placer ce fameux "timer" (J'ai regardé ici
http://msdn.microsoft.com/fr-fr/li [...] timer.aspx
et essayé plein de truc. Mais à part faire planter l'application
Verbots, nada...
 
 
Donc normalement, sachant repérer un début et une fin de phrase  
lue, il devrait être possible de placer le timer que je vous demande  
et tant désiré à cette endroit, et de l'appeler en output d'une façon  
ou d'une autre, non ?
 
 
Amicalement.
Sylvain.
Ps: Si je deviens lourd, oubliez ce post.
 
 
 
 

Reply

Marsh Posté le 21-07-2011 à 16:59:35    

J'ose pas te le dire sinon tu va me gueuler dessus... :0) Sinon j'ai mis  
en output, juste pour voir
<?csharp  
   Console.Write("lets wait for 5 seconds" );  
 
   DateTime dt1 = DateTime.Now;  
              int diff = 0;  
 
               while (diff < 5)  
               {  
                   DateTime dt2 = DateTime.Now;  
                   TimeSpan ts = dt2.Subtract(dt1);  
                   diff = (int)ts.TotalSeconds;  
               }  
 
   Console.Write("time has passed." );  
?>
 
Et ça plante parfois. (Win7) et contrairement à l'effet désiré le moteur verbot  
pause 5 sec avant de dire quoi que ce soit...  Un peu comme  
System.Threading.Thread.Sleep(5000)
 
Sylvain.

Reply

Marsh Posté le 21-07-2011 à 18:16:16    

Pourri, oui certainement.
J'ai placé des  
aTimer.Interval = 2000;
a droite à gauche pour voir....
 
Tu sais, ce que je veux est en fait très simple, enfin ça parait très simple  
pour un quidam comme moi. Un code qui se déclanche à un moment, dure  
un temps choisit pas une variable et qui le temps dévolue, fait autre chose,
ou rien.  Où mettre ce code, j'en sais rien en fait je parle de chose que je
ne comprends pas.
Si cela t'agace oublie, je te remercie déjà de t'être penché sur  
le problème.
Sylvain.

Reply

Marsh Posté le 21-07-2011 à 19:41:35    

Husky_5D a écrit :

Pourri, oui certainement.
J'ai placé des  
aTimer.Interval = 2000;
a droite à gauche pour voir....


tu as bien compris que cela règle juste la durée du timer, ca ne l'active pas à cet endroit...
As tu bien regarder l'exemple donné sur la page msdn?


---------------
Seul Google le sait...
Reply

Marsh Posté le 21-07-2011 à 19:55:19    

Oui. Ne crois pas que je sois un flemmard qui attend qu'on bosse pour lui au contraire,  
mais je pige rien. Imagines une mite en pullover devant des calculs quantiques.
Je ne pensais pas que ce serait si ardu...  J'imaginais 3, 4 lignes de codes fastoches  
faitent par qqun pour qui c'est finger in the nose. et hop là ! Je t'ai dit tout  
ce que je savais.
Amicalement.  
Sylvain


Message édité par Husky_5D le 21-07-2011 à 19:56:11
Reply

Marsh Posté le 22-07-2011 à 10:34:23    

Merci. Ça paraît tellement simple quand on sait... Je crois comprendre que  
t'en as ras la casquette qu'on te demande du code donc oui c'est sympa.
Saches juste que j'ai fait mon petit chatterbot Jeanneton au début pour  
faire marrer ma fille puis je me suis pris au jeu... Je vais essayer d'adapter  
ça au moteur Verbot et te tiens au courant.
Amicalement.
Sylvain.

Reply

Marsh Posté le 23-07-2011 à 15:55:13    

il super ce bot....
 

Citation :

You: tu suces ?
JEANNETON: Pour toi, pas d'embaumement, pas d'Osiris pour t'accueillir dans les Terres Légendaires, pas de vie futur parmis les étoiles. Tu seras enterré vivant après qu'on t'aie crevé les yeux.


 
Faire du random text j'appelle pas ça un bot, mais bon...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed