from util import hook, http

api_key = ""

api_url = "http://ws.audioscrobbler.com/2.0/?format=json"

@hook.command
def lastfm(inp, nick='', say=None):
    if inp:
        user = inp
    else:
        user = nick

    response = http.get_json(api_url, method="user.getrecenttracks",
                             api_key=api_key, user=user, limit=1)

    if 'error' in response:
        if inp:  # specified a user name
            return "error: %s" % response["message"]
        else:
            return "your nick is not a LastFM account. try '.lastfm username'."

    track = response["recenttracks"]["track"]
    title = track["name"]
    album = track["album"]["#text"]
    artist = track["artist"]["#text"]

    ret = "\x02%s\x0F's last track - \x02%s\x0f" % (user, title)
    if artist:
        ret += " by \x02%s\x0f" % artist
    if album:
        ret += " on \x02%s\x0f" % album

    say(ret)

from util import hook, http

api_key = ""

api_url = "http://ws.audioscrobbler.com/2.0/?format=json"

@hook.command
def lastfm(inp, nick='', say=None):
    if inp:
        user = inp
    else:
        user = nick

    response = http.get_json(api_url, method="user.getrecenttracks",
                             api_key=api_key, user=user, limit=1)

    if 'error' in response:
        if inp:  # specified a user name
            return "error: %s" % response["message"]
        else:
            return "your nick is not a LastFM account. try '.lastfm username'."

    tracks = response["recenttracks"]["track"]

    if len(tracks) == 0:
        return "no recent tracks for user %r found" % user

    if type(tracks) == list:
        # if the user is listening to something, the tracks entry is a list
        # the first item is the current track
        track = tracks[0]
        status = 'current track'
    elif type(tracks) == dict:
        # otherwise, they aren't listening to anything right now, and
        # the tracks entry is a dict representing the most recent track
        track = tracks
        status = 'last track'
    else:
        return "error parsing track listing"

    title = track["name"]
    album = track["album"]["#text"]
    artist = track["artist"]["#text"]

    ret = "\x02%s\x0F's %s - \x02%s\x0f" % (user, status, title)
    if artist:
        ret += " by \x02%s\x0f" % artist
    if album:
        ret += " on \x02%s\x0f" % album

    say(ret)

Fix last.fm bug for users not listening to something.
Fix last.fm bug for users not listening to something.

The last.fm plugin previously worked only for users not listening to
anything, and then it was 'fixed' for users listening to something, but
broke for users not listening to something. See lastfm.py comments for
changes.
