-
-
Save aktau/8958054 to your computer and use it in GitHub Desktop.
| #!/bin/sh | |
| if [ "$#" -eq 1 ]; then stdinmsg=$(cat); fi | |
| exec <"$0" || exit; read v; read v; read v; exec /usr/bin/osascript - "$@" "$stdinmsg"; exit | |
| -- another way of waiting until an app is running | |
| on waitUntilRunning(appname, delaytime) | |
| repeat until my appIsRunning(appname) | |
| tell application "Messages" to close window 1 | |
| delay delaytime | |
| end repeat | |
| -- the fact that Messages.app is running | |
| -- does not mean it is ready to send, | |
| -- unfortunately, add another small delay | |
| delay delaytime | |
| end waitUntilRunning | |
| on appIsRunning(appName) | |
| application appname is running | |
| end appIsRunning | |
| -- use system events (unused) | |
| on SysevAppIsRunning(appName) | |
| tell application "System Events" to (name of processes) contains appName | |
| end appIsRunning | |
| -- use finder (unusged) | |
| on finderAppIsRunning(appName) | |
| tell application "Finder" to (name of every process) contains appName | |
| end appIsRunning | |
| -- taken from: | |
| -- http://stackoverflow.com/questions/11812184/how-to-send-an-imessage-text-with-applescript-only-in-provided-service | |
| -- thanks to users @Senseful and @DigiLord | |
| on run {targetBuddyPhone, targetMessage} | |
| tell application "Messages" | |
| -- if Messages.app was not running, launch it | |
| set wasRunning to true | |
| if it is not running then | |
| set wasRunning to false | |
| launch | |
| close window 1 | |
| my waitUntilRunning("Messages", 1) | |
| close window 1 | |
| end if | |
| -- send the message | |
| set targetService to 1st service whose service type = iMessage | |
| set targetBuddy to buddy targetBuddyPhone of targetService | |
| send targetMessage to targetBuddy | |
| -- if the app was not running, close the window | |
| if not wasRunning | |
| close window 1 | |
| end if | |
| end tell | |
| end run |
@solderjs
Here's how to send messages without manually creating a buddy:#!/bin/sh if [ "$#" -eq 1 ]; then stdinmsg=$(cat); fi exec <"$0" || exit; read v; read v; read v; exec /usr/bin/osascript - "$@" "$stdinmsg"; exit on run {phoneNumber, message} activate application "Messages" tell application "System Events" to tell process "Messages" key code 45 using command down -- press Command + N to start a new window keystroke phoneNumber -- input the phone number key code 36 -- press Enter to focus on the message area keystroke message -- type some message key code 36 -- press Enter to send end tell end runHere's how to send to multiple contacts with a csv file: https://gist.github.com/james-tindal/3951ec2c076a5158e15245f817f92de4
Works on my computer.
Thanks for this. Is there a way to do this without having the iMessage window popup and display on the desktop?
I get error "966:967: syntax error: Expected expression, etc. but found unknown token. (-2741)" what does this mean ? thanks
Can you help me send photo through iMessage ? I tried this code but it show "Failed to send" after few minutes of waiting
set theAttachment1 to POSIX file "/path to file/test.png"
send file theAttachment1 to targetBuddy
Added some features to my fork you may find interesting:
https://gist.github.com/devopsec/0359ce51ea4fa904b1c3674b8c56db78
Is there a way to keystroke a Group chat instead of a phone number?
@solderjs
Here's how to send messages without manually creating a buddy:
Here's how to send to multiple contacts with a csv file: https://gist.github.com/james-tindal/3951ec2c076a5158e15245f817f92de4
Works on my computer.