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.