Adium从AppleScript发送两条聊天消息

时间:2012-05-30 20:41:57

标签: applescript

我喜欢从命令行发送Adium联系人消息。语法应该类似于echo test | im <contact>。我已经采取并修改了this script来做我想做的事情,但它有点老了,我试图对它进行现代化改造。到目前为止,我已经完成了这项工作(我只在这里更改了AppleScript。)

set stdinText to do shell script "echo \"\$MESSAGE\"" without altering line endings

tell application "Adium"
    set user to get contact "$BUDDY"

    if not (exists (chats whose contacts contains user)) then
        if not (exists (first chat window)) then
            tell account of user
                set new_chat to make new chat with contacts {user} with new chat window
            end tell
        else
            set existing_window to first chat window
            tell account of user
                set new_chat to make new chat with contacts {user} in window existing_window
            end tell
        end if
    else
        set new_chat to first chat whose contacts contains user
    end if

    send new_chat message stdinText
end tell

效果很好,但聊天消息发送两次除外。这是Adium中的错误还是我在Applecript中做错了什么?

1 个答案:

答案 0 :(得分:1)

我也遇到了这个错误,Adium多次发送聊天消息。

这是由多个名为AdiumApplescriptRunner的正在运行的后台进程引起的。显然,这些进程中只有一个应该在任何给定时间运行,但有时会启动多个进程,当发生这种情况时,会为每个额外的AdiumApplescriptRunner进程发送重复的聊天消息。

我的工作是创建一个每分钟运行一次的cron任务,然后执行这个bash命令:

ps -aef | grep -v grep | grep 'AdiumApplescriptRunner' | awk '{print $2}' | awk 'NR == 2,/c/' | xargs -I %s kill -9 %s

此命令确保只有一个名为AdiumApplescriptRunner的进程正在运行,并且会杀死Adium创建的任何进程。