yeah no lastfm gets the status change so fix later i guess
This commit is contained in:
parent
c565f962c5
commit
7c6be59dc9
4 changed files with 14 additions and 4 deletions
|
@ -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))
|
Loading…
Add table
Add a link
Reference in a new issue