new cog
This commit is contained in:
parent
e6905b1d0a
commit
b07d0ac669
2 changed files with 84 additions and 0 deletions
|
@ -22,3 +22,6 @@ by expect (requires goober version 0.11.8 or higher)
|
||||||
|
|
||||||
[webUI](https://raw.githubusercontent.com/WhatDidYouExpect/goober/refs/heads/main/cogs/webserver.py)
|
[webUI](https://raw.githubusercontent.com/WhatDidYouExpect/goober/refs/heads/main/cogs/webserver.py)
|
||||||
by expect (requires goober version 0.11.8 or higher)
|
by expect (requires goober version 0.11.8 or higher)
|
||||||
|
|
||||||
|
[LastFM](https://raw.githubusercontent.com/WhatDidYouExpect/goober/refs/heads/main/cogs/webserver.py)
|
||||||
|
by expect (no idea what version it needs i've only tried it on 1.0.3)
|
||||||
|
|
81
cogs/lastfm.py
Normal file
81
cogs/lastfm.py
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
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):
|
||||||
|
await bot.add_cog(LastFmCog(bot))
|
Loading…
Add table
Add a link
Reference in a new issue