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"

И снова запустите первый скрипт. Ответ должен быть;"Вы сказали да, да!"

Вы получите ожидаемый ответ

Другие вопросы по тегам