6

如何在 OS X JavaScript 中侦听事件以实现自动化。

在 Messages 应用程序的脚本库中有一个事件处理程序列表,例如messageSentmessageReceived。但是,我不知道如何使用它们。尝试传递函数会产生错误,并且尝试将这些变量设置为新函数会导致 REPL 挂起。

设置这些事件处理程序的正确方法是什么?

4

2 回答 2

1

您将创建一个脚本,然后从Preferences > General. 使用内置Speak Events.applescript文件作为您的指南,并注意您必须覆盖每个处理程序才能正确执行。

注意:即使包含标准添加,您仍然无法调用脚本添加命令,say()可能是因为它们如何在脚本引擎之上实现这一层,甚至使用currentApplication()看起来好像是跨应用程序发送的适当调用。

这是一个模板:

Messages = Application.currentApplication()
Messages.includeStandardAdditions = true

function messageSent(m, e) {
}

function messageReceived(m, e) {
}

function chatRoomMessageReceived(e) {
}

function activeChatMessageReceived(m, e) {
}

function addressedMessageReceived(m, b, c, e) {
}

function receivedTextInvitation(e) {
}

function receivedAudioInvitation(m, b, c, e) {
}

function receivedVideoInvitation(m, b, c, e) {
}

function receivedLocalScreenSharingInvitation(b, c, e) {
}

function buddyAuthorizationRequested(e) {
}

function addressedChatRoomMessageReceived(e) {
}

function receivedRemoteScreenSharingInvitation(e) {
}

function loginFinished(e) {
}

function logoutFinished(e) {
}

function buddyBecameAvailable(e) {
}

function buddyBecameUnavailable(e) {
}

function receivedFileTransferInvitation(e) {
}

function avChatStarted(e) {
}

function avChatEnded(e) {
}

function completedFileTransfer(e) {
}
于 2014-12-13T05:09:05.553 回答
1

我听说可以在 OS X 10.11.3 Beta (15D9c) 中工作

ObjC.import('stdlib')
var yell = "say"

function run() {
    //  messageReceived("test",{from:Application("Messages").services.byName("SMS").buddies[0]})
}

function execute(program, args) {
    var command = program + " " + args.map(q).join("")
    console.log(command)
    $.system(command)

    function q(s) {
        return " '" + s.replace("'", "'\\''") + "' "
    }
}

function messageReceived(text, who) {
    execute(yell, [who.from.name(), text])
}

function loginFinished(service) {
    execute(yell, ["login", service.for.name()])
}

function logoutFinished(service) { // doesn't work!
    execute(yell, ["Logout", service.for.name()])
}

function keys(o) { // debugging tool
    return Object.keys(o).join(",")
}
receivedTextInvitation = addressedMessageReceived = chatRoomMessageReceived = activeChatMessageReceived = messageReceived

function messageSent() {}

function receivedAudioInvitation() {}

function receivedVideoInvitation() {}

function receivedLocalScreenSharingInvitation() {}

function buddyAuthorizationRequested() {}

function addressedChatRoomMessageReceived() {}

function receivedRemoteScreenSharingInvitation() {}

function logoutFinished() {}

function buddyBecameAvailable() {}

function buddyBecameUnavailable() {}

function receivedFileTransferInvitation() {}

function avChatStarted() {}

function avChatEnded() {}

function completedFileTransfer() {}
于 2015-12-20T20:46:39.203 回答