]>
Commit | Line | Data |
---|---|---|
1eb55450 JR |
1 | # Erebus IRC bot - Author: Erebus Team |
2 | # vim: fileencoding=utf-8 | |
3 | ||
4 | # module info | |
5 | modinfo = { | |
6 | 'author': 'Erebus Team', | |
7 | 'license': 'public domain', | |
8 | 'compatible': [0], # compatible module API versions | |
9 | 'depends': [], # other modules required to work properly? | |
10 | 'softdeps': ['help'], # modules which are preferred but not required | |
11 | } | |
12 | ||
13 | # preamble | |
14 | import modlib | |
15 | lib = modlib.modlib(__name__) | |
16 | modstart = lib.modstart | |
17 | modstop = lib.modstop | |
18 | ||
19 | # module code | |
20 | import json | |
21 | import sys | |
22 | if sys.version_info.major < 3: | |
23 | from urllib import urlopen, quote, HTTPError | |
24 | else: | |
25 | from urllib.request import urlopen | |
26 | from urllib.parse import quote | |
27 | from urllib.error import HTTPError | |
28 | ||
29 | @lib.hook(('listenbrainz','np'), needchan=False, wantchan=True) | |
30 | @lib.help('[<user>]', 'looks up ListenBrainz now playing for a user', 'default user taken from SETINFO listenbrainz') | |
31 | def listenbrainz(bot, user, chan, realtarget, *args): | |
32 | if len(args) == 0: | |
33 | username = lib.mod('userinfo').get(user, 'listenbrainz') | |
34 | else: | |
35 | username = args[0] | |
36 | if username is None: | |
37 | return "I don't know what username you want to look at! Try !LISTENBRAINZ <user>" | |
38 | ||
39 | url = "https://api.listenbrainz.org/1/user/%s/playing-now" % (quote(username)) | |
40 | if sys.version_info.major < 3: | |
41 | url = url.encode('utf8') | |
42 | ||
43 | try: | |
44 | lbdata = json.load(urlopen(url)) | |
45 | except HTTPError as e: | |
46 | return "No such user (or some other error: %s %s) " % (e.code, e.msg) | |
47 | ||
48 | if lib.parent.cfg.getboolean('debug', 'listenbrainz'): | |
49 | lib.parent.log('*', "?", repr(lbdata)) | |
50 | ||
51 | if not lbdata['payload']['listens']: | |
52 | return "ListenBrainz says they're not listening to anything!" | |
53 | ||
54 | track = lbdata['payload']['listens'][0]['track_metadata'] | |
55 | player = 'unknown player' | |
56 | if 'media_player' in track['additional_info']: player = track['additional_info']['media_player'] | |
57 | elif 'listening_from' in track['additional_info']: player = track['additional_info']['listening_from'] | |
73937b91 | 58 | 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 |
59 | 'user': username, |
60 | 'track': track['track_name'], | |
61 | 'artist': track['artist_name'], | |
62 | 'album': track['release_name'], | |
63 | 'player': player, | |
64 | } |