aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Numerlor <[email protected]>2020-05-05 02:19:03 +0200
committerGravatar Numerlor <[email protected]>2020-05-05 02:19:03 +0200
commitf0795ea53247501cc38615f57aabe21685de7251 (patch)
treea1a8c58d46d1345ab298fbc34fdf18c8865bf1ad
parentMerge pull request #922 from python-discord/bug/info/914/user-animated-avatar (diff)
Create utility function for uploading to paste service.
-rw-r--r--bot/utils/__init__.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/bot/utils/__init__.py b/bot/utils/__init__.py
index 9b32e515d..0f39a1bc8 100644
--- a/bot/utils/__init__.py
+++ b/bot/utils/__init__.py
@@ -1,9 +1,42 @@
+import logging
from abc import ABCMeta
+from typing import Optional
+from aiohttp import ClientConnectorError, ClientSession
from discord.ext.commands import CogMeta
+from bot.constants import URLs
+
+log = logging.getLogger(__name__)
+
class CogABCMeta(CogMeta, ABCMeta):
"""Metaclass for ABCs meant to be implemented as Cogs."""
pass
+
+
+async def send_to_paste_service(http_session: ClientSession, contents: str, *, extension: str = "") -> Optional[str]:
+ """
+ Upload `contents` to the paste service.
+
+ `http_session` should be the current running ClientSession from aiohttp
+ `extension` is added to the output URL
+
+ When an error occurs, `None` is returned, otherwise the generated URL with the suffix.
+ """
+ extension = extension and f".{extension}"
+ log.debug(f"Sending contents of size {len(contents.encode())} bytes to paste service.")
+ paste_url = URLs.paste_service.format(key="documents")
+ try:
+ async with http_session.post(paste_url, data=contents) as response:
+ response_json = await response.json()
+ except ClientConnectorError:
+ log.warning(f"Failed to connect to paste service at url {paste_url}.")
+ return
+ if "message" in response_json:
+ log.warning(f"Paste service returned error {response_json['message']} with status code {response.status}.")
+ return
+ elif "key" in response_json:
+ log.trace(f"Successfully uploaded contents to paste service behind key {response_json['key']}.")
+ return URLs.paste_service.format(key=response_json['key']) + extension