yeah no lastfm gets the status change so fix later i guess

This commit is contained in:
WhatDidYouExpect 2025-07-17 15:22:39 +02:00
parent c565f962c5
commit 7c6be59dc9
4 changed files with 14 additions and 4 deletions

View file

@ -1,84 +0,0 @@
import os
import discord
from discord.ext import commands, tasks
import aiohttp
from dotenv import load_dotenv
load_dotenv()
#stole most of this code from my old expect bot so dont be suprised if its poorly made
LASTFM_API_KEY = os.getenv("LASTFM_API_KEY")
LASTFM_USERNAME = os.getenv("LASTFM_USERNAME")
class LastFmCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.current_track = None
self.update_presence_task = None
self.ready = False
bot.loop.create_task(self.wait_until_ready())
async def wait_until_ready(self):
await self.bot.wait_until_ready()
self.ready = True
self.update_presence.start()
@tasks.loop(seconds=60)
async def update_presence(self):
print("Looped!")
if not self.ready:
return
track = await self.fetch_current_track()
if track and track != self.current_track:
self.current_track = track
artist, song = track
activity_name = f"{artist} - {song}"
await self.bot.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name=activity_name))
print(f"Updated song to {artist} - {song}")
else:
print("LastFM gave me the same track! not updating...")
@update_presence.before_loop
async def before_update_presence(self):
await self.bot.wait_until_ready()
@commands.command(name="lastfm")
async def lastfm_command(self, ctx):
track = await self.fetch_current_track()
if not track:
await ctx.send("No track currently playing or could not fetch data")
return
self.current_track = track
artist, song = track
activity_name = f"{artist} - {song}"
await self.bot.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name=activity_name))
await ctx.send(f"Updated presence to: Listening to {activity_name}")
async def fetch_current_track(self):
url = (
f"http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks"
f"&user={LASTFM_USERNAME}&api_key={LASTFM_API_KEY}&format=json&limit=1"
)
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
if resp.status != 200:
return None
data = await resp.json()
recenttracks = data.get("recenttracks", {}).get("track", [])
if not recenttracks:
return None
track = recenttracks[0]
if '@attr' in track and track['@attr'].get('nowplaying') == 'true':
artist = track.get('artist', {}).get('#text', 'Unknown Artist')
song = track.get('name', 'Unknown Song')
return artist, song
return None
async def setup(bot):
if not LASTFM_API_KEY or not LASTFM_USERNAME:
return
else:
await bot.add_cog(LastFmCog(bot))