0

我一直在编写脚本一段时间,并且有很多问题被问到。我还根据一些人的建议重写了很多代码。然而,我仍然有一个没有答案的问题。以下是 iMessage PA 等“Siri”的代码。基本上,当我通过 iMessage 向它发出命令时,它会响应。

我一直在拼命地尝试让它有更多的智能,让它用句子来回答。你可以在代码中看到,当它问我“......你还好吗?” 它应该寻找“是”或“否”,但仅在提出第一个问题时。然而,目前它只是以最初的“我很好,先生,你还好吗?”作为回应。然后当我告诉它是或否时什么也不做。

为了确保它不是主要代码,我添加了一个简单的“hello world”来查看它是否会正常响应。下面是代码:

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

感谢人们可以给我的任何帮助!

4

1 回答 1

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"

第二个脚本被保存。然后运行第一个脚本来获取它的 theMessage 并做出响应。 应该是“我很好,先生,你还好吗?

然后您编辑并保存第二个脚本;

set theMessage to "yes"

并再次运行第一个脚本。回应应该是; “你说是的,是的!”

你会得到你期待的回应

于 2013-05-07T22:58:56.427 回答