mirror of
https://github.com/neoarz/Syntrel.git
synced 2025-12-25 11:40:12 +01:00
Simplifies the tweety command by removing the 'verified' and 'theme' arguments from command signatures and related logic. Defaults for these options are now set internally, and toggling is handled via UI elements instead of command parameters.
123 lines
4.7 KiB
Python
123 lines
4.7 KiB
Python
import discord
|
|
from discord.ext import commands
|
|
from discord.ext.commands import Context
|
|
from typing import Optional
|
|
|
|
from .download import download_command
|
|
from .mcquote import mcquote_command
|
|
from .img2gif import img2gif_command
|
|
from .tweety import tweety_command
|
|
|
|
|
|
def _require_group_prefix(context: Context) -> bool:
|
|
if getattr(context, "interaction", None):
|
|
return True
|
|
group = getattr(getattr(context, "cog", None), "qualified_name", "").lower()
|
|
if not group:
|
|
return True
|
|
prefix = context.prefix or ""
|
|
content = context.message.content.strip().lower()
|
|
return content.startswith(f"{prefix}{group} ")
|
|
|
|
class Media(commands.GroupCog, name="media"):
|
|
def __init__(self, bot) -> None:
|
|
self.bot = bot
|
|
super().__init__()
|
|
|
|
@commands.Cog.listener()
|
|
async def on_message(self, message: discord.Message):
|
|
"""Listen for bot mentions with 'tweety' command while replying to a message"""
|
|
if message.author.bot:
|
|
return
|
|
|
|
if self.bot.user in message.mentions and message.reference and message.reference.message_id:
|
|
content = message.content.lower()
|
|
content_without_mention = content.replace(f'<@{self.bot.user.id}>', '').replace(f'<@!{self.bot.user.id}>', '').strip()
|
|
|
|
if 'tweety' in content_without_mention:
|
|
ctx = await self.bot.get_context(message)
|
|
await self.tweety(ctx)
|
|
|
|
@commands.group(name="media", invoke_without_command=True)
|
|
async def media_group(self, context: Context):
|
|
embed = discord.Embed(
|
|
title="Media Commands",
|
|
description="Use `.media <subcommand>` or `/media <subcommand>`.",
|
|
color=0x7289DA
|
|
)
|
|
embed.set_author(name="Media", icon_url="https://yes.nighty.works/raw/y5SEZ9.webp")
|
|
embed.add_field(name="Available", value="download, mcquote, img2gif, tweety", inline=False)
|
|
await context.send(embed=embed)
|
|
|
|
async def _invoke_hybrid(self, context: Context, name: str, *args, **kwargs):
|
|
if name == "download":
|
|
await self.download(context, url=kwargs.get('url', ''))
|
|
return
|
|
if name == "mcquote":
|
|
await self.mcquote(context, text=kwargs.get('text', ''))
|
|
return
|
|
if name == "img2gif":
|
|
await self.img2gif(context, attachment=kwargs.get('attachment'))
|
|
return
|
|
if name == "tweety":
|
|
await self.tweety(context)
|
|
return
|
|
await context.send(f"Unknown media command: {name}")
|
|
|
|
@media_group.command(name="download")
|
|
async def media_group_download(self, context: Context, *, url: str):
|
|
await self._invoke_hybrid(context, "download", url=url)
|
|
|
|
@media_group.command(name="mcquote")
|
|
async def media_group_mcquote(self, context: Context, *, text: str):
|
|
await self._invoke_hybrid(context, "mcquote", text=text)
|
|
|
|
@media_group.command(name="img2gif")
|
|
async def media_group_img2gif(self, context: Context, attachment: Optional[discord.Attachment] = None):
|
|
await self._invoke_hybrid(context, "img2gif", attachment=attachment)
|
|
|
|
@media_group.command(name="tweety")
|
|
async def media_group_tweety(self, context: Context):
|
|
await self._invoke_hybrid(context, "tweety")
|
|
|
|
@commands.check(_require_group_prefix)
|
|
@commands.hybrid_command(
|
|
name="download",
|
|
description="Download a video from a URL using yt-dlp.",
|
|
)
|
|
async def download(self, context, *, url: str):
|
|
return await download_command()(self, context, url=url)
|
|
|
|
@commands.check(_require_group_prefix)
|
|
@commands.hybrid_command(
|
|
name="mcquote",
|
|
description="Generate a custom Minecraft quote image.",
|
|
)
|
|
async def mcquote(self, context, *, text: str):
|
|
return await mcquote_command()(self, context, text=text)
|
|
|
|
@commands.check(_require_group_prefix)
|
|
@commands.hybrid_command(
|
|
name="img2gif",
|
|
description="Convert an uploaded image to a GIF.",
|
|
)
|
|
async def img2gif(self, context, attachment: Optional[discord.Attachment] = None):
|
|
return await img2gif_command()(self, context, attachment=attachment)
|
|
|
|
@commands.check(_require_group_prefix)
|
|
@commands.hybrid_command(
|
|
name="tweety",
|
|
description="Convert a replied message to a tweet image.",
|
|
)
|
|
async def tweety(self, context):
|
|
return await tweety_command()(self, context)
|
|
|
|
async def setup(bot) -> None:
|
|
cog = Media(bot)
|
|
await bot.add_cog(cog)
|
|
|
|
bot.logger.info("Loaded extension 'media.download'")
|
|
bot.logger.info("Loaded extension 'media.mcquote'")
|
|
bot.logger.info("Loaded extension 'media.img2gif'")
|
|
bot.logger.info("Loaded extension 'media.tweety'")
|