Revision: 11268
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 29, 2009 13:59 by TALlama
Initial Code
(* *************************************************************
Some helpful handlers that deal with text
*)
(* Get all the words between the delimiters, as a list. The items do not include the delimiters
Example: allWords of "I am the very model of a script object" between {" "}
# => {"I", "am", "the", "very", "model", "of", "a", "script", "object"}
*)
to allWords of inString between delimiters
set tid to text item delimiters
set text item delimiters to delimiters
set retval to get text items in inString
set text item delimiters to tid
retval
end allWords
(* find all instances of "s" in "t" and replace them with "r"
Example: switchText of "Example text" from "e" to "."
# => ".xampl. t.xt"
*)
to switchText of t from s to r
set d to text item delimiters
set text item delimiters to s
set t to t's text items
set text item delimiters to r
tell t to set t to item 1 & ({""} & rest)
set text item delimiters to d
t
end switchText
(* Join the items in "stringArray" with "delimiter" and return.
Example: join {"X", "Y", "Z"} between "."
# => "X.Y.Z"
*)
to join of stringArray between delimiter
set d to text item delimiters
set text item delimiters to {} & delimiter
tell stringArray to set retval to item 1 & ({""} & rest)
set text item delimiters to d
retval
end join
(* *************************************************************
The actual script
*)
(* Get a script object to help with skype commands *)
to makeSkypeHelper(withScriptName)
script SkypeHelper
property scriptName : withScriptName
(* Run the "cmd" and return the result, as a list of words (as delimited by spaces)
Example: cmd("GET CURRENTUSERHANDLE")
# => {"CURRENTUSERHANDLE", "Skype.User"}
If there is an error, this method will detect it and throw a proper AppleScript error.
Example: cmd("INVALID CMD")
# => throws error with number 2, message "ERROR 2 Unknown command"
*)
to cmd(cmd)
tell application "Skype" to set response to send command cmd script name scriptName
set retval to allWords of response between {" "}
if first item of retval is equal to "ERROR" then
error response number (item 2 of retval as number)
end if
retval
end cmd
(* Create chat object from the results of a cmd("SEARCH xCHATS")
Example: chats from cmd("SEARCH CHATS")
# => {SkypeChat, SkypeChat... }
*)
to chats from response
set response to items 2 thru -1 of response
log response
set chatsArray to {}
repeat with chatid in response
if chatid ends with "," then
set chatid to (characters 1 thru -2 of chatid) as Unicode text
end if
copy makeChat(chatid) to the end of chatsArray
end repeat
chatsArray
end chats
(* Get all the recent chats as chat objects
Example: recentChats()
# => {SkypeChat, SkypeChat... }
*)
on recentChats()
chats from cmd("SEARCH RECENTCHATS")
end recentChats
(* Find the first chat that has the specified topic, or is a 1:1 dialog with the person named.
Example: findChat("Skype.User")
# => SkypeChat
Example: findChat("Chat Topic")
# => SkypeChat
If no appropriate chat can be found, returns missing value
*)
to findChat(topicOrSkypeLogin)
set theChats to recentChats()
repeat with chat in theChats
set fn to chat's topic()
if fn is equal to topicOrSkypeLogin then
return chat
end if
if chat's status() is equal to "DIALOG" and chat's isSubscribed() then
set members to chat's activeMembers()
if (allWords of members between {" "}) contains topicOrSkypeLogin then
return chat
end if
end if
end repeat
return missing value
end findChat
(* Send a chat message to the given target. The target can be a Chat Topic or a Skype user name.
*)
to sendMessage(target, message)
set chat to findChat(target)
if chat is equal to missing value then
set chat to createChat(target)
end if
tell chat to sendMessage(message)
end sendMessage
(* Create a new chat with the given target
Example: createChat("skype.user")
# => SkypeChat
*)
to createChat(target)
set response to cmd("CHAT CREATE " & target)
set chatid to item 2 of response
makeChat(chatid)
end createChat
(* Make a chat object for the already-existing Skype chat
Example: makeChat("#initiating.user/$called.user;123456789abcdef")
# => SkypeChat
*)
to makeChat(withChatID)
script SkypeChat
property parent : SkypeHelper
property chatid : withChatID
(* Get the value of the named property
Example: skypeProperty("TOPIC")
# => "Product Roadmap"
*)
on skypeProperty(propertyName)
set response to cmd("GET CHAT " & chatid & " " & propertyName)
set retval to join of (items 4 thru -1 of response) between {" "}
retval
end skypeProperty
(* Get the topic of this chat
Example: topic()
# => "Product Roadmap"
*)
on topic()
skypeProperty("TOPIC")
end topic
(* Get the status of this chat
Example: status()
# => "Dialog"
*)
on status()
skypeProperty("STATUS")
end status
(* Find out if the current user is currently subscribed to this chat.
When subscribed, the user can send messages to the chat and will get messages sent by others.
Example: isSubscribed()
# => true
*)
on isSubscribed()
skypeProperty("MYSTATUS") is equal to "SUBSCRIBED"
end isSubscribed
(* Get a space-delimited list of all the active members of this chat
Example: activeMembers()
# => "jim.kirk bones.mccoy"
*)
on activeMembers()
skypeProperty("ACTIVEMEMBERS")
end activeMembers
(* Send a message to this chat
Example: sendMessage("Hello, world!")
# => "MESSAGE 1234 STATUS SENDING"
*)
on sendMessage(message)
cmd("CHATMESSAGE " & chatid & " " & message)
end sendMessage
end script
end makeChat
end script
return SkypeHelper
end makeSkypeHelper
tell makeSkypeHelper("X")
sendMessage("UserName", "Hello, user!")
sendMessage("ChatName", "Hello, chatroom!")
end tell
Initial URL
Initial Description
A script library to make dealing with Skype's IM features easier.
Initial Title
AppleScript Skype Library
Initial Tags
Initial Language
AppleScript