0

コマンド ラインから Adium の連絡先メッセージを送信したいです。構文は次のようになりますecho test | im <contact>。私はこのスクリプトを取得して、やりたいことを行うように変更しましたが、少し古いので、最新化しようとしています。これまでのところ、私はこれを機能させています(ここでは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

チャット メッセージが 2 回送信されることを除けば、うまく機能します。これは Adium のバグですか、それとも AppleScript で何か間違ったことをしていますか?

4

1 に答える 1

1

また、Adium がチャット メッセージを複数回送信していたこのバグにも遭遇しました。

これは、AdiumApplescriptRunner という名前のバックグラウンド プロセスが複数実行されていることが原因です。明らかに、これらのプロセスのうち常に 1 つだけが実行されているはずですが、複数のプロセスが起動する場合があり、これが発生すると、追加の AdiumApplescriptRunner プロセスごとに重複したチャット メッセージが送信されます。

私の回避策は、毎分実行され、次の bash コマンドを実行する cron タスクを作成することでした。

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

このコマンドは、AdiumApplescriptRunner という名前のプロセスが 1 つだけ実行されていることを確認し、Adium が作成したプロセス以外はすべて強制終了します。

于 2012-06-15T22:30:16.183 に答える