]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/lastfm.rb
rss plugin: check for unhandled Atom feeds (old Ruby/RSS library)
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / lastfm.rb
index 44a265bde8e4acc4d837018b09fa0ea6caf65801..6482b543067ce63c90a1c8e6d0f3ffeadcd40469 100644 (file)
@@ -28,10 +28,10 @@ class ::LastFmEvent
 
     if @artists.length > 10 #more than 10 artists and it floods
       diff = @artists.length - 10
-      @artist_string = @artists[0..10].join(', ')
+      @artist_string = Bold + @artists[0..10].join(', ') + Bold
       @artist_string << _(" and %{n} more...") % {:n => diff}
     else
-      @artist_string = @artists.join(', ')
+      @artist_string = Bold + @artists.join(', ') + Bold
     end
   end
 
@@ -85,8 +85,10 @@ class LastFmPlugin < Plugin
       _("lastfm set nick <user> => associate your current irc nick with a last.fm user. lastfm set verb <present> <past> => set your preferred now playing verb. default \"listening\" and \"listened\".")
     when :who
       _("lastfm who [<nick>] => show who <nick> is at last.fm. if <nick> is empty, show who you are at lastfm.")
+    when :compare
+      _("lastfm compare <nick1> <nick2> => show musical taste compatibility between nick1 and nick2.")
     else
-      _("lastfm [<user>] => show your or <user>'s now playing track at lastfm. np [<user>] => same as 'lastfm'. other topics: events, artist, album, track, now, set, who")
+      _("lastfm [<user>] => show your or <user>'s now playing track at lastfm. np [<user>] => same as 'lastfm'. other topics: events, artist, album, track, now, set, who, compare")
     end
   end
 
@@ -100,15 +102,15 @@ class LastFmPlugin < Plugin
 
     uri = nil
     if artist == nil
-      uri = URI.escape("#{APIURL}method=geo.getevents&location=#{location}")
+      uri = "#{APIURL}method=geo.getevents&location=#{CGI.escape location}"
     else
-      uri = URI.escape("#{APIURL}method=artist.getevents&artist=#{artist}")
+      uri = "#{APIURL}method=artist.getevents&artist=#{CGI.escape artist}"
     end
     xml = @bot.httputil.get_response(uri)
 
     doc = Document.new xml.body
     if xml.class == Net::HTTPInternalServerError
-      if doc.root.attributes["status"] == "failed"
+      if doc.root and doc.root.attributes["status"] == "failed"
         m.reply doc.root.elements["error"].text
       else
         m.reply _("Could not retrieve events")
@@ -122,7 +124,7 @@ class LastFmPlugin < Plugin
       venue = e.elements["venue"].elements["name"].text
       city = e.elements["venue"].elements["location"].elements["city"].text
       country =  e.elements["venue"].elements["location"].elements["country"].text
-      h[:location] = Bold + venue + Bold + " #{city}, #{country}"
+      h[:location] = Underline + venue + Underline + " #{Bold + city + Bold}, #{country}"
       date = e.elements["startDate"].text.split
       h[:date] = Time.utc(date[3].to_i, date[2], date[1].to_i)
       h[:desc] = e.elements["description"].text
@@ -150,7 +152,7 @@ class LastFmPlugin < Plugin
     opts = { :cache => false }
     user1 = params[:user1].to_s
     user2 = params[:user2].to_s
-    xml = @bot.httputil.get_response("#{APIURL}method=tasteometer.compare&type1=user&type2=user&value1=#{user1}&value2=#{user2}", opts)
+    xml = @bot.httputil.get_response("#{APIURL}method=tasteometer.compare&type1=user&type2=user&value1=#{CGI.escape user1}&value2=#{CGI.escape user2}", opts)
     doc = Document.new xml.body
     unless doc
       m.reply _("last.fm parsing failed")
@@ -207,7 +209,7 @@ class LastFmPlugin < Plugin
     else
       user = m.sourcenick
     end
-    xml = @bot.httputil.get_response("#{APIURL}method=user.getrecenttracks&user=#{user}", opts)
+    xml = @bot.httputil.get_response("#{APIURL}method=user.getrecenttracks&user=#{CGI.escape user}", opts)
     doc = Document.new xml.body
     unless doc
       m.reply _("last.fm parsing failed")
@@ -262,7 +264,7 @@ class LastFmPlugin < Plugin
   end
 
   def find_artist(m, params)
-    xml = @bot.httputil.get(URI.escape("#{APIURL}method=artist.getinfo&artist=#{params[:artist]}"))
+    xml = @bot.httputil.get("#{APIURL}method=artist.getinfo&artist=#{CGI.escape params[:artist].to_s}")
     unless xml
       m.reply _("I had problems getting info for %{a}.") % {:a => params[:artist]}
       return
@@ -277,13 +279,13 @@ class LastFmPlugin < Plugin
     playcount = first.elements["stats"].elements["plays"].text
     listeners = first.elements["stats"].elements["listeners"].text
     summary = first.elements["bio"].elements["summary"].text
-    m.reply _("\"%{a}\" has been played %{c} times and is being listened to by %{l} people.") % {:a => artist, :c => playcount, :l => listeners}
+    m.reply _("%{b}%{a}%{b} has been played %{c} times and is being listened to by %{l} people.") % {:b => Bold, :a => artist, :c => playcount, :l => listeners}
     m.reply summary.ircify_html
   end
 
   def find_track(m, params)
     track = params[:track].to_s
-    xml = @bot.httputil.get(URI.escape("#{APIURL}method=track.search&track=#{CGI.escape track}"))
+    xml = @bot.httputil.get("#{APIURL}method=track.search&track=#{CGI.escape track}")
     unless xml
       m.reply _("I had problems getting info for %{a}.") % {:a => track}
       return
@@ -318,7 +320,7 @@ class LastFmPlugin < Plugin
   end
 
   def get_album(artist, album)
-    xml = @bot.httputil.get(URI.escape("#{APIURL}method=album.getinfo&artist=#{artist}&album=#{album}"))
+    xml = @bot.httputil.get("#{APIURL}method=album.getinfo&artist=#{CGI.escape artist}&album=#{CGI.escape album}")
     unless xml
       return [_("I had problems getting album info")]
     end