1
Fork 0
mirror of https://github.com/allthingslinux/tux.git synced 2024-10-03 00:53:12 +00:00

Add xkcd links as buttons and replace author with the title description

This commit is contained in:
wlinator 2024-06-21 20:59:15 +02:00
parent 9fe3ebe9a2
commit b0a888da65

View file

@ -16,22 +16,22 @@ class Xkcd(commands.Cog):
@xkcd.command(name="latest", description="Get the latest xkcd comic")
async def latest(self, interaction: discord.Interaction) -> None:
embed, ephemeral = await self.get_comic_and_embed(latest=True)
await interaction.response.send_message(embed=embed, ephemeral=ephemeral)
embed, view, ephemeral = await self.get_comic_and_embed(latest=True)
await interaction.response.send_message(embed=embed, view=view, ephemeral=ephemeral)
@xkcd.command(name="random", description="Get a random xkcd comic")
async def random(self, interaction: discord.Interaction) -> None:
embed, ephemeral = await self.get_comic_and_embed()
await interaction.response.send_message(embed=embed, ephemeral=ephemeral)
embed, view, ephemeral = await self.get_comic_and_embed()
await interaction.response.send_message(embed=embed, view=view, ephemeral=ephemeral)
@xkcd.command(name="specific", description="Search for a specific xkcd comic")
async def specific(self, interaction: discord.Interaction, comic_id: int) -> None:
embed, ephemeral = await self.get_comic_and_embed(number=comic_id)
await interaction.response.send_message(embed=embed, ephemeral=ephemeral)
embed, view, ephemeral = await self.get_comic_and_embed(number=comic_id)
await interaction.response.send_message(embed=embed, view=view, ephemeral=ephemeral)
async def get_comic_and_embed(
self, latest: bool = False, number: int | None = None
) -> tuple[discord.Embed, bool]:
) -> tuple[discord.Embed, discord.ui.View | None, bool]:
"""
Get the xkcd comic and create an embed.
"""
@ -43,16 +43,12 @@ class Xkcd(commands.Cog):
else:
comic = self.client.get_random_comic(raw_comic_image=True)
description = f"[Explainxkcd]({comic.explanation_url}) | [Webpage]({comic.comic_url})"
if comic.description:
description += f"\n\n> {comic.description}"
embed = EmbedCreator.create_success_embed(
title=f"xkcd {comic.id} - {comic.title}",
description=description,
title="",
description=f"\n\n> {comic.description}" if comic.description else None,
)
embed.set_author(name=f"xkcd {comic.id} - {comic.title}")
embed.set_image(url=comic.image_url)
ephemeral = False
@ -63,7 +59,7 @@ class Xkcd(commands.Cog):
description="I couldn't find the xkcd comic. Please try again later.",
)
ephemeral = True
return embed, ephemeral
return embed, None, ephemeral
except Exception as e:
logger.error(f"Error getting xkcd comic: {e}")
@ -72,10 +68,29 @@ class Xkcd(commands.Cog):
description="An error occurred while fetching the xkcd comic",
)
ephemeral = True
return embed, ephemeral
return embed, None, ephemeral
else:
return embed, ephemeral
return embed, LinkButton(comic.explanation_url, comic.comic_url), ephemeral
class LinkButton(discord.ui.View):
def __init__(self, explain_url: str, webpage_url: str) -> None:
super().__init__()
self.add_item(
discord.ui.Button(
style=discord.ButtonStyle.link,
label="Explainxkcd",
url=explain_url,
)
)
self.add_item(
discord.ui.Button(
style=discord.ButtonStyle.link,
label="Webpage",
url=webpage_url,
)
)
async def setup(bot: commands.Bot) -> None: