From c682421570136aee89d4d3452b3049f2fe8c7ba2 Mon Sep 17 00:00:00 2001 From: codey Date: Mon, 24 Feb 2025 06:21:56 -0500 Subject: [PATCH] cleanup / respect allergies --- cogs/karma.py | 3 --- cogs/lovehate.py | 9 +-------- cogs/meme.py | 3 --- cogs/misc.py | 15 +++++++++------ cogs/misc_util.py | 11 +++++++---- cogs/owner.py | 31 ++++++++++++++++++++++++++++--- cogs/radio.py | 3 --- cogs/sing.py | 32 ++++++++++++++++++-------------- constructors.py | 2 -- disc_havoc.py | 3 --- tests/uploader_tests.py | 2 -- util/__init__.py | 4 +--- util/catbox.py | 2 -- util/discord_helpers.py | 1 - util/jesusmemes.py | 2 -- util/litterbox.py | 2 -- util/lovehate_db.py | 1 - util/radio_util.py | 2 -- util/sing_util.py | 5 ++--- 19 files changed, 66 insertions(+), 67 deletions(-) diff --git a/cogs/karma.py b/cogs/karma.py index 2421f98..db0f228 100644 --- a/cogs/karma.py +++ b/cogs/karma.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3.12 -# pylint: disable=broad-exception-caught, bare-except, invalid-name - import sys from os import path sys.path.append( path.dirname( path.dirname( path.abspath(__file__) ) ) ) diff --git a/cogs/lovehate.py b/cogs/lovehate.py index 0449b1b..43c24ad 100644 --- a/cogs/lovehate.py +++ b/cogs/lovehate.py @@ -1,15 +1,8 @@ -#!/usr/bin/env python3.12 -# pylint: disable=broad-exception-caught - import traceback -import logging -import os -from typing import Any, Optional, Union +from typing import Optional, Union import discord -import aiosqlite as sqlite3 from discord.ext import bridge, commands from util.lovehate_db import DB -from constructors import LoveHateException from disc_havoc import Havoc class LoveHate(commands.Cog): diff --git a/cogs/meme.py b/cogs/meme.py index feb9bf4..df1e06c 100644 --- a/cogs/meme.py +++ b/cogs/meme.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3.12 - import os import traceback import json @@ -25,7 +23,6 @@ import scrapers.dinosaur_scrape as dinog import scrapers.onion_scrape as oniong import scrapers.thn_scrape as thng import constants -# pylint: disable=global-statement, bare-except, invalid-name, line-too-long meme_choices = [] BOT_CHANIDS = [] diff --git a/cogs/misc.py b/cogs/misc.py index 0634ac0..1852690 100644 --- a/cogs/misc.py +++ b/cogs/misc.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3.12 - import os import traceback import urllib @@ -14,8 +12,6 @@ from sh import cowsay as cow_say, fortune # pylint: disable=no-name-in-module from discord.ext import bridge, commands, tasks from disc_havoc import Havoc from constructors import MiscException -# pylint: disable=bare-except, broad-exception-caught, broad-exception-raised, global-statement -# pylint: disable=too-many-lines, invalid-name """ This plugin encompasses numerous tiny commands/functions that @@ -809,6 +805,8 @@ class Misc(commands.Cog): Returns: None """ + + recipient_allergic: bool = False authorDisplay: str = ctx.author.display_name if not(ctx.author.display_name is None)\ else ctx.message.author.display_name @@ -831,7 +829,9 @@ class Misc(commands.Cog): else: recipient = discord.utils.escape_mentions(recipient.strip()) try: - chosen_coffee: Optional[str] = self.util.get_coffee() + if "pudding" in recipient or recipient_id in [898332028007751741]: + recipient_allergic = True + chosen_coffee: Optional[str] = self.util.get_coffee(recipient_allergic) if not chosen_coffee: return response = await ctx.respond(f"*hands **{recipient_normal}** {chosen_coffee}*") @@ -1435,7 +1435,10 @@ class Misc(commands.Cog): Returns: None """ - chosen_coffee = self.util.get_coffee() + recipient_allergic: bool = False + if member.id in [898332028007751741]: + recipient_allergic = True + chosen_coffee = self.util.get_coffee(recipient_allergic) response = await ctx.interaction.respond(f"*hands <@{member.id}> {chosen_coffee}*") await self.util.increment_counter("coffees") try: diff --git a/cogs/misc_util.py b/cogs/misc_util.py index 3fa7663..20b1848 100644 --- a/cogs/misc_util.py +++ b/cogs/misc_util.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3.12 - import os import logging import traceback @@ -380,17 +378,22 @@ class Util: } - def get_coffee(self) -> Optional[str]: + def get_coffee(self, + recipient_allergic: Optional[bool] = False) -> Optional[str]: """ Get Coffee + Args: + recipient_allergic (bool): Is the recipient allergic? (so we know when to keep our nuts out of it) + Returns: str """ try: randomCoffee: str = random.choice(self.COFFEES) - if self.LAST_5_COFFEES and randomCoffee in self.LAST_5_COFFEES: + if self.LAST_5_COFFEES and randomCoffee in self.LAST_5_COFFEES\ + or (recipient_allergic and "nut" in randomCoffee.lower()): return self.get_coffee() # Recurse if len(self.LAST_5_COFFEES) >= 5: self.LAST_5_COFFEES.pop() # Store no more than 5 of the last served coffees diff --git a/cogs/owner.py b/cogs/owner.py index 336fdc5..ba3efcf 100644 --- a/cogs/owner.py +++ b/cogs/owner.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3.12 -# pylint: disable=bare-except, broad-exception-caught - import io import random import asyncio @@ -45,6 +42,34 @@ class Owner(commands.Cog): return await ctx.respond("Too hot! (35°C maximum)") self._temperature = _temperature return await ctx.respond(f"As per your request, I have adjusted the temperature to {_temperature} °C.") + + @bridge.bridge_command() + @commands.is_owner() + async def editmsg(self, ctx, + msgid: str, + *, + newcontent: str + ) -> None: + """ + Edit a message previously sent by the bot + + Args: + ctx (Any): Discord context + msgid (str): Should be an int, the message id to edit + newcontent (str): Content to replace message with + """ + + try: + message: Optional[discord.Message] = self.bot.get_message(int(msgid)) + if not message: + await ctx.respond(f"**Failed:** Message {msgid} not found.", + ephemeral=True) + return None + await message.edit(content=newcontent) + await ctx.respond("**Done!**", ephemeral=True) + except Exception as e: + await ctx.respond(f"**Failed:** {str(e)}", + ephemeral=True) @bridge.bridge_command() @commands.is_owner() diff --git a/cogs/radio.py b/cogs/radio.py index bbbf197..18a471e 100644 --- a/cogs/radio.py +++ b/cogs/radio.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3.12 -# pylint: disable=bare-except, broad-exception-caught, invalid-name - import logging import traceback from typing import Optional diff --git a/cogs/sing.py b/cogs/sing.py index a7bb575..746fa41 100644 --- a/cogs/sing.py +++ b/cogs/sing.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3.12 -# pylint: disable=bare-except, broad-exception-caught, global-statement, invalid-name - import traceback import logging from typing import Optional, Union @@ -12,7 +9,6 @@ from util.sing_util import Utility from discord.ext import bridge, commands from disc_havoc import Havoc - BOT_CHANIDS = [] class Sing(commands.Cog): @@ -73,11 +69,15 @@ class Sing(commands.Cog): (search_artist, search_song, search_subsearch) = parsed # await ctx.respond(f"So, {search_song} by {search_artist}? Subsearch: {search_subsearch} I will try...") # Commented, useful for debugging - search_result: list[str] = await self.utility.lyric_search(search_artist, search_song, + search_result: Optional[list] = await self.utility.lyric_search(search_artist, search_song, search_subsearch) + if not search_result: + await ctx.respond("ERR: No search result.") + return + if len(search_result) == 1: - return await ctx.respond(search_result[0].strip()) + return await ctx.respond("ERR: Not found!") if not isinstance(search_result[0], tuple): return # Invalid data type ( @@ -111,11 +111,12 @@ class Sing(commands.Cog): embed.set_footer(text=footer) embeds.append(embed) await ctx.respond(embed=embeds[0]) - for embed in embeds[1:]: - await ctx.send(embed=embed) + for _embed in embeds[1:]: + if isinstance(_embed, discord.Embed): + await ctx.send(embed=_embed) except Exception as e: traceback.print_exc() - return await ctx.respond(f"ERR: {str(e)}") + await ctx.respond(f"ERR: {str(e)}") @commands.user_command(name="Sing") async def sing_context_menu(self, ctx, member: discord.Member) -> None: @@ -151,15 +152,18 @@ class Sing(commands.Cog): if isinstance(parsed, tuple): (search_artist, search_song, search_subsearch) = parsed await ctx.respond("*Searching...*", ephemeral=True) # Must respond to interactions within 3 seconds, per Discord - search_result: list = await self.utility.lyric_search(search_artist, search_song, + search_result: Optional[list] = await self.utility.lyric_search(search_artist, search_song, search_subsearch) - - if len(search_result) == 1: - return await ctx.send(search_result[0].strip()) + if not search_result: + await ctx.respond("ERR: No search result") + return + + if isinstance(search_result[0], str): + return await ctx.send("ERR: No search result") # Error message from API (search_result_artist, search_result_song, search_result_src, search_result_confidence, search_result_time_taken) = search_result[0] # First index is a tuple - search_result_wrapped: list[str] = search_result[1] # Second index is the wrapped lyrics + search_result_wrapped: list = search_result[1] # Second index is the wrapped lyrics search_result_wrapped_short: list[str] = search_result[2] # Third index is shortened lyrics if not IS_SPAMCHAN: diff --git a/constructors.py b/constructors.py index 175493a..a200f1e 100644 --- a/constructors.py +++ b/constructors.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3.12 - """ AI """ diff --git a/disc_havoc.py b/disc_havoc.py index 589aa0e..7e398a1 100644 --- a/disc_havoc.py +++ b/disc_havoc.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3.12 -# pylint: disable=bare-except, invalid-name, import-outside-toplevel - import os import logging import importlib diff --git a/tests/uploader_tests.py b/tests/uploader_tests.py index 22145f0..dc48be5 100644 --- a/tests/uploader_tests.py +++ b/tests/uploader_tests.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3.12 - """ Tests for both Catbox & Litterbox """ diff --git a/util/__init__.py b/util/__init__.py index 9c22854..b0a6ec0 100644 --- a/util/__init__.py +++ b/util/__init__.py @@ -1,6 +1,4 @@ -#!/usr/bin/env python3.12 - import importlib - from . import discord_helpers + importlib.reload(discord_helpers) \ No newline at end of file diff --git a/util/catbox.py b/util/catbox.py index 5c6d7a0..4ef4d02 100644 --- a/util/catbox.py +++ b/util/catbox.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3.12 - from typing import Optional from aiohttp import ClientSession, ClientTimeout, FormData import traceback diff --git a/util/discord_helpers.py b/util/discord_helpers.py index 627ae37..e0ac403 100644 --- a/util/discord_helpers.py +++ b/util/discord_helpers.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3.12 import re import discord from typing import Optional, Any diff --git a/util/jesusmemes.py b/util/jesusmemes.py index 5efd837..6b68863 100644 --- a/util/jesusmemes.py +++ b/util/jesusmemes.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3.12 - import aiohttp from typing import Optional import regex diff --git a/util/litterbox.py b/util/litterbox.py index ba0a274..c5993ae 100644 --- a/util/litterbox.py +++ b/util/litterbox.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3.12 - """ Litterbox (Catbox) Uploader (Async) """ diff --git a/util/lovehate_db.py b/util/lovehate_db.py index 9f76c39..8acec53 100644 --- a/util/lovehate_db.py +++ b/util/lovehate_db.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3.12 import os import logging from typing import LiteralString, Optional, Union diff --git a/util/radio_util.py b/util/radio_util.py index d369eed..7e747d4 100644 --- a/util/radio_util.py +++ b/util/radio_util.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3.12 - import logging from typing import Optional from aiohttp import ClientSession, ClientTimeout diff --git a/util/sing_util.py b/util/sing_util.py index 1e7e86e..97c6366 100644 --- a/util/sing_util.py +++ b/util/sing_util.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3.12 import logging import regex import aiohttp @@ -10,7 +9,7 @@ from typing import Optional, Union class Utility: """Sing Utility""" def __init__(self) -> None: - self.api_url: str = "http://127.0.0.1:52111/lyric/search" + self.api_url: str = "http://10.10.10.100:52111/lyric/search" self.api_src: str = "DISC-HAVOC" def parse_song_input(self, song: Optional[str] = None, @@ -120,7 +119,7 @@ class Utility: if response.get('err'): return [(f"ERR: {response.get('errorText')}",)] - out_lyrics = regex.sub(r'
', '\u200B\n', response.get('lyrics')) + out_lyrics = regex.sub(r'
', '\u200B\n', response.get('lyrics', '')) response_obj: dict = { 'artist': response.get('artist'), 'song': response.get('song'),