A command that fetches a random joke from the Official Jokes API from Appspot and hides the punchline using Discord’s spoiler protection.

Usage

!joke

Example response

What do you get when you cross a snowman with a vampire? ||He let out a little wine.||

The text in between || is hidden until you click it.

Source code

import requests
from data import error_messages
 
def access_api(url, parameter, error_message, headers=None):
    if headers:
        raw = requests.get(url, headers=headers)
    else:
        raw = requests.get(url)
    if raw.status_code == 200:
        try:
            data = raw.json()
            response = data[parameter]
        except (requests.exceptions.JSONDecodeError, KeyError):
            response = str(f"{error_message}")
        except Exception as e:
            response = str(f"{error_message} (Error {str(e)})")
    else:
        response = str(f"{error_message} (HTTP {raw.status_code})")
 
    return response
 
def joke():
    setup = access_api(
        "https://official-joke-api.appspot.com/jokes/random",
        "setup",
        error_messages["joke"],
    )
    punchline = access_api(
        "https://official-joke-api.appspot.com/jokes/random",
        "punchline",
        error_messages["joke"],
    )
    response = f"{setup} ||{punchline}||"
    return response