]> jfr.im git - erebus.git/blame - modules/listenbrainz.py
update comments
[erebus.git] / modules / listenbrainz.py
CommitLineData
1eb55450
JR
1# Erebus IRC bot - Author: Erebus Team
2# vim: fileencoding=utf-8
bac69af4 3# ListenBrainz now-playing
1eb55450
JR
4
5# module info
6modinfo = {
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
12}
13
14# preamble
15import modlib
16lib = modlib.modlib(__name__)
17modstart = lib.modstart
18modstop = lib.modstop
19
20# module code
21import json
22import sys
23if sys.version_info.major < 3:
24 from urllib import urlopen, quote, HTTPError
25else:
26 from urllib.request import urlopen
27 from urllib.parse import quote
28 from urllib.error import HTTPError
29
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')
32def listenbrainz(bot, user, chan, realtarget, *args):
33 if len(args) == 0:
34 username = lib.mod('userinfo').get(user, 'listenbrainz')
35 else:
36 username = args[0]
37 if username is None:
38 return "I don't know what username you want to look at! Try !LISTENBRAINZ <user>"
39
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')
43
44 try:
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)
48
49 if lib.parent.cfg.getboolean('debug', 'listenbrainz'):
50 lib.parent.log('*', "?", repr(lbdata))
51
52 if not lbdata['payload']['listens']:
53 return "ListenBrainz says they're not listening to anything!"
54
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']
73937b91 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)") % {
1eb55450
JR
60 'user': username,
61 'track': track['track_name'],
62 'artist': track['artist_name'],
63 'album': track['release_name'],
64 'player': player,
65 }