AppleScript - интерфейс Skype - PullRequest
       18

AppleScript - интерфейс Skype

0 голосов
/ 15 апреля 2011

Я очень новичок в AppleScript. Я нашел этот скрипт для использования с GeekTool Geeklet, чтобы показать онлайн-пользователей Skype. Когда я запускаю AppleScript, я получаю ошибку, что «skype_id» не определен. Я не могу найти, где / почему это не определено. Видимо, этот же сценарий работал в прошлом.

Вот ошибка: ошибка "Переменная skype_id не определена." номер -2753 от "skype_id"

Вот сценарий:

on remvix(ix, ls)
if ls is {} then
    return {}
else if ix is 1 then
    return rest of ls
else
    return {item 1 of ls} & remvix(ix - 1, rest of ls)
end if
end remvix

on tail(astring, k)
return do shell script "echo '" & astring & "' | awk '{{i = " & k & "; while ( i <= NF-1 ) {printf $i \" \"; i++}; printf $i}}'"
end tail

property onlinegroup : 0

on getgroup()
tell application "Skype"
    if my checkgroup(onlinegroup) is true then
        return onlinegroup
    else
        set hardwired to send command "search groups hardwired" script name "online users"
        set hardwired to my tail(hardwired, 2)
        set hardwired to text items of hardwired
        repeat with i in hardwired
            if my checkgroup(i) is true then
                return i
            end if
        end repeat
    end if
end tell
end getgroup

on checkgroup(group_id)
tell application "Skype"
    set grouptype to send command "get group " & group_id & " type" script name "online users"
    set grouptype to my tail(grouptype, 4)
    if grouptype is "ONLINE_FRIENDS" then
        return true
    else
        return false
    end if
end tell
end checkgroup

property dropped : 0
set text item delimiters to ", "
set onlineusers to {}
tell application "System Events"
set powerCheck to ((application processes whose (name is equal to "Skype")) count)

if powerCheck = 0 then
    set end of onlineusers to " Skype not running"
else
    tell application "Skype"
        set onlinegroup to my getgroup()
        set skype_id to send command "get group " & onlinegroup & " users"    script name "online users"
        set skype_id to my tail(skype_id, 4)
        set skype_id to text items of skype_id
        repeat with j from 1 to count skype_id
            if item j of skype_id is "echo123" then
                set skype_id_new to my remvix(j, skype_id)
                set dropped to 1
            end if
        end repeat
        if dropped is 1 then
            set skype_id to skype_id_new
        end if
        repeat with i in skype_id
            set aUser to send command "get user " & i & " fullname" script name "online users"
            set aUser to my tail(aUser, 4)
            if aUser is "" then set aUser to i
            set amoodtext to send command "get user " & i & " mood_text" script name "online users"
            set amoodtext to my tail(amoodtext, 4)
            if amoodtext is "" then
                set end of onlineusers to aUser
            else
                set end of onlineusers to aUser & " (" & amoodtext & ")"
            end if
        end repeat

        if (count skype_id) > 0 then
            set item 1 of onlineusers to " " & item 1 of onlineusers
        else
            set beginning of onlineusers to " No Contacts Online"
        end if
        return onlineusers
    end tell
end if
end tell

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 25 мая 2011

'my tail' - это собственная функция / обработчик скрипта, которая является просто оболочкой для скрипта awk (shell).По какой-то причине эта функция ничего не возвращает, и я замечаю, что она не включает проверку ошибок.Было бы полезно начать отладку блока «на хвосте».Например, являются ли параметры astring и k значимыми?Этот код обработки ошибок может быть вставлен в начало хвостового обработчика:

if ((class of astring) is not string) or ((class of k) is not integer) then
display dialog "Screwy parameter sent to tail" buttons {"Rats"} default button 1
error number -128 -- abort script entirely 
end if

Если это не находит ошибку, то, возможно, awk ведет себя неправильно, что кажется маловероятным, но все же возможно, возможно, возможно.

Просто общее замечание.Я знаю, что appleScript должен быть дружественным, легким языком (хотя это не так), и вы, вероятно, получили этот скрипт от кого-то другого, но для целей отладки вы напрашиваетесь на проблемы, переопределив переменную skype_id много раз.(Это причина ответа Чака).

...