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.

  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"]
+     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 last track - \x02%s\x0f" % (user, title)
+     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.
## Code Before:
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)

## Instruction:
Fix last.fm bug for users not listening to something.
## Code After:
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)
