From 2f53aa88633ff6b49c658529490b283f4aae1cc2 Mon Sep 17 00:00:00 2001 From: Joinemm Date: Wed, 13 Dec 2023 22:09:50 +0200 Subject: [PATCH] Add OAuth to reddit api --- modules/media_embedders.py | 28 +++++++++++++++++++++++++--- modules/misobot.py | 1 + 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/modules/media_embedders.py b/modules/media_embedders.py index d16216f..b582c37 100644 --- a/modules/media_embedders.py +++ b/modules/media_embedders.py @@ -11,7 +11,7 @@ import discord import regex import yarl -from aiohttp import ClientConnectorError +from aiohttp import BasicAuth, ClientConnectorError from attr import dataclass from discord.ext import commands from discord.ui import View @@ -235,8 +235,30 @@ async def create_message( reddit_post_id: str, options: Options | None = None, ): - api_url = f"https://api.reddit.com/api/info/?id=t3_{reddit_post_id}" - async with self.bot.session.get(api_url) as response: + user_agent = "Miso Bot (by Joinemm)" + token = self.bot.reddit_access_token + now = arrow.utcnow().timestamp() + if token["expiry"] < now: + async with self.bot.session.post( + "https://www.reddit.com/api/v1/access_token", + headers={"User-Agent": user_agent}, + data={"grant_type": "client_credentials"}, + auth=BasicAuth( + self.bot.keychain.REDDIT_CLIENT_ID, + self.bot.keychain.REDDIT_CLIENT_SECRET, + ), + ) as response: + data = await response.json() + self.bot.reddit_access_token = { + "expiry": now + data["expires_in"], + "token": data["access_token"], + } + api_url = f"https://oauth.reddit.com/api/info/?id=t3_{reddit_post_id}" + headers = { + "User-Agent": user_agent, + "Authorization": f"Bearer {self.bot.reddit_access_token['token']}", + } + async with self.bot.session.get(api_url, headers=headers) as response: data = await response.json() post = data["data"]["children"][0]["data"] diff --git a/modules/misobot.py b/modules/misobot.py index b57dad8..1eacdb8 100644 --- a/modules/misobot.py +++ b/modules/misobot.py @@ -103,6 +103,7 @@ def __init__( self.datalama = Datalama(self) self.boot_up_time: float | None = None self.session: aiohttp.ClientSession + self.reddit_access_token = {"expiry": 0, "token": None} self.register_hooks() async def get_context(self, message: discord.Message):