2013-05-07 3 views
0

Je travaille sur un script depuis un certain temps et j'ai reçu beaucoup de questions. J'ai également réécrit beaucoup de code selon les suggestions de certains peuples. Pourtant, j'ai toujours cette question qui a été sans réponse. Voici le code pour un "Siri" comme iMessage PA. Fondamentalement, quand je dis des commandes à travers iMessage, il répond.Applescript: Erreur inconnue

J'ai essayé désespérément de lui donner un peu plus d'intelligence en lui faisant répondre en phrases. Vous pouvez voir dans le code, quand il me demande "... ça va?" Il devrait chercher soit "oui" ou "non", mais seulement lorsque la première question a été posée. Pourtant, actuellement, il répond juste avec l'initiale "Je vais bien monsieur, vous allez bien?" et puis ne fait rien après cela quand je le dis oui ou non. Pour être sûr que ce n'est pas le code principal, j'ai ajouté un simple "hello world" pour voir si cela répondra normalement. Ci-dessous le code:

using terms from application "Messages" 
    on message received theMessage from theBuddy for theChat 

     if theMessage is "hello" then 
      helloresponse() 
     end if 

     if theMessage contains "Are you ok" then 
      areyouok() 
      if theMessage is "yes" then 
       happyResponse() 
      else 
       if theMessage is "no" then 
        unhappyResponse() 
       end if 
      end if 
     end if 

     if theMessage contains "hello world" then 
      helloworldresponse() 
     end if 

    end message received 

end using terms from 

on helloresponse() 
    tell application "Messages" 
     send "Hey sir!" to buddy "[email protected]" of service "E:[email protected]" 
    end tell 
end helloresponse 

on happyResponse() 
    tell application "Messages" 
     send "you said yes, yey!" to buddy "[email protected]" of service "E:[email protected]" 
    end tell 
end happyResponse 

on unhappyResponce() 
    tell application "Messages" 
     send "You said no, thats a shame!" to buddy "[email protected]" of service "E:[email protected]" 
    end tell 
end unhappyResponce 

on areyouok() 
    tell application "Messages" 
     send "I am fine sir, are you ok?" to buddy "[email protected]" of service "E:[email protected]" 
    end tell 
end areyouok 

on helloworldresponse() 
    tell application "Messages" 
     send "World replies: Hello." to buddy "[email protected]" of service "E:[email protected]" 
    end tell 
end helloworldresponse 

Merci pour toute aide que les gens peuvent me donner!

+0

J'ai mis à jour ma réponse à vous donner une idée de la façon dont y Vous pouvez tester votre logique et voir comment obtenir la réponse souhaitée – markhunte

Répondre

1

Si je lis bien.

vous obtenez un message « Tu vas bien »

La réponse du script est « Je suis bien monsieur, tu vas bien? »

vous obtenez un message de retour « oui » ou « non »

Mais la partie du script qui attend le message « oui » ou « non » est enterré à l'intérieur du bloc if pour « Je vais bien monsieur, ça va? ". Donc, il ne sera jamais déclenché.

** Mise à jour

est ici un moyen de tester votre logique.

créer deux scripts.

Le premier sera celui avec la logique. Et vous allez l'exécuter dans l'éditeur Applescript.

property lastMessage : "" 

set theMessage to load script "/PATH/TO/SECOND/SCRIPT/secondScript.scpt" 
run theMessage 

if theMessage is "hello" then 
    helloresponse() 
end if 

if theMessage contains "Are you ok" then 

    areyouok() 

end if 

if theMessage is "yes" and lastMessage is "I am fine sir, are you ok?" then 
    happyResponse() 
else if theMessage is "no" and lastMessage is "I am fine sir, are you ok?" then 
    unhappyResponse() 

end if 


if theMessage contains "hello world" then 
    helloworldresponse() 
end if 




on helloresponse() 
    say "Hey sir!" 
end helloresponse 

on happyResponse() 
    say "you said yes, yey!" 
    set lastMessage to "" 
end happyResponse 

on unhappyResponce() 
    say "You said no, thats a shame!" 
    set lastMessage to "" 
end unhappyResponce 

on areyouok() 
    say "I am fine sir, are you ok?" 
    set lastMessage to "I am fine sir, are you ok?" 
end areyouok 

on helloworldresponse() 
    say "World replies: Hello." 
end helloworldresponse 

Prenez note de la propriété je l'ai donné. Toute variable passée dans une propriété est stockée là. Et peut être consulté lorsque le script est exécuté à nouveau plus tard.

Dans ce cas, je l'ai mis pour stocker la dernière réponse/message si cette réponse était "Je vais bien monsieur, vous allez bien?"

J'ai également partager vos si blocs afin que la réponse happyResponse et unhappyResponse sera déclenchée que le message « oui » ou « non » et aussi longtemps que la dernière réponse stockée dans la LastMessage propriété est « Je suis bien, monsieur, ça va? ".

Dans le premier script est une ligne pour charger et exécuter le deuxième script.

Le deuxième script est utilisé pour donner les messages. Ce script est édité puis enregistré. Par exemple, le deuxième script contiendra simplement;

set theMessage to "Are you ok" 

le deuxième script est enregistré. Et puis vous exécutez le premier script pour récupérer son theMessage et répondre. qui devrait être « Je suis bien monsieur, êtes-vous ok

Vous pouvez ensuite modifier et d'enregistrer le second script avec;?

set theMessage to "yes" 

et exécuter le premier script à nouveau La réponse devrait être;. « vous avez dit oui, yey! »

vous obtiendrez la réponse que vous attendez