From 75a1524f0e8bc0dfd0b265e59cc7dc60ce835db4 Mon Sep 17 00:00:00 2001 From: Leander Furumo Date: Tue, 3 Nov 2026 01:56:37 +0100 Subject: [PATCH] describe slash command parameters and use english names in code Co-Authored-By: Claude Opus 5.5 --- bot/src/cogs/info.py | 174 +++++++++++++++++++++------------------ bot/src/cogs/viteboka.py | 16 ++-- 2 files changed, 101 insertions(+), 89 deletions(-) diff --git a/bot/src/cogs/info.py b/bot/src/cogs/info.py index 6b27b2b..b4b24b9 100644 --- a/bot/src/cogs/info.py +++ b/bot/src/cogs/info.py @@ -359,102 +359,108 @@ class Info(commands.Cog): @app_commands.checks.bot_has_permissions(embed_links=True) @app_commands.checks.cooldown(1, 2) @guild_group.command(name="rolle", description="Hent informasjon om en rolle på serveren") - async def guild_role(self, interaction: discord.Interaction, rolle: discord.Role): + @app_commands.rename(role="rolle") + @app_commands.describe(role="Rollen du vil se informasjon om") + async def guild_role(self, interaction: discord.Interaction, role: discord.Role): """ Get information about a role Parameters ---------- interaction (discord.Interaction): Slash command context object - rolle (discord.Role): Role to fetch information about + role (discord.Role): Role to fetch information about """ - if rolle.is_default(): + if role.is_default(): embed = embed_templates.error_warning("Skriv inn en annen rolle enn `@everyone`") return await interaction.response.send_message(embed=embed) # Timestamp and days since creation - created_at_timestamp = discord.utils.format_dt(rolle.created_at, style="F") - since_created_days = (interaction.created_at - rolle.created_at).days + created_at_timestamp = discord.utils.format_dt(role.created_at, style="F") + since_created_days = (interaction.created_at - role.created_at).days # List of members with the role - members = self.construct_member_string(rolle.members) + members = self.construct_member_string(role.members) members = members if len(members) < 1024 else "For mange medlemmer for å vise her" # List of permissions - permissions = ", ".join([permission for permission, value in iter(rolle.permissions) if value is True]) + permissions = ", ".join([permission for permission, value in iter(role.permissions) if value is True]) - embed = discord.Embed(title=rolle.name, description=f"{rolle.mention}\n**ID:** {rolle.id}", color=rolle.color) - embed.set_author(name=rolle.guild.name, icon_url=rolle.guild.icon) - embed.add_field(name="Fargekode", value=str(rolle.color)) + embed = discord.Embed(title=role.name, description=f"{role.mention}\n**ID:** {role.id}", color=role.color) + embed.set_author(name=role.guild.name, icon_url=role.guild.icon) + embed.add_field(name="Fargekode", value=str(role.color)) embed.add_field( name="Opprettet", value=f"{created_at_timestamp}\n{since_created_days} " + f'{"dager" if since_created_days != 1 else "dag"} siden', ) - embed.add_field(name="Posisjon", value=rolle.position) - embed.add_field(name="Nevnbar", value="Ja" if rolle.mentionable else "Nei") - embed.add_field(name="Vises separat i medlemsliste", value="Ja" if rolle.hoist else "Nei") + embed.add_field(name="Posisjon", value=role.position) + embed.add_field(name="Nevnbar", value="Ja" if role.mentionable else "Nei") + embed.add_field(name="Vises separat i medlemsliste", value="Ja" if role.hoist else "Nei") if permissions: embed.add_field(name="Tillatelser", value=permissions, inline=False) - embed.add_field(name=f"Brukere med rollen ({len(rolle.members)})", value=members, inline=False) + embed.add_field(name=f"Brukere med rollen ({len(role.members)})", value=members, inline=False) await interaction.response.send_message(embed=embed) @app_commands.checks.bot_has_permissions(embed_links=True) @app_commands.checks.cooldown(1, 2) @guild_group.command(name="tekstkanal", description="Hent informasjon om en tekstkanal") - async def guild_text_channel(self, interaction: discord.Interaction, kanal: discord.TextChannel): + @app_commands.rename(channel="kanal") + @app_commands.describe(channel="Tekstkanalen du vil se informasjon om") + async def guild_text_channel(self, interaction: discord.Interaction, channel: discord.TextChannel): """ Get information about a text channel Parameters ---------- interaction (discord.Interaction): Slash command context object - kanal (discord.TextChannel): Text channel to fetch information about + channel (discord.TextChannel): Text channel to fetch information about """ - members = self.construct_member_string(kanal.members) + members = self.construct_member_string(channel.members) if len(members) > 1024: members = "For mange for å vise her" embed = discord.Embed( - color=interaction.guild.me.color, title=kanal.name, description=f"{kanal.mention}\nID: {kanal.id}" + color=interaction.guild.me.color, title=channel.name, description=f"{channel.mention}\nID: {channel.id}" ) - embed.set_author(name=kanal.guild.name, icon_url=kanal.guild.icon) - embed.add_field(name="Beskrivelse", value=kanal.topic if kanal.topic else "**Ingen**", inline=False) - embed.add_field(name="Opprettet", value=discord.utils.format_dt(kanal.created_at, style="F")) - embed.add_field(name="NSFW", value="Ja" if kanal.is_nsfw() else "Nei") + embed.set_author(name=channel.guild.name, icon_url=channel.guild.icon) + embed.add_field(name="Beskrivelse", value=channel.topic if channel.topic else "**Ingen**", inline=False) + embed.add_field(name="Opprettet", value=discord.utils.format_dt(channel.created_at, style="F")) + embed.add_field(name="NSFW", value="Ja" if channel.is_nsfw() else "Nei") embed.add_field( - name="Saktemodus", value=f"Ja ({kanal.slowmode_delay} sekunder)" if kanal.slowmode_delay else "Nei" + name="Saktemodus", value=f"Ja ({channel.slowmode_delay} sekunder)" if channel.slowmode_delay else "Nei" ) - if kanal.category: - embed.add_field(name="Kategori", value=kanal.category.name) - embed.add_field(name=f"Antall med tilgang ({len(kanal.members)})", value=members) + if channel.category: + embed.add_field(name="Kategori", value=channel.category.name) + embed.add_field(name=f"Antall med tilgang ({len(channel.members)})", value=members) await interaction.response.send_message(embed=embed) @app_commands.checks.bot_has_permissions(embed_links=True) @app_commands.checks.cooldown(1, 2) @guild_group.command(name="talekanal", description="Hent informasjon om en talekanal") - async def guild_voice_channel(self, interaction: discord.Interaction, kanal: discord.VoiceChannel): + @app_commands.rename(channel="kanal") + @app_commands.describe(channel="Talekanalen du vil se informasjon om") + async def guild_voice_channel(self, interaction: discord.Interaction, channel: discord.VoiceChannel): """ Get information about a voice channel Parameters ---------- interaction (discord.Interaction): Slash command context object - kanal (discord.VoiceChannel): Voice channel to fetch information about + channel (discord.VoiceChannel): Voice channel to fetch information about """ - embed = discord.Embed(color=interaction.guild.me.color, title=kanal.name, description=f"ID: {kanal.id}") - embed.set_author(name=kanal.guild.name, icon_url=kanal.guild.icon) - embed.add_field(name="Opprettet", value=discord.utils.format_dt(kanal.created_at, style="F")) - embed.add_field(name="Bitrate", value=f"{int(kanal.bitrate / 1000)}kbps") + embed = discord.Embed(color=interaction.guild.me.color, title=channel.name, description=f"ID: {channel.id}") + embed.set_author(name=channel.guild.name, icon_url=channel.guild.icon) + embed.add_field(name="Opprettet", value=discord.utils.format_dt(channel.created_at, style="F")) + embed.add_field(name="Bitrate", value=f"{int(channel.bitrate / 1000)}kbps") embed.add_field( - name="Maksgrense", value=f"{kanal.user_limit} personer" if kanal.user_limit != 0 else "∞ personer" + name="Maksgrense", value=f"{channel.user_limit} personer" if channel.user_limit != 0 else "∞ personer" ) - if kanal.category: - embed.add_field(name="Kategori", value=kanal.category.name) - embed.add_field(name="Antall koblet til", value=len(kanal.members)) + if channel.category: + embed.add_field(name="Kategori", value=channel.category.name) + embed.add_field(name="Antall koblet til", value=len(channel.members)) await interaction.response.send_message(embed=embed) @app_commands.checks.bot_has_permissions(embed_links=True) @@ -583,49 +589,49 @@ class Info(commands.Cog): @app_commands.checks.bot_has_permissions(embed_links=True, external_emojis=True) @app_commands.checks.cooldown(1, 2) @user_group.command(name="info", description="Hent informasjon om en bruker") - async def user_info(self, interaction: discord.Interaction, *, bruker: discord.Member | None = None): + @app_commands.rename(user="bruker") + @app_commands.describe(user="Brukeren du vil se informasjon om. Standard er deg selv") + async def user_info(self, interaction: discord.Interaction, *, user: discord.Member | None = None): """ Get information about a user Parameters ---------- interaction (discord.Interaction): Slash command context object - bruker (discord.Member, optional): User to get information about. Defaults to None (invoker). + user (discord.Member, optional): User to get information about. Defaults to None (invoker). """ - if not bruker: - bruker = interaction.user + if not user: + user = interaction.user # Get device(s) that is currently used by the user app = "" - if str(bruker.mobile_status) != "offline": + if str(user.mobile_status) != "offline": app += "📱 " - if str(bruker.web_status) != "offline": + if str(user.web_status) != "offline": app += "🌐 " - if str(bruker.desktop_status) != "offline": + if str(user.desktop_status) != "offline": app += "💻" # Get index of join, creation and/or boost date in comparison to other users in the guild - join_index = sorted(interaction.guild.members, key=lambda m: m.joined_at).index(bruker) + 1 - creation_index = sorted(interaction.guild.members, key=lambda m: m.created_at).index(bruker) + 1 - if bruker.premium_since: - premium_index = ( - sorted(interaction.guild.premium_subscribers, key=lambda m: m.premium_since).index(bruker) + 1 - ) + join_index = sorted(interaction.guild.members, key=lambda m: m.joined_at).index(user) + 1 + creation_index = sorted(interaction.guild.members, key=lambda m: m.created_at).index(user) + 1 + if user.premium_since: + premium_index = sorted(interaction.guild.premium_subscribers, key=lambda m: m.premium_since).index(user) + 1 # Creation/join date & days ago - created_timestamp = discord.utils.format_dt(bruker.created_at, style="F") - joined_timestamp = discord.utils.format_dt(bruker.joined_at, style="F") - joined_days = (interaction.created_at - bruker.joined_at).days - created_days = (interaction.created_at - bruker.created_at).days + created_timestamp = discord.utils.format_dt(user.created_at, style="F") + joined_timestamp = discord.utils.format_dt(user.joined_at, style="F") + joined_days = (interaction.created_at - user.joined_at).days + created_days = (interaction.created_at - user.created_at).days # Boost date & days ago - if bruker.premium_since: - premium_since = discord.utils.format_dt(bruker.premium_since, style="F") - premium_since_days = (interaction.created_at - bruker.premium_since).days + if user.premium_since: + premium_since = discord.utils.format_dt(user.premium_since, style="F") + premium_since_days = (interaction.created_at - user.premium_since).days # Get user roles - roles = self.construct_role_string(bruker.roles) + roles = self.construct_role_string(user.roles) roles = ( roles @@ -639,14 +645,14 @@ class Info(commands.Cog): "dnd": f'{self.bot.emoji["dnd"]} Ikke forstyrr', "offline": f'{self.bot.emoji["offline"]} Frakoblet', } - status = statuses[str(bruker.status)] + status = statuses[str(user.status)] - embed = discord.Embed(color=bruker.color, description=f"{bruker.mention}\nID: {bruker.id}\n{status}\n{app}") - if bruker.display_name == bruker.name: - embed.set_author(name=bruker.name, icon_url=bruker.display_avatar) + embed = discord.Embed(color=user.color, description=f"{user.mention}\nID: {user.id}\n{status}\n{app}") + if user.display_name == user.name: + embed.set_author(name=user.name, icon_url=user.display_avatar) else: - embed.set_author(name=f"{bruker.name} | {bruker.display_name}", icon_url=bruker.display_avatar) - embed.set_thumbnail(url=bruker.display_avatar) + embed.set_author(name=f"{user.name} | {user.display_name}", icon_url=user.display_avatar) + embed.set_thumbnail(url=user.display_avatar) embed.add_field( name="Opprettet", value=f"{created_timestamp}\n{created_days} " + f'{"dag" if created_days == 1 else "dager"} siden', @@ -655,7 +661,7 @@ class Info(commands.Cog): name="Ble med i serveren", value=f"{joined_timestamp}\n{joined_days} " + f'{"dag" if joined_days == 1 else "dager"} siden', ) - if bruker.premium_since: + if user.premium_since: embed.add_field( name="Boost", value=f"{premium_since}\n{premium_since_days} " @@ -663,13 +669,13 @@ class Info(commands.Cog): + f"Booster #{premium_index} av serveren", inline=False, ) - embed.add_field(name=f"Roller ({len(bruker.roles)})", value=roles, inline=False) + embed.add_field(name=f"Roller ({len(user.roles)})", value=roles, inline=False) embed.set_footer(text=f"#{join_index} Medlem av serveren | #{creation_index} Eldste brukeren på serveren") # Playing activity - if bruker.activities: + if user.activities: games = "" - for activity in bruker.activities: + for activity in user.activities: games += f"{activity.name}\n" if games: embed.add_field(name="Spiller", value=games, inline=False) @@ -679,20 +685,22 @@ class Info(commands.Cog): @app_commands.checks.bot_has_permissions(embed_links=True) @app_commands.checks.cooldown(1, 2) @user_group.command(name="roller", description="Hent roller til en bruker") - async def user_roles(self, interaction: discord.Interaction, bruker: discord.Member | None = None): + @app_commands.rename(user="bruker") + @app_commands.describe(user="Brukeren du vil se rollene til. Standard er deg selv") + async def user_roles(self, interaction: discord.Interaction, user: discord.Member | None = None): """ Get roles of a user Parameters ---------- interaction (discord.Interaction): Slash command context object - bruker (discord.Member, optional): User to get roles of. Defaults to None (invoker). + user (discord.Member, optional): User to get roles of. Defaults to None (invoker). """ - if not bruker: - bruker = interaction.user + if not user: + user = interaction.user - roles = self.construct_role_string(bruker.roles) + roles = self.construct_role_string(user.roles) # If the list of roles is too long, send it as a file if len(roles) > 2048: @@ -700,30 +708,32 @@ class Info(commands.Cog): interaction, roles, f"{interaction.guild.id}_{interaction.user.id}_roles.txt" ) else: - embed = discord.Embed(color=bruker.color, description=roles) - embed.set_author(name=f"Roller ({len(bruker.roles)})", icon_url=bruker.display_avatar) - embed.set_footer(text=bruker.name, icon_url=bruker.display_avatar) + embed = discord.Embed(color=user.color, description=roles) + embed.set_author(name=f"Roller ({len(user.roles)})", icon_url=user.display_avatar) + embed.set_footer(text=user.name, icon_url=user.display_avatar) await interaction.response.send_message(embed=embed) @app_commands.checks.bot_has_permissions(embed_links=True) @app_commands.checks.cooldown(1, 2) @user_group.command(name="avatar", description="Hent avatar til en bruker") - async def user_avatar(self, interaction: discord.Interaction, bruker: discord.User | discord.Member | None = None): + @app_commands.rename(user="bruker") + @app_commands.describe(user="Brukeren du vil se avataren til. Standard er deg selv") + async def user_avatar(self, interaction: discord.Interaction, user: discord.User | discord.Member | None = None): """ Get avatar of a user Parameters ---------- interaction (discord.Interaction): Slash command context object - bruker (discord.User, optional): User to get avatar of. Defaults to None (invoker). + user (discord.User, optional): User to get avatar of. Defaults to None (invoker). """ - if not bruker: - bruker = interaction.user + if not user: + user = interaction.user - embed = discord.Embed(color=bruker.color, description=f"[Lenke]({bruker.display_avatar})") - embed.set_author(name=bruker.name, icon_url=bruker.display_avatar) - embed.set_image(url=bruker.display_avatar) + embed = discord.Embed(color=user.color, description=f"[Lenke]({user.display_avatar})") + embed.set_author(name=user.name, icon_url=user.display_avatar) + embed.set_image(url=user.display_avatar) await interaction.response.send_message(embed=embed) diff --git a/bot/src/cogs/viteboka.py b/bot/src/cogs/viteboka.py index 1b72f98..b488215 100644 --- a/bot/src/cogs/viteboka.py +++ b/bot/src/cogs/viteboka.py @@ -135,14 +135,16 @@ class Viteboka(commands.Cog): @app_commands.checks.bot_has_permissions(embed_links=True, attach_files=True) @app_commands.checks.cooldown(1, 10) @viteboka_group.command(name="søk", description="Søk etter en artikkel i Viteboka") - async def search(self, interaction: discord.Interaction, søkestreng: str): + @app_commands.rename(query="søkestreng") + @app_commands.describe(query="Det du vil søke etter") + async def search(self, interaction: discord.Interaction, query: str): """ Search for an article in Viteboka Parameters ---------- interaction (discord.Interaction): Slash command context object - søkestreng (str): The search query + query (str): The search query """ await interaction.response.defer() @@ -151,19 +153,19 @@ class Viteboka(commands.Cog): "action": "query", "format": "json", "list": "search", - "srsearch": søkestreng, + "srsearch": query, } try: data = await query_api(self.bot.http_session, params) except VitebokaException as e: - self.bot.logger.error(f"Failed to search for articles with query {søkestreng}: {e}") + self.bot.logger.error(f"Failed to search for articles with query {query}: {e}") embed = embed_templates.error_fatal("Klarte ikke å søke etter artikler") return await interaction.followup.send(embed=embed) search_results = data["query"]["search"] if not search_results: - self.bot.logger.info(f"No articles found with query {søkestreng}") + self.bot.logger.info(f"No articles found with query {query}") embed = embed_templates.error_warning("Fant ingen artikler som matcher søket") return await interaction.followup.send(embed=embed) @@ -182,9 +184,9 @@ class Viteboka(commands.Cog): return await interaction.followup.send(embed=embed, view=view) try: - title, url, text, image = await fetch_article(self.bot.http_session, søkestreng) + title, url, text, image = await fetch_article(self.bot.http_session, query) except VitebokaException as e: - self.bot.logger.error(f"Failed to fetch article {søkestreng}: {e}") + self.bot.logger.error(f"Failed to fetch article {query}: {e}") embed = embed_templates.error_fatal(str(e)) return await interaction.followup.send(embed=embed)