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
52 changes: 52 additions & 0 deletions tux/cogs/info/info.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,58 @@ async def member(self, interaction: discord.Interaction, member: discord.Member)

await interaction.response.send_message(embed=embed)

@info.command(name="roles", description="Lists all roles in the server.")
async def roles(self, interaction: discord.Interaction) -> None:
"""
List all roles in the server.

Parameters
----------
interaction : discord.Interaction
The discord interaction object.
"""
if not interaction.guild:
return
Comment on lines +120 to +121
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Improve error handling when there's no associated guild

Instead of silently returning when there's no guild associated with the interaction, consider providing feedback to the user, explaining why the command couldn't be executed.

Suggested change
if not interaction.guild:
return
if not interaction.guild:
await interaction.response.send_message("This command can only be used in a server.", ephemeral=True)
return


guild = interaction.guild
roles = [role.mention for role in guild.roles]

embed = EmbedCreator.create_info_embed(
title="Server Roles",
description=f"Role list for {guild.name}",
interaction=interaction,
)

embed.add_field(name="Roles", value=", ".join(roles), inline=False)

await interaction.response.send_message(embed=embed)
Comment on lines +110 to +134
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Refactor common code between 'roles' and 'emotes' commands

The 'roles' and 'emotes' commands have very similar structures. Consider refactoring the common parts into a separate method to reduce code duplication and improve maintainability.

async def _create_list_embed(self, interaction: discord.Interaction, title: str, items: list, item_name: str) -> None:
    if not interaction.guild:
        return
    embed = EmbedCreator.create_info_embed(
        title=title,
        description=f"{item_name} list for {interaction.guild.name}",
        interaction=interaction,
    )
    embed.add_field(name=item_name, value=", ".join(items), inline=False)
    await interaction.response.send_message(embed=embed)


@info.command(name="emotes", description="Lists all emotes in the server.")
async def emotes(self, interaction: discord.Interaction) -> None:
"""
List all emotes in the server.

Parameters
----------
interaction : discord.Interaction
The discord interaction object.
"""
if not interaction.guild:
return

guild = interaction.guild
emotes = [str(emote) for emote in guild.emojis]

embed = EmbedCreator.create_info_embed(
title="Server Emotes",
description=f"Emote list for {guild.name}",
interaction=interaction,
)

embed.add_field(name="Emotes", value=" ".join(emotes) if emotes else "No emotes available", inline=False)

await interaction.response.send_message(embed=embed)


async def setup(bot: commands.Bot) -> None:
await bot.add_cog(Info(bot))