Merge pull request 'V1.0 de l'amélioration du suivi des issues' (#264) from dev into main
Reviewed-on: #264
This commit is contained in:
commit
8358b6128e
1 changed files with 59 additions and 50 deletions
|
|
@ -465,6 +465,10 @@ class BugReport(commands.Cog):
|
||||||
os.makedirs(REPORTS_DIR, exist_ok=True)
|
os.makedirs(REPORTS_DIR, exist_ok=True)
|
||||||
await self._start_webhook_server()
|
await self._start_webhook_server()
|
||||||
|
|
||||||
|
pending_count = await self._send_pending_deployment_notifications()
|
||||||
|
if pending_count:
|
||||||
|
kuby_logger.info(f"Notifications de déploiement en attente traitées au démarrage: {pending_count}")
|
||||||
|
|
||||||
# ⚡ Enregistrement des vues persistantes (boutons panel)
|
# ⚡ Enregistrement des vues persistantes (boutons panel)
|
||||||
# Sans ça, après un redémarrage les boutons "Remplir le formulaire"
|
# Sans ça, après un redémarrage les boutons "Remplir le formulaire"
|
||||||
# dans les anciens messages de panel ne fonctionnent plus.
|
# dans les anciens messages de panel ne fonctionnent plus.
|
||||||
|
|
@ -497,6 +501,60 @@ class BugReport(commands.Cog):
|
||||||
kuby_logger.error(f"Error during webhook server cleanup: {e}")
|
kuby_logger.error(f"Error during webhook server cleanup: {e}")
|
||||||
self.bot.loop.create_task(cleanup())
|
self.bot.loop.create_task(cleanup())
|
||||||
|
|
||||||
|
async def _send_pending_deployment_notifications(self) -> int:
|
||||||
|
"""Envoie les notifications de déploiement en attente depuis le tracking."""
|
||||||
|
notified_count = 0
|
||||||
|
for issue_iid, issue_data in list(self.issue_data.items()):
|
||||||
|
if not issue_data.get("pending_deployment_notification"):
|
||||||
|
kuby_logger.debug(f"No pending deployment notification for issue #{issue_iid}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
requester_id = issue_data.get("requester_id")
|
||||||
|
if not requester_id:
|
||||||
|
kuby_logger.warning(f"Missing requester_id for pending deployment notification on issue #{issue_iid}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
kuby_logger.info(f"Processing deployment notification for issue #{issue_iid} to requester_id={requester_id}")
|
||||||
|
user = self.bot.get_user(requester_id)
|
||||||
|
if not user:
|
||||||
|
try:
|
||||||
|
user = await self.bot.fetch_user(requester_id)
|
||||||
|
kuby_logger.info(f"Fetched user {user} for issue #{issue_iid}")
|
||||||
|
except Exception as fetch_error:
|
||||||
|
kuby_logger.warning(f"Unable to fetch user {requester_id} for issue #{issue_iid}: {fetch_error}")
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
kuby_logger.info(f"Resolved cached user {user} for issue #{issue_iid}")
|
||||||
|
|
||||||
|
try:
|
||||||
|
embed = disnake.Embed(
|
||||||
|
title="🚀 Fonctionnalité disponible !",
|
||||||
|
description=(
|
||||||
|
"✅ Votre demande est désormais fonctionnelle sur le bot.\n\n"
|
||||||
|
"Merci encore pour votre contribution et votre patience."
|
||||||
|
),
|
||||||
|
color=disnake.Color.blurple()
|
||||||
|
)
|
||||||
|
avatar = getattr(self.bot.user, "display_avatar", None)
|
||||||
|
if avatar:
|
||||||
|
embed.set_thumbnail(url=avatar.url)
|
||||||
|
|
||||||
|
kuby_logger.info(f"Attempting to DM deployment notification to {user} for issue #{issue_iid}")
|
||||||
|
await user.send(embed=embed)
|
||||||
|
issue_data["pending_deployment_notification"] = False
|
||||||
|
notified_count += 1
|
||||||
|
kuby_logger.info(f"Notification de déploiement envoyée à {user} pour l'issue #{issue_iid}")
|
||||||
|
except disnake.Forbidden as forbidden_error:
|
||||||
|
kuby_logger.warning(f"DM forbidden for {user} on issue #{issue_iid}: {forbidden_error}")
|
||||||
|
except disnake.HTTPException as http_error:
|
||||||
|
kuby_logger.warning(f"Discord HTTP error while sending deployment notification to {user} on issue #{issue_iid}: {http_error}")
|
||||||
|
except Exception as e:
|
||||||
|
kuby_logger.warning(f"Impossible d'envoyer la notification de déploiement à {user} pour l'issue #{issue_iid}: {e}")
|
||||||
|
|
||||||
|
save_tracking(self.issue_data)
|
||||||
|
kuby_logger.info(f"Déploiement terminé: {notified_count} notification(s) envoyée(s)")
|
||||||
|
return notified_count
|
||||||
|
|
||||||
async def handle_deployment_complete(self, request):
|
async def handle_deployment_complete(self, request):
|
||||||
"""Notifie les demandeurs dont la fonctionnalité a été intégrée et attend le prochain déploiement."""
|
"""Notifie les demandeurs dont la fonctionnalité a été intégrée et attend le prochain déploiement."""
|
||||||
try:
|
try:
|
||||||
|
|
@ -510,56 +568,7 @@ class BugReport(commands.Cog):
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
notified_count = 0
|
notified_count = await self._send_pending_deployment_notifications()
|
||||||
for issue_iid, issue_data in list(self.issue_data.items()):
|
|
||||||
if not issue_data.get("pending_deployment_notification"):
|
|
||||||
kuby_logger.debug(f"No pending deployment notification for issue #{issue_iid}")
|
|
||||||
continue
|
|
||||||
|
|
||||||
requester_id = issue_data.get("requester_id")
|
|
||||||
if not requester_id:
|
|
||||||
kuby_logger.warning(f"Missing requester_id for pending deployment notification on issue #{issue_iid}")
|
|
||||||
continue
|
|
||||||
|
|
||||||
kuby_logger.info(f"Processing deployment notification for issue #{issue_iid} to requester_id={requester_id}")
|
|
||||||
user = self.bot.get_user(requester_id)
|
|
||||||
if not user:
|
|
||||||
try:
|
|
||||||
user = await self.bot.fetch_user(requester_id)
|
|
||||||
kuby_logger.info(f"Fetched user {user} for issue #{issue_iid}")
|
|
||||||
except Exception as fetch_error:
|
|
||||||
kuby_logger.warning(f"Unable to fetch user {requester_id} for issue #{issue_iid}: {fetch_error}")
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
kuby_logger.info(f"Resolved cached user {user} for issue #{issue_iid}")
|
|
||||||
|
|
||||||
try:
|
|
||||||
embed = disnake.Embed(
|
|
||||||
title="🚀 Fonctionnalité disponible !",
|
|
||||||
description=(
|
|
||||||
"✅ Votre demande est désormais fonctionnelle sur le bot.\n\n"
|
|
||||||
"Merci encore pour votre contribution et votre patience."
|
|
||||||
),
|
|
||||||
color=disnake.Color.blurple()
|
|
||||||
)
|
|
||||||
avatar = getattr(self.bot.user, "display_avatar", None)
|
|
||||||
if avatar:
|
|
||||||
embed.set_thumbnail(url=avatar.url)
|
|
||||||
|
|
||||||
kuby_logger.info(f"Attempting to DM deployment notification to {user} for issue #{issue_iid}")
|
|
||||||
await user.send(embed=embed)
|
|
||||||
issue_data["pending_deployment_notification"] = False
|
|
||||||
notified_count += 1
|
|
||||||
kuby_logger.info(f"Notification de déploiement envoyée à {user} pour l'issue #{issue_iid}")
|
|
||||||
except disnake.Forbidden as forbidden_error:
|
|
||||||
kuby_logger.warning(f"DM forbidden for {user} on issue #{issue_iid}: {forbidden_error}")
|
|
||||||
except disnake.HTTPException as http_error:
|
|
||||||
kuby_logger.warning(f"Discord HTTP error while sending deployment notification to {user} on issue #{issue_iid}: {http_error}")
|
|
||||||
except Exception as e:
|
|
||||||
kuby_logger.warning(f"Impossible d'envoyer la notification de déploiement à {user} pour l'issue #{issue_iid}: {e}")
|
|
||||||
|
|
||||||
save_tracking(self.issue_data)
|
|
||||||
kuby_logger.info(f"Déploiement terminé: {notified_count} notification(s) envoyée(s)")
|
|
||||||
return web.json_response({"status": "notified", "sent": notified_count}, status=200)
|
return web.json_response({"status": "notified", "sent": notified_count}, status=200)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
kuby_logger.error(f"Error handling deployment complete: {e}")
|
kuby_logger.error(f"Error handling deployment complete: {e}")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue