From 2abb14e7c0b96a708a26e1bfe2611a576f910760 Mon Sep 17 00:00:00 2001 From: MrRaph_ Date: Tue, 3 Dec 2024 13:53:02 +0100 Subject: [PATCH] feat: list creation/search if exists --- hoarder.py | 75 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 31 deletions(-) diff --git a/hoarder.py b/hoarder.py index 26b76e2..0954bc8 100644 --- a/hoarder.py +++ b/hoarder.py @@ -22,7 +22,7 @@ class HoarderForwarder(Plugin): def get_config_class(cls) -> Type[BaseProxyConfig]: return Config - async def send_message(evt: MessageEvent, message: str, formatted: bool = False, in_thread: bool = False): + async def send_message(self, evt: MessageEvent, message: str, formatted: bool = False, in_thread: bool = False): """ Envoie un message en réponse à un événement Matrix, avec support des threads. @@ -42,17 +42,26 @@ class HoarderForwarder(Plugin): content["format"] = "org.matrix.custom.html" if in_thread: - # Ajouter des métadonnées pour créer un thread - content["m.relates_to"] = { - "rel_type": "m.thread", - "event_id": evt.event_id # ID de l'événement original pour le thread - } + # Vérifier que evt contient event_id + if hasattr(evt, "event_id"): + content["m.relates_to"] = { + "rel_type": "m.thread", + "event_id": evt.event_id # Utiliser evt.event_id pour le thread + } + else: + self.log.error("Impossible de créer un thread : event_id manquant.") + await evt.reply("Erreur interne : impossible de créer un thread.") + return # Envoyer le message - await evt.client.send_message( - room_id=evt.room_id, # Envoyer dans la même salle - content=content - ) + try: + await evt.client.send_message( + room_id=evt.room_id, # Envoyer dans la même salle + content=content + ) + except Exception as e: + self.log.exception(f"Erreur lors de l'envoi du message : {e}") + @command.new("hoarder", require_subcommand=True, help="Commandes pour gérer Hoarder.") async def base_command(self, evt: MessageEvent): @@ -96,14 +105,14 @@ class HoarderForwarder(Plugin): if response.status == 200 or response.status == 201 or response.status == 204: data = await response.json() bookmark_id = data[0]["result"]["data"]["json"]["id"] - await self.send_message(evt, f"Bookmark créé avec succès : {bookmark_id}", in_thread=True) + await self.send_message(evt, f"Bookmark créé avec succès : {bookmark_id}", in_thread=False) self.add_bookmark_to_list(bookmark_id, hoarder_list) return bookmark_id else: - await self.send_message(evt, f"Erreur lors de la création du bookmark : {response.status}", in_thread=True) + await self.send_message(evt, f"Erreur lors de la création du bookmark : {response.status}", in_thread=False) print(await response.text()) except Exception as e: - await self.send_message(evt, f"Erreur lors de la création du bookmark : {e}", in_thread=True) + await self.send_message(evt, f"Erreur lors de la création du bookmark : {e}", in_thread=False) return None async def get_all_lists(self, evt: MessageEvent): @@ -125,10 +134,10 @@ class HoarderForwarder(Plugin): data = await response.json() return data.get("lists", []) else: - await self.send_message(evt, f"Erreur lors de la récupération des listes : {response.status}", in_thread=True) + await self.send_message(evt, f"Erreur lors de la récupération des listes : {response.status}", in_thread=False) return [] except Exception as e: - await self.send_message(evt, f"Erreur lors de la récupération des listes : {e}", in_thread=True) + await self.send_message(evt, f"Erreur lors de la récupération des listes : {e}", in_thread=False) return [] async def find_list_by_name(self, evt: MessageEvent, name: str) -> str: @@ -136,16 +145,16 @@ class HoarderForwarder(Plugin): lists = await self.get_all_lists(evt) for lst in lists: if lst["name"] == name: - await self.send_message(evt, f"Liste trouvée : {name} (ID : {lst['id']})", in_thread=True) + await self.send_message(evt, f"Liste trouvée : {name} (ID : {lst['id']})", in_thread=False) return lst["id"] - await self.send_message(evt, f"Aucune liste trouvée avec le nom : {name}", in_thread=True) + await self.send_message(evt, f"Aucune liste trouvée avec le nom : {name}", in_thread=False) return None async def create_list(self, evt: MessageEvent, name: str) -> str: """Crée une nouvelle liste avec le nom donné et retourne son ID.""" hoarder_url = self.config["hoarder_url"] api_key = self.config["hoarder_api_key"] - create_endpoint = f"{hoarder_url}/api/trpc/lists.createList" + create_endpoint = f"{hoarder_url}/api/v1/lists" headers = { "Authorization": f"Bearer {api_key}", @@ -154,10 +163,8 @@ class HoarderForwarder(Plugin): } payload = { - "json": { - "icon": "💬", # Icône par défaut - "name": name - } + "name": f"{name}", + "icon": "💬" } try: @@ -165,21 +172,27 @@ class HoarderForwarder(Plugin): async with session.post(create_endpoint, json=payload, headers=headers) as response: if response.status == 200 or response.status == 201 or response.status == 204: data = await response.json() - list_id = data["result"]["data"]["json"]["id"] - await self.send_message(evt, f"Liste créée avec succès : {name} (ID : {list_id})", in_thread=True) + self.log.info(response.json()) + list_id = data["id"] + self.log.info("STATUS OK") + self.log.info(data) + await self.send_message(evt, f"Liste créée avec succès : {name} (ID : {list_id})", in_thread=False) return list_id else: - await self.send_message(evt, f"Erreur lors de la création de la liste : {response.status}", in_thread=True) + self.log.info("STATUS NOK") + await self.send_message(evt, f"Erreur lors de la création de la liste : {response.status}", in_thread=False) return None except Exception as e: - await self.send_message(evt, f"Erreur lors de la création de la liste : {e}", in_thread=True) + self.log.error("EXCEPT - create_list") + self.log.error(f"EXCEPT - {e}") + await self.send_message(evt, f"Erreur lors de la création de la liste : {e}", in_thread=False) return None async def ensure_list_exists(self, evt: MessageEvent, name: str) -> str: """Vérifie si une liste existe, sinon la crée.""" list_id = await self.find_list_by_name(evt, name) if list_id is None: - await self.send_message(evt, f"La liste '{name}' n\'existe pas, création en cours...", in_thread=True) + await self.send_message(evt, f"La liste '{name}' n\'existe pas, création en cours...", in_thread=False) list_id = await self.create_list(evt, name) return list_id @@ -205,14 +218,14 @@ class HoarderForwarder(Plugin): async with aiohttp.ClientSession() as session: async with session.put(add_to_list_endpoint, headers=headers) as response: if response.status == 200 or response.status == 201 or response.status == 204: - await self.send_message(evt, f"Bookmark {bookmark_id} ajouté à la liste {list_id} avec succès.", in_thread=True) + await self.send_message(evt, f"Bookmark {bookmark_id} ajouté à la liste {list_id} avec succès.", in_thread=False) return True else: - await self.send_message(evt, f"Erreur lors de l'ajout à la liste : {response.status}", in_thread=True) - await self.send_message(evt, await response.text(), in_thread=True) + await self.send_message(evt, f"Erreur lors de l'ajout à la liste : {response.status}", in_thread=False) + await self.send_message(evt, await response.text(), in_thread=False) return False except Exception as e: - await self.send_message(evt, f"Erreur lors de l'ajout du bookmark à la liste : {e}", in_thread=True) + await self.send_message(evt, f"Erreur lors de l'ajout du bookmark à la liste : {e}", in_thread=False) return False @base_command.subcommand("help", help="Affiche l'aide pour les commandes Hoarder.")