summaryrefslogtreecommitdiffstats
path: root/plugin.py
diff options
context:
space:
mode:
authorPratyush Desai2025-11-19 02:18:57 +0530
committerPratyush Desai2025-11-19 02:18:57 +0530
commit81c0f66cf594d7a44b166bb05de79ed0277c188e (patch)
tree2c99d508fc6c4de2b7aad57e317500158fc72503 /plugin.py
downloadlistenbrainz-81c0f66cf594d7a44b166bb05de79ed0277c188e.tar.gz
listenbrainz-81c0f66cf594d7a44b166bb05de79ed0277c188e.tar.bz2
listenbrainz-81c0f66cf594d7a44b166bb05de79ed0277c188e.zip
Initialized and added some basic functionality
Add the token config var, couple of basic functions to kick things off Signed-off-by: Pratyush Desai <pratyush.desai@liberta.casa>
Diffstat (limited to 'plugin.py')
-rw-r--r--plugin.py83
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: