Applescript: неизвестная ошибка
Я некоторое время работал над сценарием, и мне задавали много вопросов. Я также переписал много кода в соответствии с предложениями некоторых людей. Тем не менее, у меня все еще есть один вопрос, который остался без ответа. Ниже приведен код для "Siri", подобного iMessage PA. В основном, когда я говорю команды через iMessage, он отвечает.
Я отчаянно пытался сделать его немного более интеллектуальным, отвечая предложениями. Вы можете видеть в коде, когда он спрашивает меня "... ты в порядке?" Следует искать либо "да", либо "нет", но только тогда, когда первый вопрос уже задан. Тем не менее, в настоящее время он просто отвечает начальным: "Я в порядке, сэр, ты в порядке?" и затем ничего не делает после этого, когда я говорю это да или нет.
Просто чтобы быть уверенным, что это не основной код, я добавил простой "привет мир", чтобы увидеть, будет ли он отвечать нормально, что он делает. Ниже приведен код:
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@1.com" of service "E:email@2.com"
end tell
end helloresponse
on happyResponse()
tell application "Messages"
send "you said yes, yey!" to buddy "email@1.com" of service "E:email@2.com"
end tell
end happyResponse
on unhappyResponce()
tell application "Messages"
send "You said no, thats a shame!" to buddy "email@1.com" of service "E:email@2.com"
end tell
end unhappyResponce
on areyouok()
tell application "Messages"
send "I am fine sir, are you ok?" to buddy "email@1.com" of service "E:email@2.com"
end tell
end areyouok
on helloworldresponse()
tell application "Messages"
send "World replies: Hello." to buddy "email@1.com" of service "E:email@2.com"
end tell
end helloworldresponse
Спасибо за любую помощь, которую люди могут оказать мне!
1 ответ
Если я читаю это правильно.
вы получите сообщение "Ты в порядке?"
Ответ сценария: "Я в порядке, сэр, ты в порядке?"
вы получаете сообщение "да" или "нет"
Но та часть скрипта, которая ожидает сообщения "да" или "нет", находится внутри блока if для "Я в порядке, сэр, с вами все в порядке?". Так что это никогда не сработает.
**ОБНОВИТЬ
Вот способ проверить свою логику.
создать два сценария.
Первый будет с логикой. И вы запустите его в редакторе 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
Обратите внимание на собственность, которую я дал. Любая переменная, переданная в свойство, хранится там. И может быть получен, когда скрипт будет запущен снова позже.
В этом случае я установил его для хранения последнего ответа / сообщения, если этот ответ был "Я в порядке, сэр, вы в порядке?"
Я также разделил ваши блоки if так, чтобы ответы happyResponse и unhappyResponse запускались только с сообщением "да" или "нет", и до тех пор, пока последний ответ, сохраненный в свойстве lastMessage, равен "Я в порядке, сэр, с вами все в порядке??".
В первом скрипте есть строка для загрузки и запуска второго скрипта.
Второй скрипт используется для передачи сообщений. Этот скрипт редактируется, а затем сохраняется.
например, второй скрипт будет просто содержать;
set theMessage to "Are you ok"
второй скрипт сохранен. А затем вы запускаете первый скрипт, чтобы получить его сообщение и ответить.что должно быть "Я в порядке, сэр, ты в порядке?
Затем вы редактируете и сохраняете второй скрипт с помощью;
set theMessage to "yes"
И снова запустите первый скрипт. Ответ должен быть;"Вы сказали да, да!"
Вы получите ожидаемый ответ