feat(bible): implemented API.bible's FUMS system
This commit is contained in:
parent
220e8da790
commit
d24d8f9603
1 changed files with 88 additions and 14 deletions
102
bible/bible.py
102
bible/bible.py
|
@ -48,7 +48,11 @@ class Bible(commands.Cog):
|
||||||
raise ValueError(error(f"Book {book_name} not found."))
|
raise ValueError(error(f"Book {book_name} not found."))
|
||||||
|
|
||||||
async def _get_passage(
|
async def _get_passage(
|
||||||
self, bible_id: str, passage_id: str, include_verse_numbers: bool
|
self,
|
||||||
|
ctx: commands.Context,
|
||||||
|
bible_id: str,
|
||||||
|
passage_id: str,
|
||||||
|
include_verse_numbers: bool,
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""Get a Bible passage from the API.bible API."""
|
"""Get a Bible passage from the API.bible API."""
|
||||||
url = f"https://api.scripture.api.bible/v1/bibles/{bible_id}/passages/{passage_id}"
|
url = f"https://api.scripture.api.bible/v1/bibles/{bible_id}/passages/{passage_id}"
|
||||||
|
@ -78,9 +82,25 @@ class Bible(commands.Cog):
|
||||||
raise bible.errors.NotFound()
|
raise bible.errors.NotFound()
|
||||||
if response.status == 503:
|
if response.status == 503:
|
||||||
raise bible.errors.ServiceUnavailable()
|
raise bible.errors.ServiceUnavailable()
|
||||||
return data["data"]
|
|
||||||
|
|
||||||
async def _get_books(self, bible_id: str) -> dict:
|
fums_url = "https://fums.api.bible/f3"
|
||||||
|
fums_params = {
|
||||||
|
"t": data["meta"]["fumsToken"],
|
||||||
|
"dId": "discord-" + str(self.bot.user.id),
|
||||||
|
"sId": "discord-" + str(ctx.message.created_at.timestamp()),
|
||||||
|
"uId": ctx.author.id,
|
||||||
|
}
|
||||||
|
|
||||||
|
async with self.session.get(fums_url, params=fums_params) as response:
|
||||||
|
fums_data = await response.json()
|
||||||
|
self.logger.debug(
|
||||||
|
"_get_passage FUMS executed with a response code of: %s\n%s",
|
||||||
|
response.status,
|
||||||
|
json.dumps(fums_data),
|
||||||
|
)
|
||||||
|
return data["data"]
|
||||||
|
|
||||||
|
async def _get_books(self, ctx: commands.Context, bible_id: str) -> dict:
|
||||||
"""Get the books of the Bible from the API.bible API."""
|
"""Get the books of the Bible from the API.bible API."""
|
||||||
url = f"https://api.scripture.api.bible/v1/bibles/{bible_id}/books"
|
url = f"https://api.scripture.api.bible/v1/bibles/{bible_id}/books"
|
||||||
headers = await self.bot.get_shared_api_tokens("api.bible")
|
headers = await self.bot.get_shared_api_tokens("api.bible")
|
||||||
|
@ -98,9 +118,27 @@ class Bible(commands.Cog):
|
||||||
raise bible.errors.BibleAccessError()
|
raise bible.errors.BibleAccessError()
|
||||||
if response.status == 503:
|
if response.status == 503:
|
||||||
raise bible.errors.ServiceUnavailable()
|
raise bible.errors.ServiceUnavailable()
|
||||||
return data["data"]
|
|
||||||
|
|
||||||
async def _get_chapters(self, bible_id: str, book_id: str) -> dict:
|
fums_url = "https://fums.api.bible/f3"
|
||||||
|
fums_params = {
|
||||||
|
"t": data["meta"]["fumsToken"],
|
||||||
|
"dId": "discord-" + str(self.bot.user.id),
|
||||||
|
"sId": "discord-" + str(ctx.message.created_at.timestamp()),
|
||||||
|
"uId": ctx.author.id,
|
||||||
|
}
|
||||||
|
|
||||||
|
async with self.session.get(fums_url, params=fums_params) as response:
|
||||||
|
fums_data = await response.json()
|
||||||
|
self.logger.debug(
|
||||||
|
"_get_books FUMS executed with a response code of: %s\n%s",
|
||||||
|
response.status,
|
||||||
|
json.dumps(fums_data),
|
||||||
|
)
|
||||||
|
return data["data"]
|
||||||
|
|
||||||
|
async def _get_chapters(
|
||||||
|
self, ctx: commands.Context, bible_id: str, book_id: str
|
||||||
|
) -> dict:
|
||||||
"""Get the chapters of a book from the API.bible API."""
|
"""Get the chapters of a book from the API.bible API."""
|
||||||
url = f"https://api.scripture.api.bible/v1/bibles/{bible_id}/books/{book_id}/chapters"
|
url = f"https://api.scripture.api.bible/v1/bibles/{bible_id}/books/{book_id}/chapters"
|
||||||
headers = await self.bot.get_shared_api_tokens("api.bible")
|
headers = await self.bot.get_shared_api_tokens("api.bible")
|
||||||
|
@ -118,9 +156,27 @@ class Bible(commands.Cog):
|
||||||
raise bible.errors.BibleAccessError()
|
raise bible.errors.BibleAccessError()
|
||||||
if response.status == 503:
|
if response.status == 503:
|
||||||
raise bible.errors.ServiceUnavailable()
|
raise bible.errors.ServiceUnavailable()
|
||||||
return data["data"]
|
|
||||||
|
|
||||||
async def _get_verses(self, bible_id: str, book_id: str, chapter: int) -> dict:
|
fums_url = "https://fums.api.bible/f3"
|
||||||
|
fums_params = {
|
||||||
|
"t": data["meta"]["fumsToken"],
|
||||||
|
"dId": "discord-" + str(self.bot.user.id),
|
||||||
|
"sId": "discord-" + str(ctx.message.created_at.timestamp()),
|
||||||
|
"uId": ctx.author.id,
|
||||||
|
}
|
||||||
|
|
||||||
|
async with self.session.get(fums_url, params=fums_params) as response:
|
||||||
|
fums_data = await response.json()
|
||||||
|
self.logger.debug(
|
||||||
|
"_get_chapters FUMS executed with a response code of: %s\n%s",
|
||||||
|
response.status,
|
||||||
|
json.dumps(fums_data),
|
||||||
|
)
|
||||||
|
return data["data"]
|
||||||
|
|
||||||
|
async def _get_verses(
|
||||||
|
self, ctx: commands.Context, bible_id: str, book_id: str, chapter: int
|
||||||
|
) -> dict:
|
||||||
"""Get the verses of a chapter from the API.bible API."""
|
"""Get the verses of a chapter from the API.bible API."""
|
||||||
url = f"https://api.scripture.api.bible/v1/bibles/{bible_id}/chapters/{book_id}.{chapter}/verses"
|
url = f"https://api.scripture.api.bible/v1/bibles/{bible_id}/chapters/{book_id}.{chapter}/verses"
|
||||||
headers = await self.bot.get_shared_api_tokens("api.bible")
|
headers = await self.bot.get_shared_api_tokens("api.bible")
|
||||||
|
@ -138,7 +194,23 @@ class Bible(commands.Cog):
|
||||||
raise bible.errors.BibleAccessError()
|
raise bible.errors.BibleAccessError()
|
||||||
if response.status == 503:
|
if response.status == 503:
|
||||||
raise bible.errors.ServiceUnavailable()
|
raise bible.errors.ServiceUnavailable()
|
||||||
return data["data"]
|
|
||||||
|
fums_url = "https://fums.api.bible/f3"
|
||||||
|
fums_params = {
|
||||||
|
"t": data["meta"]["fumsToken"],
|
||||||
|
"dId": "discord-" + str(self.bot.user.id),
|
||||||
|
"sId": "discord-" + str(ctx.message.created_at.timestamp()),
|
||||||
|
"uId": ctx.author.id,
|
||||||
|
}
|
||||||
|
|
||||||
|
async with self.session.get(fums_url, params=fums_params) as response:
|
||||||
|
fums_data = await response.json()
|
||||||
|
self.logger.debug(
|
||||||
|
"_get_verses FUMS executed with a response code of: %s\n%s",
|
||||||
|
response.status,
|
||||||
|
json.dumps(fums_data),
|
||||||
|
)
|
||||||
|
return data["data"]
|
||||||
|
|
||||||
@commands.group(autohelp=True)
|
@commands.group(autohelp=True)
|
||||||
async def bible(self, ctx: commands.Context):
|
async def bible(self, ctx: commands.Context):
|
||||||
|
@ -165,11 +237,11 @@ class Bible(commands.Cog):
|
||||||
if "." not in to_verse:
|
if "." not in to_verse:
|
||||||
to_verse = f"{from_verse.split('.')[0]}.{to_verse}"
|
to_verse = f"{from_verse.split('.')[0]}.{to_verse}"
|
||||||
passage = await self._get_passage(
|
passage = await self._get_passage(
|
||||||
bible_id, f"{book_id}.{from_verse}-{book_id}.{to_verse}", True
|
ctx, bible_id, f"{book_id}.{from_verse}-{book_id}.{to_verse}", True
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
passage = await self._get_passage(
|
passage = await self._get_passage(
|
||||||
bible_id, f"{book_id}.{passage.replace(':', '.')}", False
|
ctx, bible_id, f"{book_id}.{passage.replace(':', '.')}", False
|
||||||
)
|
)
|
||||||
except (
|
except (
|
||||||
bible.errors.BibleAccessError,
|
bible.errors.BibleAccessError,
|
||||||
|
@ -201,16 +273,18 @@ class Bible(commands.Cog):
|
||||||
bible_id = await self.config.bible()
|
bible_id = await self.config.bible()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
books = await self._get_books(bible_id)
|
books = await self._get_books(ctx, bible_id)
|
||||||
book = random.choice(books)
|
book = random.choice(books)
|
||||||
|
|
||||||
chapters = await self._get_chapters(bible_id, book["id"])
|
chapters = await self._get_chapters(ctx, bible_id, book["id"])
|
||||||
chapter = random.choice(chapters)
|
chapter = random.choice(chapters)
|
||||||
|
|
||||||
verses = await self._get_verses(bible_id, book["id"], chapter["number"])
|
verses = await self._get_verses(
|
||||||
|
ctx, bible_id, book["id"], chapter["number"]
|
||||||
|
)
|
||||||
verse = random.choice(verses)["id"]
|
verse = random.choice(verses)["id"]
|
||||||
|
|
||||||
passage = await self._get_passage(bible_id, verse, False)
|
passage = await self._get_passage(ctx, bible_id, verse, False)
|
||||||
except (
|
except (
|
||||||
bible.errors.BibleAccessError,
|
bible.errors.BibleAccessError,
|
||||||
bible.errors.NotFound,
|
bible.errors.NotFound,
|
||||||
|
|
Loading…
Reference in a new issue