about summary refs log tree commit diff stats
path: root/discord
diff options
context:
space:
mode:
authorNoah <mounderfod@gmail.com>2022-07-09 13:11:20 +0100
committerNoah <mounderfod@gmail.com>2022-07-09 13:11:20 +0100
commitae8e010b3735761156ac01307bf90520ab3f385d (patch)
tree7082bcf4dff37a84b19b4b2e5d31696b8770a680 /discord
parenta72d0da957af970c1608061d5dcfbf4df3975ffd (diff)
downloaddiscobra-ae8e010b3735761156ac01307bf90520ab3f385d.tar.gz
feat(http): Add basic API for sending HTTP requests
Also added some new stuff to `User` since it has changed since it was last used.
Diffstat (limited to 'discord')
-rw-r--r--discord/user.py4
-rw-r--r--discord/utils/exceptions.py3
-rw-r--r--discord/utils/rest.py60
3 files changed, 67 insertions, 0 deletions
diff --git a/discord/user.py b/discord/user.py
index 16ddf1b..6000b31 100644
--- a/discord/user.py
+++ b/discord/user.py
@@ -4,11 +4,15 @@ class User:
         "username",
         "discriminator",
         "avatar",
+        "avatar_decoration"
         "bot",
         "system",
         "mfa_enabled",
         "banner",
+        "banner_color",
         "accent_color",
+        "bio",
+        "pronouns",
         "locale",
         "verified",
         "email",
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'])