Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 24 additions & 22 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,46 +48,46 @@ async def xkcd_comic(interaction: discord.Interaction, n: int):
return

await interaction.response.defer()

url = f"https://xkcd.com/{n}/info.0.json"
try:
req = urllib.request.Request(url, headers={"User-Agent": "DiscordBot/1.0"})
with urllib.request.urlopen(req) as response:
data = json.loads(response.read().decode())

title = data.get("title", "Unknown Title")
img_url = data.get("img", "")
alt_text = data.get("alt", "No alt text available.")

output = (
f"*** XKCD Comic #{n}: {title} ***\n"
f"Alt Text: {alt_text}\n"
f"{img_url}"
)
await interaction.followup.send(output)

except urllib.error.HTTPError as e:
if e.code == 404:
await interaction.followup.send(f"Comic #{n} could not be found.")
else:
await interaction.followup.send(f"Failed to fetch comic data (HTTP Status {e.code}).")
except Exception as e:
await interaction.followup.send(f"An unexpected internal error occurred: {e}")

def get_pypi_package_details(package_name):
url = f"https://pypi.org/pypi/{package_name}/json"

try:
response = requests.get(url)

if response.status_code == 404:
return f"Error: Package '{package_name}' not found on PyPI."

response.raise_for_status()
data = response.json()

info = data.get("info", {})

return (
info.get("name"),
info.get("version"),
Expand All @@ -99,10 +99,10 @@ def get_pypi_package_details(package_name):
info.get("requires_dist") or [],
list(data.get("releases", {}).keys())
)

except requests.exceptions.RequestException as e:
return f"An error occurred while connecting to PyPI: {e}"

@bot.tree.command(name="pypi", description="Displays a PyPI package by it's name.")
@app_commands.describe(name="The pypi package name")
async def pypi_package(interaction: discord.Interaction, name: str):
Expand All @@ -111,26 +111,28 @@ async def pypi_package(interaction: discord.Interaction, name: str):
return

await interaction.response.defer()

package_details = get_pypi_package_details(name)

if isinstance(package_details, str):
await interaction.followup.send(package_details)

name, version, summary, author, _license, home_page, project_url, requires_dist, releases = package_details

output = (
f"*** {name} v{version} by {author}***\n"
f"{summary}\n"
f"{len(releases)} total releases\n"
f"{project_url}"
)

await interaction.followup.send(output)

load_dotenv()

BOT_TOKEN = os.getenv("DISCORD_API")
if not BOT_TOKEN:
raise ValueError("The environmental variable DISCORD_API is empty. Please replace it with the bot token.")
bot.run(BOT_TOKEN)
if __name__ == "__main__":
load_dotenv()

BOT_TOKEN = os.getenv("DISCORD_API")
if not BOT_TOKEN:
raise ValueError("The environmental variable DISCORD_API is empty. Please replace it with the bot token.")
bot.run(BOT_TOKEN)