misc/add compliment bridge command

This commit is contained in:
codey 2025-02-14 07:10:09 -05:00
parent 43ecfc6633
commit 2c2d191a08
5 changed files with 66 additions and 5 deletions

View File

@ -148,7 +148,7 @@ class Karma(commands.Cog):
"""Karma Cog for Havoc"""
def __init__(self, bot):
importlib.reload(constants)
self.bot = bot
self.bot: discord.Bot = bot
self.util = Util(self.bot)
# self.karma_regex = regex.compile(r'(\w+)(\+\+|\-\-)')
self.karma_regex: Pattern = regex.compile(r'(\b\w+(?:\s+\w+)*)(\+\+($|\s)|\-\-($|\s))')

View File

@ -256,6 +256,40 @@ class Misc(commands.Cog):
traceback.print_exc()
return await ctx.respond(f"Insult failed :(\nError: {str(e)}")
@bridge.bridge_command()
async def compliment(self, ctx, *,
recipient: Optional[str] = None) -> None:
"""
Compliment someone (or yourself)
Args:
ctx (Any)
recipient (Optional[str])
Returns:
None
"""
try:
authorDisplay: str = ctx.author.display_name if not(ctx.author.display_name is None)\
else ctx.message.author.display_name
if recipient is None:
recipient: str = authorDisplay.strip()
else:
if discord.utils.raw_mentions(recipient):
# There are mentions
recipient_id: int = discord.utils.raw_mentions(recipient)[0] # First mention
recipient: str = self.bot.get_guild(ctx.guild.id)\
.get_member(recipient_id).display_name
else:
recipient: str = discord.utils.escape_mentions(recipient.strip())
with ctx.channel.typing():
compliment: str = await self.util.get_compliment(recipient)
if compliment:
return await ctx.respond(compliment)
return await ctx.respond("Compliment failed :(")
except Exception as e:
traceback.print_exc()
return await ctx.respond(f"Compliment failed :(\nError: {str(e)}")
@bridge.bridge_command(aliases=['whiskey'])
async def whisky(self, ctx, *,
recipient: Optional[str] = None) -> None:

View File

@ -3,7 +3,9 @@
import logging
import traceback
from typing import Optional
from discord.ext import bridge, commands, tasks
from util.radio_util import get_now_playing
import discord
class Radio(commands.Cog):
@ -14,7 +16,7 @@ class Radio(commands.Cog):
'sfm': (1145182936002482196, 1221615558492029050), # Tuple: Guild Id, Chan Id
}
self.STREAM_URL: str = "https://relay.sfm.codey.lol/aces.ogg"
self.LAST_NP_TRACK: Optional[str] = None
try:
self.radio_state_loop.cancel()
except Exception as e:
@ -75,7 +77,7 @@ class Radio(commands.Cog):
traceback.print_exc()
return
@tasks.loop(seconds=2.0)
@tasks.loop(seconds=5.0)
async def radio_state_loop(self) -> None:
"""Radio State Loop"""
try:
@ -94,6 +96,11 @@ class Radio(commands.Cog):
before_options="-timeout 3000000")
vc.play(source, after=lambda e: logging.info("Error: %s", e)\
if e else None)
# Get Now Playing
np_track = await get_now_playing()
if np_track and not self.LAST_NP_TRACK == np_track:
self.LAST_NP_TRACK: str = np_track
await vc.channel.set_status(f"Now playing: {np_track}")
except:
traceback.print_exc()

View File

@ -26,7 +26,6 @@ cogs_list: list[str] = [
'owner',
'sing',
'meme',
'ai',
'karma',
'lovehate',
'quote',

21
util/radio_util.py Normal file
View File

@ -0,0 +1,21 @@
#!/usr/bin/env python3.12
import logging
from aiohttp import ClientSession, ClientTimeout
"""Radio Utils"""
async def get_now_playing() -> str:
np_url: str = "https://api.codey.lol/radio/np"
try:
async with ClientSession() as session:
async with await session.post(np_url, headers={
'content-type': 'application/json; charset=utf-8',
}, timeout=ClientTimeout(connect=1.5, sock_read=1.5)) as request:
request.raise_for_status()
response_json = await request.json()
artistsong = response_json.get('artistsong')
return artistsong
except Exception as e:
logging.critical("Now playing retrieval failed: %s",
str(e))