iMessage 的 AppleScript 错误 - 无法获取文本聊天 ID 的服务
Posted
技术标签:
【中文标题】iMessage 的 AppleScript 错误 - 无法获取文本聊天 ID 的服务【英文标题】:Error in AppleScript for iMessage - Can’t get service of text chat id 【发布时间】:2016-03-14 06:13:48 【问题描述】:我收到错误消息:无法获得文本聊天 ID“iMessage;-;”的服务。 (-1728) - 尝试将文本发送到 mac 上的另一个 imessage 客户端(不同的用户)时。这是失败的代码片段:
using terms from application "Messages"
on message received theText from theBuddy for theChat
# get what we need
set recvService to name of service of theChat
谢谢。
【问题讨论】:
【参考方案1】:更新:如下所述,观察到的行为是一个错误。但是,OP 自己找到了一种解决方法:message received
事件的from
参数(示例代码中的theBuddy
)是Buddy
类的一个实例,也 service
属性,正常运行:
set recvService to name of service of theBuddy # instead of the buggy `of theChat`
注意:message received
事件的for
参数(OP 代码中的theChat
)是text chat
类的一个实例,它继承自chat
基类。如果脚本编辑器中的字典查看器未配置为显示 inherited 项,则通过查看 text chat
类,它确实有一个 - 当前有问题 - service
属性不会很明显.要使继承的项目可见,请打开脚本编辑器的首选项对话框并选中 Show inherited items
。
AppleScript 对Messages.app
的支持似乎存在一个错误(在 OSX 10.11.1 上观察到);我建议你在http://bugreport.apple.com 提交一个错误;这是一个简单的演示:
tell application "Messages"
set svc to first item of services
set cht to first item of (chats of svc)
# !! Breaks, even though it should return the same object as `svc`.
# "Can’t get service of text chat id \"iMessage;-;<recipient>\"."
service of cht
end tell
目前尝试访问 text chat
实例的 any 属性似乎已损坏。
您可以尝试解决方法:
# Given a chat instance, returns its originating service.
on getService(cht)
local svc, cht
tell application "Messages"
repeat with svc in services
try
(first chat of svc whose it is cht)
return contents of svc
end try
end repeat
end tell
return missing value
end getService
# Sample invocation
set recvService to name of (my getService(theChat))
【讨论】:
【参考方案2】:好的,只是一个更新,也许是一个解释(?):
set recvService to name of service of theChat - fails.
set recvService to name of service of theBuddy - works.
在查找messages.app的字典中,似乎没有聊天的“服务”,但有好友的。
我才刚刚开始在 El Capitan 中编写脚本,所以我不知道这是更改还是错误。我会把它留给更有经验的人来评论。
由于我可以从“好友”那里获得服务,我不需要 mklement0 的回答(但我非常感谢您的回答)所以我暂时保持原样。
【讨论】:
很高兴您找到了解决方法。text chat
类 - 其中代码中的 theChat
是一个实例 - 确实 有一个 service
属性,它从祖先的 chat
类继承 .通常,除非您在其首选项对话框中选中Show inherited items
,否则您不会在字典查看器中看到继承的项目。所以你原来的问题是一个错误。如果没有此类属性,您会看到 不同 错误消息 (can't make ... into type specifier
)。
我已经用你的发现和我的 cmets 更新了我的答案。顺便说一句,如果您希望我收到回复通知,您必须对 my 答案发表评论。以上是关于iMessage 的 AppleScript 错误 - 无法获取文本聊天 ID 的服务的主要内容,如果未能解决你的问题,请参考以下文章
通过 AppleScript 从 iMessage 发送 GIF
如何使用 AppleScript 在 iMessage 中开始新对话?