diff options
Diffstat (limited to 'plugin.py')
| -rw-r--r-- | plugin.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/plugin.py b/plugin.py new file mode 100644 index 0000000..2c4d543 --- /dev/null +++ b/plugin.py @@ -0,0 +1,83 @@ +### +# Copyright (c) 2025, Pratyush Desai +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the author of this software nor the name of +# contributors to this software may be used to endorse or promote products +# derived from this software without specific prior written consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +### + +import liblistenbrainz + +from supybot import utils, plugins, ircutils, callbacks +from supybot.commands import * +from supybot.i18n import PluginInternationalization + + +_ = PluginInternationalization('ListenBrainz') + + +class ListenBrainz(callbacks.Plugin): + """Fetches scrobbled metadata for users.""" + threaded = True + + @wrap(["something"]) + def np(self, irc, msg, args, user): + """<user> + + Announces the track currently being played by <user>. + """ + client = liblistenbrainz.ListenBrainz() + listen = client.get_playing_now(user) + if listen is not None: + response = ( + f"{user} is currently playing: \x02{listen.track_name}\x0F " + f"from \x02{listen.release_name}\x0F by \x02{listen.artist_name}\x0F " + f"at \x02{listen.listened_at}\x0F") + irc.reply(response) + else: + response = f"{user} doen't seem to be listening to anything" + irc.reply(response) + + @wrap(["something"]) + def listencount(self,irc,msg, args, user): + """<user> + + Announces total number of tracks scrobbled by <user> + """ + client = liblistenbrainz.ListenBrainz() + count = client.get_user_listen_count(user) + if count is not None: + response = f"{user} has recorded listening to {count} tracks" + else: + response = "Nothing recorded" + irc.reply(response) + + + + +Class = ListenBrainz + + +# vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: |
