ソースを参照

/reset et /skip réservés aux administrateurs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Johnounet 3 日 前
親
コミット
83018daeba
6 ファイル変更、20 行追加、12 行削除
  1. 1 1
      README.md
  2. 1 1
      bot/__init__.py
  3. 1 1
      bot/claude_client.py
  4. 6 8
      bot/discord_bot.py
  5. 1 1
      bot/presence.py
  6. 10 0
      changelog.txt

+ 1 - 1
README.md

@@ -34,7 +34,7 @@ Seul le nom du fichier reste ensuite en mémoire : le bot se souvient qu'il l'a
 
 ### Modération
 
-- **`/reset`** : efface la mémoire du salon. Réservé aux modérateurs (« Gérer les messages ») et aux administrateurs.
+- **`/reset`** : efface la mémoire du salon. Réservé aux membres qui ont la permission Administrateur.
 - **`/skip`** (avec `PRESENCE=on`) : abandonne le statut Discord en cours et en tire un nouveau tout de suite ; seul celui qui lance la commande voit le nouveau statut. Absent, le bot répond alors aux messages en attente s'il passe en ligne. Sans effet la nuit. Réservé aux mêmes personnes que `/reset`.
 - Le bot ne peut jamais pinger `@everyone`, `@here`, un rôle ou un membre.
 

+ 1 - 1
bot/__init__.py

@@ -1,3 +1,3 @@
 """Chatbot Discord propulsé par Claude."""
 
-VERSION = "5.9"
+VERSION = "5.10"

+ 1 - 1
bot/claude_client.py

@@ -322,7 +322,7 @@ class ClaudeClient:
             if "prompt is too long" in message:
                 logger.error("Requête trop longue pour le modèle : %s", exc)
                 raise ClaudeError("Ce message est trop long pour moi avec la conversation en cours. "
-                                  "Un modérateur peut vider ma mémoire avec /reset.")
+                                  "Un administrateur peut vider ma mémoire avec /reset.")
             if "credit balance" in message:
                 logger.critical("Crédit Anthropic épuisé : %s", exc)
                 raise ClaudeError(CONFIG_ERROR)

+ 6 - 8
bot/discord_bot.py

@@ -775,15 +775,14 @@ class ChatBot(commands.Bot):
 # ------------------------------------------------------------- commandes slash
 
 async def allowed(interaction: discord.Interaction) -> bool:
-    """Commande réservée aux modérateurs et administrateurs : prévient les autres et renvoie False."""
+    """Commande réservée aux administrateurs : prévient les autres et renvoie False."""
     # Vérification côté bot, au cas où un admin aurait ouvert la commande à tous dans les paramètres du serveur.
-    perms = interaction.permissions
-    if perms.manage_messages or perms.administrator:
+    if interaction.permissions.administrator:
         return True
     logger.info("Tentative de /%s refusée pour %s dans le salon %s",
                 interaction.command.name if interaction.command else "?", interaction.user, interaction.channel_id)
     await interaction.response.send_message(
-        "Seuls les modérateurs et administrateurs du serveur peuvent utiliser cette commande.",
+        "Seuls les administrateurs du serveur peuvent utiliser cette commande.",
         ephemeral=True,
     )
     return False
@@ -791,9 +790,8 @@ async def allowed(interaction: discord.Interaction) -> bool:
 
 @app_commands.command(name="reset", description="Réinitialise la mémoire du bot dans ce salon")
 @app_commands.guild_only()
-# Masque la commande aux membres sans « Gérer les messages » (modérateurs) ;
-# les administrateurs ont implicitement toutes les permissions.
-@app_commands.default_permissions(manage_messages=True)
+# Masque la commande aux membres qui n'ont pas la permission Administrateur.
+@app_commands.default_permissions(administrator=True)
 async def reset_command(interaction: discord.Interaction) -> None:
     if not await allowed(interaction):
         return
@@ -808,7 +806,7 @@ async def reset_command(interaction: discord.Interaction) -> None:
 
 @app_commands.command(name="skip", description="Passe tout de suite au statut Discord suivant du bot")
 @app_commands.guild_only()
-@app_commands.default_permissions(manage_messages=True)  # comme /reset
+@app_commands.default_permissions(administrator=True)  # comme /reset
 async def skip_command(interaction: discord.Interaction) -> None:
     if not await allowed(interaction):
         return

+ 1 - 1
bot/presence.py

@@ -137,7 +137,7 @@ class Status:
         return None
 
     def label(self) -> str:
-        """Le statut tel qu'il s'affiche sur Discord, pour les modérateurs (/skip)."""
+        """Le statut tel qu'il s'affiche sur Discord, pour les administrateurs (/skip)."""
         reason = f" (« {self.title} »)" if self.title else ""
         if self.kind is Kind.ANIME:
             episode = f"l'épisode {self.episode} de " if self.episode else ""

+ 10 - 0
changelog.txt

@@ -2,6 +2,16 @@ CHANGELOG — Chatbot Discord
 ===========================
 
 
+Version 5.10
+------------
+
+Divers
+- /reset et /skip sont réservés aux membres qui ont la permission
+  Administrateur (avant : aussi aux modérateurs, avec « Gérer les
+  messages »). Les commandes sont renvoyées à Discord au premier
+  démarrage de la 5.10.
+
+
 Version 5.9
 -----------