feat: move user aliases from config to DB with /bcs-alias command
Aliases now stored in UserState table instead of config.yaml. Adds Aliases column (NVARCHAR 500), loads on startup, persists via flush. New /bcs-alias slash command (view/set/clear) for managing nicknames. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -250,6 +250,7 @@ class CommandsCog(commands.Cog):
|
||||
off_topic_count=user_data.off_topic_count,
|
||||
baseline_coherence=user_data.baseline_coherence,
|
||||
user_notes=user_data.notes or None,
|
||||
aliases=",".join(user_data.aliases) if user_data.aliases else None,
|
||||
))
|
||||
status = "now immune" if is_immune else "no longer immune"
|
||||
await interaction.response.send_message(
|
||||
@@ -501,6 +502,7 @@ class CommandsCog(commands.Cog):
|
||||
off_topic_count=user_data.off_topic_count,
|
||||
baseline_coherence=user_data.baseline_coherence,
|
||||
user_notes=user_data.notes or None,
|
||||
aliases=",".join(user_data.aliases) if user_data.aliases else None,
|
||||
))
|
||||
await interaction.response.send_message(
|
||||
f"Note added for {user.display_name}.", ephemeral=True
|
||||
@@ -516,11 +518,86 @@ class CommandsCog(commands.Cog):
|
||||
off_topic_count=user_data.off_topic_count,
|
||||
baseline_coherence=user_data.baseline_coherence,
|
||||
user_notes=None,
|
||||
aliases=",".join(user_data.aliases) if user_data.aliases else None,
|
||||
))
|
||||
await interaction.response.send_message(
|
||||
f"Notes cleared for {user.display_name}.", ephemeral=True
|
||||
)
|
||||
|
||||
@app_commands.command(
|
||||
name="bcs-alias",
|
||||
description="Manage nicknames/aliases for a user. (Admin only)",
|
||||
)
|
||||
@app_commands.default_permissions(administrator=True)
|
||||
@app_commands.describe(
|
||||
action="What to do with aliases",
|
||||
user="The user whose aliases to manage",
|
||||
text="Comma-separated aliases (only used with 'set')",
|
||||
)
|
||||
@app_commands.choices(action=[
|
||||
app_commands.Choice(name="view", value="view"),
|
||||
app_commands.Choice(name="set", value="set"),
|
||||
app_commands.Choice(name="clear", value="clear"),
|
||||
])
|
||||
async def bcs_alias(
|
||||
self,
|
||||
interaction: discord.Interaction,
|
||||
action: app_commands.Choice[str],
|
||||
user: discord.Member,
|
||||
text: str | None = None,
|
||||
):
|
||||
if not self._is_admin(interaction):
|
||||
await interaction.response.send_message("Admin only.", ephemeral=True)
|
||||
return
|
||||
|
||||
if action.value == "view":
|
||||
aliases = self.bot.drama_tracker.get_user_aliases(user.id)
|
||||
desc = ", ".join(aliases) if aliases else "_No aliases set._"
|
||||
embed = discord.Embed(
|
||||
title=f"Aliases: {user.display_name}",
|
||||
description=desc,
|
||||
color=discord.Color.blue(),
|
||||
)
|
||||
await interaction.response.send_message(embed=embed, ephemeral=True)
|
||||
|
||||
elif action.value == "set":
|
||||
if not text:
|
||||
await interaction.response.send_message(
|
||||
"Provide `text` with comma-separated aliases (e.g. `Glam, G`).", ephemeral=True
|
||||
)
|
||||
return
|
||||
aliases = [a.strip() for a in text.split(",") if a.strip()]
|
||||
self.bot.drama_tracker.set_user_aliases(user.id, aliases)
|
||||
user_data = self.bot.drama_tracker.get_user(user.id)
|
||||
asyncio.create_task(self.bot.db.save_user_state(
|
||||
user_id=user.id,
|
||||
offense_count=user_data.offense_count,
|
||||
immune=user_data.immune,
|
||||
off_topic_count=user_data.off_topic_count,
|
||||
baseline_coherence=user_data.baseline_coherence,
|
||||
user_notes=user_data.notes or None,
|
||||
aliases=",".join(aliases),
|
||||
))
|
||||
await interaction.response.send_message(
|
||||
f"Aliases for {user.display_name} set to: {', '.join(aliases)}", ephemeral=True
|
||||
)
|
||||
|
||||
elif action.value == "clear":
|
||||
self.bot.drama_tracker.set_user_aliases(user.id, [])
|
||||
user_data = self.bot.drama_tracker.get_user(user.id)
|
||||
asyncio.create_task(self.bot.db.save_user_state(
|
||||
user_id=user.id,
|
||||
offense_count=user_data.offense_count,
|
||||
immune=user_data.immune,
|
||||
off_topic_count=user_data.off_topic_count,
|
||||
baseline_coherence=user_data.baseline_coherence,
|
||||
user_notes=user_data.notes or None,
|
||||
aliases=None,
|
||||
))
|
||||
await interaction.response.send_message(
|
||||
f"Aliases cleared for {user.display_name}.", ephemeral=True
|
||||
)
|
||||
|
||||
@app_commands.command(
|
||||
name="bcs-mode",
|
||||
description="Switch the bot's personality mode.",
|
||||
|
||||
Reference in New Issue
Block a user