Added more commands #2

Merged
pratyush merged 2 commits from add_more_commands into master 2025-11-21 11:03:13 +01:00
Showing only changes of commit a675fc8c18 - Show all commits

View File

@ -40,17 +40,21 @@ _ = PluginInternationalization("ListenBrainz")
class ListenBrainz(callbacks.Plugin):
"""Fetches scrobbled metadata for users."""
threaded = True
def __init__(self, irc):
self.__parent = super(ListenBrainz, self)
self.__parent.__init__(irc)
self.client = liblistenbrainz.ListenBrainz()
self.DISPLAY_LIMIT = 3
@wrap(["text"])
def np(self, irc, msg, args, user):
"""<user>
pratyush marked this conversation as resolved Outdated
Outdated
Review

nit: I think if listen is None ... foo ... else ... bar would be more direct than if listen is not None ... bar ... else ... foo

nit: I think `if listen is None ... foo ... else ... bar` would be more direct than `if listen is not None ... bar ... else ... foo`
Announces the track currently being played by <user>.
"""
client = liblistenbrainz.ListenBrainz()
listen = client.get_playing_now(user)
listen = self.client.get_playing_now(user)
if listen is None:
response = f"{user} doen't seem to be listening to anything"
else:
@ -61,47 +65,44 @@ class ListenBrainz(callbacks.Plugin):
)
irc.reply(response)
@wrap(["text"])
def listencount(self, irc, msg, args, user):
"""<user>
pratyush marked this conversation as resolved Outdated
Outdated
Review

similar here, but it was not touched in this patch

similar here, but it was not touched in this patch
Announces total number of tracks scrobbled by <user>
"""
client = liblistenbrainz.ListenBrainz()
count = client.get_user_listen_count(user)
count = self.client.get_user_listen_count(user)
if count is None:
response = "Nothing recorded"
else:
response = (f"{user} has recorded listening to {count} tracks")
irc.reply(response)
@wrap(["text"])
def tracks(self, irc, msg, args, user):
"""<user>
<user>'s top listened to album releases.
"""
client = liblistenbrainz.ListenBrainz()
try:
data = client.get_user_recordings(user)
data = self.client.get_user_recordings(user)
payload = data.get("payload", {})
except Exception as e:
irc.error(f"An unexpected error occurred: {e}", Raise=True)
return
total_tracks = payload.get("total_recording_count", "N/A")
recordings = payload.get("recordings", [])
if not recordings:
irc.reply(f"{user} has no recorded tracks.")
return
top_tracks = recordings[:3]
top_tracks = recordings[:DISPLAY_LIMIT]
header = f"{user}'s Top {len(top_tracks)} Tracks (Total unique tracks: {total_tracks:,}):"
irc.reply(header)
for i, track in enumerate(top_tracks):
rank = i + 1
pratyush marked this conversation as resolved Outdated
Outdated
Review

rank does not seem to be used, it could be removed, and then enumerate() and i would no longer be needed either - or am I missing something?

`rank` does not seem to be used, it could be removed, and then `enumerate()` and `i` would no longer be needed either - or am I missing something?

it was a part of the output in the original idea but thought maybe it’s better to merge a –count optional arg which also does a reply.inPrivate (iirc it’s called).

it was a part of the output in the original idea but thought maybe it's better to merge a --count optional arg which also does a reply.inPrivate (iirc it's called).

i feel even 4 lines is a lot of output so kept this hardcoded to top 3 results as it gives 25 by default.

i feel even 4 lines is a lot of output so kept this hardcoded to top 3 results as it gives 25 by default.

Planning to keep it.

Planning to keep it.
artist = track.get("artist_name", "Unknown Artist")
@ -118,15 +119,15 @@ class ListenBrainz(callbacks.Plugin):
)
irc.reply(response)
@wrap(["text"])
def albums(self, irc, msg, args, user):
"""<user>
Announces the top albums/releases listened to by <user>.
"""
client = liblistenbrainz.ListenBrainz()
try:
data = client.get_user_releases(user)
data = self.client.get_user_releases(user)
payload = data.get("payload", {})
except Exception as e:
irc.error(f"An unexpected error occurred: {e}", Raise=True)
@ -139,7 +140,7 @@ class ListenBrainz(callbacks.Plugin):
irc.reply(f"{user} has no recorded releases.")
return
top_releases = releases[:3]
top_releases = releases[:DISPLAY_LIMIT]
header = f"{user}'s Top {len(top_releases)} Releases (Total unique releases: {total_albums:,}):"
irc.reply(header)