Correction des multiples bugs
This commit is contained in:
parent
5fe70d754b
commit
07198c20b7
15 changed files with 707 additions and 348 deletions
|
|
@ -16,16 +16,20 @@ REPORTS_FILE = os.path.join(BASE_DIR, "data", "gitlab_reports.json")
|
|||
def save_report(issue_iid, user_id):
|
||||
os.makedirs(os.path.dirname(REPORTS_FILE), exist_ok=True)
|
||||
try:
|
||||
data = {}
|
||||
if os.path.exists(REPORTS_FILE):
|
||||
with open(REPORTS_FILE, "r") as f:
|
||||
data = json.load(f)
|
||||
else:
|
||||
data = {}
|
||||
try:
|
||||
with open(REPORTS_FILE, "r", encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
except json.JSONDecodeError:
|
||||
kuby_logger.warning("REPORTS_FILE corrupted, re-initializing to avoid tracking loss.")
|
||||
|
||||
data[str(issue_iid)] = user_id
|
||||
|
||||
with open(REPORTS_FILE, "w") as f:
|
||||
temp_file = f"{REPORTS_FILE}.tmp"
|
||||
with open(temp_file, "w", encoding="utf-8") as f:
|
||||
json.dump(data, f, indent=4)
|
||||
os.replace(temp_file, REPORTS_FILE)
|
||||
except Exception as e:
|
||||
kuby_logger.error(f"Error saving report to JSON: {e}")
|
||||
|
||||
|
|
@ -154,13 +158,9 @@ class BugReport(commands.Cog):
|
|||
self.bot.loop.create_task(cleanup())
|
||||
|
||||
async def handle_bot_event(self, request):
|
||||
# Vérification de la sécurité (Secret Token GitLab)
|
||||
webhook_secret = os.getenv("GITLAB_WEBHOOK_SECRET")
|
||||
if webhook_secret:
|
||||
provided_token = request.headers.get("X-Gitlab-Token")
|
||||
if provided_token != webhook_secret:
|
||||
kuby_logger.warning("Unauthorised webhook attempt detected (invalid X-Gitlab-Token).")
|
||||
return web.json_response({"status": "unauthorised"}, status=401)
|
||||
# Sécurité interne désactivée comme demandé (le port 5001 n'est accessible que via localhost)
|
||||
provided_token = request.headers.get("X-Gitlab-Token")
|
||||
# On ignore la vérification du token pour faciliter le relais local
|
||||
|
||||
try:
|
||||
# On attend que le bot soit prêt si on vient de rebooter
|
||||
|
|
@ -188,8 +188,12 @@ class BugReport(commands.Cog):
|
|||
if not os.path.exists(REPORTS_FILE):
|
||||
return web.json_response({"status": "no reports file"}, status=200)
|
||||
|
||||
with open(REPORTS_FILE, "r") as f:
|
||||
reports = json.load(f)
|
||||
try:
|
||||
with open(REPORTS_FILE, "r", encoding="utf-8") as f:
|
||||
reports = json.load(f)
|
||||
except json.JSONDecodeError:
|
||||
kuby_logger.error("REPORTS_FILE corrupted during read!")
|
||||
return web.json_response({"status": "corrupted file"}, status=500)
|
||||
|
||||
user_id = reports.get(str(issue_iid))
|
||||
if not user_id:
|
||||
|
|
@ -226,6 +230,7 @@ class BugReport(commands.Cog):
|
|||
current_labels_str = "Mis à jour"
|
||||
|
||||
try:
|
||||
# Création de l'embed pour la mise à jour de statut
|
||||
embed = discord.Embed(
|
||||
title="🛠️ Mise à jour de votre signalement !",
|
||||
description=f"Le statut de votre rapport **{issue_title}** a été mis à jour par l'équipe.",
|
||||
|
|
@ -235,22 +240,24 @@ class BugReport(commands.Cog):
|
|||
|
||||
try:
|
||||
await user.send(embed=embed)
|
||||
# On logue systématiquement pour que le staff sache si ça a marché (utile en prod)
|
||||
kuby_logger.info(f"Notification de label envoyée à {user} ({user.id}) pour l'issue #{issue_iid}")
|
||||
if dev and dev.id != user.id:
|
||||
await dev.send(f"✅ [FIABLE] L'utilisateur {user} ({user.id}) a bien reçu la notification de statut **{current_labels_str}** pour l'issue #{issue_iid} ({issue_title}).")
|
||||
await dev.send(f"✅ [SUIVI] L'utilisateur {user} ({user.id}) a bien reçu la notification de statut **{current_labels_str}** pour l'issue #{issue_iid} ({issue_title}).")
|
||||
except discord.Forbidden:
|
||||
kuby_logger.warning(f"Unable to DM user {user} ({user.id}) - DMs are disabled or bot is blocked.")
|
||||
kuby_logger.warning(f"Impossible d'envoyer un MP à {user} ({user.id}) - MPs désactivés.")
|
||||
if dev and dev.id != user.id:
|
||||
try:
|
||||
await dev.send(f"⚠️ [DM BLOQUÉ] Impossible de notifier l'utilisateur {user} ({user.id}) pour l'issue #{issue_iid} (DMs désactivés).")
|
||||
except discord.Forbidden:
|
||||
pass
|
||||
except discord.HTTPException as e:
|
||||
kuby_logger.error(f"HTTP error sending DM to {user}: {e}")
|
||||
await dev.send(f"⚠️ [DM BLOQUÉ] {user} ({user.id}) a ses MPs fermés. Impossible de notifier pour l'issue #{issue_iid}.")
|
||||
except Exception as e:
|
||||
kuby_logger.error(f"Erreur lors de l'envoi du MP de statut à {user}: {e}")
|
||||
except Exception as e:
|
||||
kuby_logger.error(f"Unexpected error in label update notification: {e}")
|
||||
kuby_logger.error(f"Erreur inattendue dans la notification de label : {e}")
|
||||
|
||||
# Check if it was closed
|
||||
if action == "close" or payload.get("object_attributes", {}).get("state") == "closed":
|
||||
state = payload.get("object_attributes", {}).get("state")
|
||||
is_closing_now = action == "close" or (state == "closed" and "state_id" in changes)
|
||||
|
||||
if is_closing_now:
|
||||
try:
|
||||
embed = discord.Embed(
|
||||
title="🛠️ Bug / Suggestion Terminé(e) !",
|
||||
|
|
@ -262,19 +269,17 @@ class BugReport(commands.Cog):
|
|||
|
||||
try:
|
||||
await user.send(embed=embed)
|
||||
kuby_logger.info(f"Notification de clôture envoyée à {user} ({user.id}) pour l'issue #{issue_iid}")
|
||||
if dev and dev.id != user.id:
|
||||
await dev.send(f"✅ [FIABLE] L'utilisateur {user} ({user.id}) a bien reçu la notification de CLÔTURE pour l'issue #{issue_iid}.")
|
||||
await dev.send(f"✅ [SUIVI] L'utilisateur {user} ({user.id}) a bien reçu la notification de CLÔTURE pour l'issue #{issue_iid}.")
|
||||
except discord.Forbidden:
|
||||
kuby_logger.warning(f"Unable to DM user {user} ({user.id}) - DMs are disabled or bot is blocked during closure.")
|
||||
kuby_logger.warning(f"Impossible d'envoyer le MP de clôture à {user} ({user.id}).")
|
||||
if dev and dev.id != user.id:
|
||||
try:
|
||||
await dev.send(f"⚠️ [DM BLOQUÉ] Impossible d'annoncer la clôture à {user} ({user.id}) pour l'issue #{issue_iid} (DMs désactivés).")
|
||||
except discord.Forbidden:
|
||||
pass
|
||||
except discord.HTTPException as e:
|
||||
kuby_logger.error(f"HTTP error sending closure DM to {user}: {e}")
|
||||
await dev.send(f"⚠️ [DM BLOQUÉ] Impossible d'annoncer la clôture à {user} ({user.id}) pour l'issue #{issue_iid} (DMs désactivés).")
|
||||
except Exception as e:
|
||||
kuby_logger.error(f"Erreur lors de l'envoi du MP de clôture à {user}: {e}")
|
||||
except Exception as e:
|
||||
kuby_logger.error(f"Unexpected error in closure notification: {e}")
|
||||
kuby_logger.error(f"Erreur inattendue dans la notification de clôture : {e}")
|
||||
|
||||
elif event_type == "note":
|
||||
note_attr = payload.get("object_attributes", {})
|
||||
|
|
@ -294,19 +299,17 @@ class BugReport(commands.Cog):
|
|||
|
||||
try:
|
||||
await user.send(embed=embed)
|
||||
kuby_logger.info(f"Commentaire GitLab envoyé à {user} ({user.id}) pour l'issue #{issue_iid}")
|
||||
if dev and dev.id != user.id:
|
||||
await dev.send(f"✅ [FIABLE] L'utilisateur {user} ({user.id}) a bien reçu votre commentaire pour l'issue #{issue_iid}.")
|
||||
await dev.send(f"✅ [SUIVI] L'utilisateur {user} ({user.id}) a bien reçu votre commentaire pour l'issue #{issue_iid}.")
|
||||
except discord.Forbidden:
|
||||
kuby_logger.warning(f"Unable to DM user {user} ({user.id}) - DMs are disabled or bot is blocked during comment notification.")
|
||||
kuby_logger.warning(f"Impossible d'envoyer le commentaire en MP à {user} ({user.id}).")
|
||||
if dev and dev.id != user.id:
|
||||
try:
|
||||
await dev.send(f"⚠️ [DM BLOQUÉ] Impossible d'envoyer votre commentaire à {user} ({user.id}) pour l'issue #{issue_iid} (DMs désactivés).")
|
||||
except discord.Forbidden:
|
||||
pass
|
||||
except discord.HTTPException as e:
|
||||
kuby_logger.error(f"HTTP error sending comment DM to {user}: {e}")
|
||||
await dev.send(f"⚠️ [DM BLOQUÉ] Impossible d'envoyer votre commentaire à {user} ({user.id}) pour l'issue #{issue_iid} (DMs désactivés).")
|
||||
except Exception as e:
|
||||
kuby_logger.error(f"Erreur lors de l'envoi du MP de commentaire à {user}: {e}")
|
||||
except Exception as e:
|
||||
kuby_logger.error(f"Unexpected error in comment notification: {e}")
|
||||
kuby_logger.error(f"Erreur inattendue dans la notification de commentaire : {e}")
|
||||
|
||||
return web.json_response({"status": "success"}, status=200)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue