import asyncio import functools import aiohttp from discord.ext import commands from tuxbot.core.utils.functions.extra import ContextPlus def upper_first(string: str) -> str: return "".join(string[0].upper() + string[1:]) def typing(func): @functools.wraps(func) async def wrapped(*args, **kwargs): context = ( args[0] if isinstance(args[0], (commands.Context, ContextPlus)) else args[1] ) async with context.typing(): await func(*args, **kwargs) return wrapped async def shorten(ctx: ContextPlus, text: str, length: int) -> dict: output = {"text": text[:length], "link": None} if len(text) > length: output["text"] += "[...]" try: async with ctx.session.post( "https://paste.ramle.be/documents", data=text.encode(), timeout=aiohttp.ClientTimeout(total=2), ) as r: output[ "link" ] = f"https://paste.ramle.be/{(await r.json())['key']}" except (aiohttp.ClientError, asyncio.exceptions.TimeoutError): pass return output