about summary refs log tree commit diff stats
path: root/discord/utils
diff options
context:
space:
mode:
Diffstat (limited to 'discord/utils')
-rw-r--r--discord/utils/exceptions.py3
-rw-r--r--discord/utils/rest.py60
2 files changed, 63 insertions, 0 deletions
diff --git a/discord/utils/exceptions.py b/discord/utils/exceptions.py
new file mode 100644
index 0000000..a7f035c
--- /dev/null
+++ b/discord/utils/exceptions.py
@@ -0,0 +1,3 @@
+class APIException(Exception):
+    """Raised when the Discord API returns an error."""
+
diff --git a/discord/utils/rest.py b/discord/utils/rest.py
new file mode 100644
index 0000000..f7f6ab8
--- /dev/null
+++ b/discord/utils/rest.py
@@ -0,0 +1,60 @@
+import aiohttp
+import asyncio
+
+from discord.utils.exceptions import APIException
+
+
+async def get(token, url):
+    async with aiohttp.ClientSession(headers={
+        "Authorization": f"Bot {token}",
+        "User-Agent": f"DiscordBot (https://github.com/mounderfod/discobra 0.0.1)"
+    }) as session:
+        async with session.get(url='https://discord.com/api/v10' + url) as r:
+            data = await r.json()
+            match r.status:
+                case 200:
+                    return data
+                case other:
+                    raise APIException(data['message'])
+
+
+async def post(token, url, data):
+    async with aiohttp.ClientSession(headers={
+        "Authorization": f"Bot {token}",
+        "User-Agent": f"DiscordBot (https://github.com/mounderfod/discobra 0.0.1)"
+    }) as session:
+        async with session.post(url='https://discord.com/api/v10' + url, data=data) as r:
+            data = await r.json()
+            match r.status:
+                case 200 | 204:
+                    return data
+                case other:
+                    raise APIException(data['message'])
+
+
+async def patch(token, url, data):
+    async with aiohttp.ClientSession(headers={
+        "Authorization": f"Bot {token}",
+        "User-Agent": f"DiscordBot (https://github.com/mounderfod/discobra 0.0.1)"
+    }) as session:
+        async with session.patch(url='https://discord.com/api/v10' + url, data=data) as r:
+            data = await r.json()
+            match r.status:
+                case 200 | 204:
+                    return data
+                case other:
+                    raise APIException(data['message'])
+
+
+async def delete(token, url):
+    async with aiohttp.ClientSession(headers={
+        "Authorization": f"Bot {token}",
+        "User-Agent": f"DiscordBot (https://github.com/mounderfod/discobra 0.0.1)"
+    }) as session:
+        async with session.delete(url='https://discord.com/api/v10' + url) as r:
+            data = await r.json()
+            match r.status:
+                case 200:
+                    return data
+                case other:
+                    raise APIException(data['message'])