Files
ralf-discord-bot/classes/restfulapi.py
T
Marc Ahlgrim 6e35d9e064 Release 0.3
Signed-off-by: Marc Ahlgrim <marc@onemarcfifty.com>
2022-07-22 12:50:06 +02:00

61 lines
2.2 KiB
Python

import json
import aiohttp
# #########################################################
# The class for Discord API integration
# this can be used if certain functions are not supported
# by discord.py
# #########################################################
class DiscordAPI:
# the init constructor stores the authentication-relevant data
# such as the token and the bot url
# guild ID, Client ID, Token, Bot permissions, API Version
def __init__(self,
discord_token: str,
client_id: str,
bot_permissions: int,
api_version: int) -> None:
self.base_api_url = f'https://discord.com/api/v{api_version}'
self.bot_url = f'https://discord.com/api/oauth2/authorize?client_id={client_id}&permissions={bot_permissions}&scope=bot'
self.auth_headers = {
'Authorization':f'Bot {discord_token}',
'User-Agent':f'DiscordBot ({self.bot_url}) Python/3.9 aiohttp/3.8.1',
'Content-Type':'application/json'
}
# get_api does an https get on the api
# it expects json data as result
async def get_api(self, api_url: str) -> list:
async with aiohttp.ClientSession(headers=self.auth_headers) as session:
try:
async with session.get(api_url) as response:
response.raise_for_status()
assert response.status == 200
response_list = json.loads(await response.read())
except Exception as e:
print(f'get_api EXCEPTION: {e}')
finally:
await session.close()
return response_list
# post_api does an https put to the api url
# it expects json data as var which it posts
async def post_api(self, api_url: str, dumped_jsondata: str) -> None:
async with aiohttp.ClientSession(headers=self.auth_headers) as session:
try:
async with session.post(api_url, data=dumped_jsondata) as response:
response.raise_for_status()
assert response.status == 200
except Exception as e:
print(f'post_api EXCEPTION: {e}')
finally:
await session.close()