]>
jfr.im git - erebus.git/blob - modules/listenbrainz.py
81445d1ba85ab36e7d8a984a42ab0ab28b59b291
1 # Erebus IRC bot - Author: Erebus Team
2 # vim: fileencoding=utf-8
3 # ListenBrainz now-playing
7 'author': 'Erebus Team',
8 'license': 'public domain',
9 'compatible': [0], # compatible module API versions
10 'depends': [], # other modules required to work properly?
11 'softdeps': ['help'], # modules which are preferred but not required
16 lib
= modlib
.modlib(__name__
)
17 modstart
= lib
.modstart
23 if sys
.version_info
.major
< 3:
24 from urllib
import urlopen
, quote
, HTTPError
26 from urllib
.request
import urlopen
27 from urllib
.parse
import quote
28 from urllib
.error
import HTTPError
30 @lib.hook(('listenbrainz','np'), needchan
=False, wantchan
=True)
31 @lib.help('[<user>]', 'looks up ListenBrainz now playing for a user', 'default user taken from SETINFO listenbrainz')
32 def listenbrainz(bot
, user
, chan
, realtarget
, *args
):
34 username
= lib
.mod('userinfo').get(user
, 'listenbrainz')
38 return "I don't know what username you want to look at! Try !LISTENBRAINZ <user>"
40 url
= "https://api.listenbrainz.org/1/user/%s/playing-now" % (quote(username
))
41 if sys
.version_info
.major
< 3:
42 url
= url
.encode('utf8')
45 lbdata
= json
.load(urlopen(url
))
46 except HTTPError
as e
:
47 return "No such user (or some other error: %s %s) " % (e
.code
, e
.msg
)
49 if lib
.parent
.cfg
.getboolean('debug', 'listenbrainz'):
50 lib
.parent
.log('*', "?", repr(lbdata
))
52 if not lbdata
['payload']['listens']:
53 return "ListenBrainz says they're not listening to anything!"
55 track
= lbdata
['payload']['listens'][0]['track_metadata']
56 player
= 'unknown player'
57 if 'media_player' in track
['additional_info']: player
= track
['additional_info']['media_player']
58 elif 'listening_from' in track
['additional_info']: player
= track
['additional_info']['listening_from']
59 return lib
.parent
.cfg
.get('listenbrainz', 'format', "https://listenbrainz.org/user/%(user)s is playing %(track)s by %(artist)s (%(album)s) (from %(player)s)") % {
61 'track': track
['track_name'],
62 'artist': track
['artist_name'],
63 'album': track
['release_name'],