The bible command returns either a random or a specific Bible verse from the Bible API.

Usage

!bible [book] [chapter] [verse]

Running it without arguments returns a random verse. To look up a specific verse, provide the book name, chapter number, and verse number.

Example response

Random

User:

!bible

Bot:

Yahweh, keep me from the hands of the wicked. Preserve me from the violent men who have determined to trip my feet.

Psalms 140:4

Specific verse

User:

!bible Genesis 1 1

Bot:

In the beginning, God created the heavens and the earth.

Genesis 1:1

Source code

def bible(is_random, book_arg="John", chapter_arg=16, verse_arg=32):
    if is_random:
        url = "https://bible-api.com/data/web/random"
    else:
        url = f"https://bible-api.com/{book_arg} {chapter_arg}:{verse_arg}"
 
    bible_response = requests.get(url)
    if bible_response.status_code == 200:
        try:
            data = bible_response.json()
            if "random_verse" in data:
                verse = data["random_verse"]
                response = (
                    choice(output["general"]["bible"])
                    .replace(r"{{PASSAGE}}", verse["text"].strip())
                    .replace(r"{{BOOK}}", verse["book"].strip())
                    .replace(r"{{CHAPTER}}", str(verse["chapter"]).strip())
                    .replace(r"{{VERSE}}", str(verse["verse"]).strip())
                )
            elif "text" in data and "reference" in data:
                parts = data["reference"].split()
                book = parts[0] if parts else book_arg
                ref_parts = data["reference"].split(":")
                chapter_verse = ref_parts[1] if len(ref_parts) > 1 else "1"
                chapter = (
                    chapter_verse.split(":")[0]
                    if ":" in chapter_verse
                    else chapter_verse
                )
                verse_num = chapter_verse.split(":")[1] if ":" in chapter_verse else "1"
                response = (
                    choice(output["general"]["bible"])
                    .replace(r"{{PASSAGE}}", data["text"].strip())
                    .replace(r"{{BOOK}}", book.strip())
                    .replace(r"{{CHAPTER}}", chapter.strip())
                    .replace(r"{{VERSE}}", verse_num.strip())
                )
            else:
                response = error_messages["passage_not_found"].replace(
                    r"{{PASSAGE}}", f"{book_arg} {chapter_arg}:{verse_arg}"
                )
        except (requests.exceptions.JSONDecodeError, KeyError):
            response = error_messages["bible"]
    elif bible_response.status_code == 404:
        response = error_messages["passage_not_found"].replace(
            r"{{PASSAGE}}", f"{book_arg} {chapter_arg}:{verse_arg}"
        )
    else:
        response = f"{error_messages['bible']} (HTTP {bible_response.status_code})"
    return response