50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
|
import asyncio
|
||
|
import logging
|
||
|
|
||
|
import discord
|
||
|
|
||
|
from discord.ext import commands
|
||
|
|
||
|
|
||
|
class FFMeta(commands.Cog):
|
||
|
def __init__(self, bot: commands.Bot):
|
||
|
self.bot = bot
|
||
|
self.log = logging.getLogger("jimmy.cogs.ffmeta")
|
||
|
|
||
|
@commands.slash_command()
|
||
|
async def ffprobe(self, ctx: discord.ApplicationContext, url: str = None, attachment: discord.Attachment = None):
|
||
|
"""Runs ffprobe on a given URL or attachment"""
|
||
|
if url is None:
|
||
|
if attachment is None:
|
||
|
return await ctx.respond("No URL or attachment provided")
|
||
|
url = attachment.url
|
||
|
|
||
|
await ctx.defer()
|
||
|
|
||
|
process = await asyncio.create_subprocess_exec(
|
||
|
"ffprobe",
|
||
|
"-hide_banner",
|
||
|
url,
|
||
|
stdout=asyncio.subprocess.PIPE,
|
||
|
stderr=asyncio.subprocess.PIPE,
|
||
|
text=True
|
||
|
)
|
||
|
stdout, stderr = await process.communicate()
|
||
|
|
||
|
paginator = commands.Paginator(prefix="```", suffix="```")
|
||
|
for line in stdout:
|
||
|
if stderr:
|
||
|
paginator.add_line(f"[OUT] {line}"[:2000])
|
||
|
else:
|
||
|
paginator.add_line(line[:2000])
|
||
|
|
||
|
for line in stderr:
|
||
|
paginator.add_line(f"[ERR] {line}"[:2000])
|
||
|
|
||
|
for page in paginator.pages:
|
||
|
await ctx.respond(page)
|
||
|
|
||
|
|
||
|
def setup(bot: commands.Bot):
|
||
|
bot.add_cog(FFMeta(bot))
|