0.3.9.3.a3

Added /clear_nick_reviews mod-command: clears out pending nickname reviews from datafile
This commit is contained in:
Franz Rolfsvaag 2025-08-11 00:02:00 +02:00
parent c09f36162d
commit f14e84b89c
2 changed files with 45 additions and 3 deletions

2
bot.py
View File

@ -9,7 +9,7 @@ from modules.common.boot_notice import post_boot_notice
# Version consists of: # Version consists of:
# Major.Enhancement.Minor.Patch.Test (Test is alphanumeric; doesnt trigger auto update) # Major.Enhancement.Minor.Patch.Test (Test is alphanumeric; doesnt trigger auto update)
VERSION = "0.3.9.3.a2" VERSION = "0.3.9.3.a3"
# ---------- Env loading ---------- # ---------- Env loading ----------

View File

@ -8,7 +8,7 @@ import discord
from discord.ext import commands from discord.ext import commands
from discord import app_commands from discord import app_commands
from mod_perms import is_moderator_userid from mod_perms import is_moderator_userid, require_mod_interaction
from modules.common.emoji_accept import is_accept from modules.common.emoji_accept import is_accept
from modules.common.settings import cfg # ENV-first config helper from modules.common.settings import cfg # ENV-first config helper
@ -168,7 +168,7 @@ class NickNudgeCog(commands.Cog):
await self._modlog(guild, f"🔎 Nickname review opened for {member.mention}{method}{_ts_rel(now_ts)}.") await self._modlog(guild, f"🔎 Nickname review opened for {member.mention}{method}{_ts_rel(now_ts)}.")
# ---------- DM nudge loop (unchanged) ---------- # ---------- DM nudge loop ----------
async def _nudge_loop(self): async def _nudge_loop(self):
await self.bot.wait_until_ready() await self.bot.wait_until_ready()
@ -394,6 +394,48 @@ class NickNudgeCog(commands.Cog):
except Exception: except Exception:
pass pass
# ---------- Mod command to clear pending reviews from datafile ----------
@app_commands.command(name="clear_nick_reviews", description="Delete all PENDING nickname review records for this server.")
async def clear_nick_reviews(self, interaction: discord.Interaction):
"""Moderator-only. Clears all 'pending' entries in data_manager['nick_reviews'] for this guild."""
# Must be used in a guild
if not interaction.guild:
return await interaction.response.send_message("Use this in a server.", ephemeral=True)
# Moderator permission check (your existing gate)
if not await require_mod_interaction(interaction):
return # require_mod_interaction already responded
dm = self.bot.data_manager
# Count pending records for this guild
pending = [
r for r in dm.get('nick_reviews')
if r.get('guild_id') == interaction.guild.id and r.get('status') == 'pending'
]
count = len(pending)
# Remove pending records
if count:
dm.remove(
'nick_reviews',
lambda r: r.get('guild_id') == interaction.guild.id and r.get('status') == 'pending'
)
# Modlog + ephemeral confirmation
try:
await self._modlog(
interaction.guild,
f"🧹 {interaction.user.mention} cleared **{count}** pending nickname review(s)."
)
except Exception:
pass
await interaction.response.send_message(
f"Cleared **{count}** pending nickname review{'s' if count != 1 else ''}.",
ephemeral=True
)
async def setup(bot): async def setup(bot):
await bot.add_cog(NickNudgeCog(bot)) await bot.add_cog(NickNudgeCog(bot))