feat: list creation/search if exists
This commit is contained in:
75
hoarder.py
75
hoarder.py
@@ -22,7 +22,7 @@ class HoarderForwarder(Plugin):
|
|||||||
def get_config_class(cls) -> Type[BaseProxyConfig]:
|
def get_config_class(cls) -> Type[BaseProxyConfig]:
|
||||||
return Config
|
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.
|
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"
|
content["format"] = "org.matrix.custom.html"
|
||||||
|
|
||||||
if in_thread:
|
if in_thread:
|
||||||
# Ajouter des métadonnées pour créer un thread
|
# Vérifier que evt contient event_id
|
||||||
content["m.relates_to"] = {
|
if hasattr(evt, "event_id"):
|
||||||
"rel_type": "m.thread",
|
content["m.relates_to"] = {
|
||||||
"event_id": evt.event_id # ID de l'événement original pour le thread
|
"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
|
# Envoyer le message
|
||||||
await evt.client.send_message(
|
try:
|
||||||
room_id=evt.room_id, # Envoyer dans la même salle
|
await evt.client.send_message(
|
||||||
content=content
|
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.")
|
@command.new("hoarder", require_subcommand=True, help="Commandes pour gérer Hoarder.")
|
||||||
async def base_command(self, evt: MessageEvent):
|
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:
|
if response.status == 200 or response.status == 201 or response.status == 204:
|
||||||
data = await response.json()
|
data = await response.json()
|
||||||
bookmark_id = data[0]["result"]["data"]["json"]["id"]
|
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)
|
self.add_bookmark_to_list(bookmark_id, hoarder_list)
|
||||||
return bookmark_id
|
return bookmark_id
|
||||||
else:
|
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())
|
print(await response.text())
|
||||||
except Exception as e:
|
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
|
return None
|
||||||
|
|
||||||
async def get_all_lists(self, evt: MessageEvent):
|
async def get_all_lists(self, evt: MessageEvent):
|
||||||
@@ -125,10 +134,10 @@ class HoarderForwarder(Plugin):
|
|||||||
data = await response.json()
|
data = await response.json()
|
||||||
return data.get("lists", [])
|
return data.get("lists", [])
|
||||||
else:
|
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 []
|
return []
|
||||||
except Exception as e:
|
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 []
|
return []
|
||||||
|
|
||||||
async def find_list_by_name(self, evt: MessageEvent, name: str) -> str:
|
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)
|
lists = await self.get_all_lists(evt)
|
||||||
for lst in lists:
|
for lst in lists:
|
||||||
if lst["name"] == name:
|
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"]
|
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
|
return None
|
||||||
|
|
||||||
async def create_list(self, evt: MessageEvent, name: str) -> str:
|
async def create_list(self, evt: MessageEvent, name: str) -> str:
|
||||||
"""Crée une nouvelle liste avec le nom donné et retourne son ID."""
|
"""Crée une nouvelle liste avec le nom donné et retourne son ID."""
|
||||||
hoarder_url = self.config["hoarder_url"]
|
hoarder_url = self.config["hoarder_url"]
|
||||||
api_key = self.config["hoarder_api_key"]
|
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 = {
|
headers = {
|
||||||
"Authorization": f"Bearer {api_key}",
|
"Authorization": f"Bearer {api_key}",
|
||||||
@@ -154,10 +163,8 @@ class HoarderForwarder(Plugin):
|
|||||||
}
|
}
|
||||||
|
|
||||||
payload = {
|
payload = {
|
||||||
"json": {
|
"name": f"{name}",
|
||||||
"icon": "💬", # Icône par défaut
|
"icon": "💬"
|
||||||
"name": name
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -165,21 +172,27 @@ class HoarderForwarder(Plugin):
|
|||||||
async with session.post(create_endpoint, json=payload, headers=headers) as response:
|
async with session.post(create_endpoint, json=payload, headers=headers) as response:
|
||||||
if response.status == 200 or response.status == 201 or response.status == 204:
|
if response.status == 200 or response.status == 201 or response.status == 204:
|
||||||
data = await response.json()
|
data = await response.json()
|
||||||
list_id = data["result"]["data"]["json"]["id"]
|
self.log.info(response.json())
|
||||||
await self.send_message(evt, f"Liste créée avec succès : {name} (ID : {list_id})", in_thread=True)
|
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
|
return list_id
|
||||||
else:
|
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
|
return None
|
||||||
except Exception as e:
|
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
|
return None
|
||||||
|
|
||||||
async def ensure_list_exists(self, evt: MessageEvent, name: str) -> str:
|
async def ensure_list_exists(self, evt: MessageEvent, name: str) -> str:
|
||||||
"""Vérifie si une liste existe, sinon la crée."""
|
"""Vérifie si une liste existe, sinon la crée."""
|
||||||
list_id = await self.find_list_by_name(evt, name)
|
list_id = await self.find_list_by_name(evt, name)
|
||||||
if list_id is None:
|
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)
|
list_id = await self.create_list(evt, name)
|
||||||
return list_id
|
return list_id
|
||||||
|
|
||||||
@@ -205,14 +218,14 @@ class HoarderForwarder(Plugin):
|
|||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
async with session.put(add_to_list_endpoint, headers=headers) as response:
|
async with session.put(add_to_list_endpoint, headers=headers) as response:
|
||||||
if response.status == 200 or response.status == 201 or response.status == 204:
|
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
|
return True
|
||||||
else:
|
else:
|
||||||
await self.send_message(evt, f"Erreur lors de l'ajout à la liste : {response.status}", 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=True)
|
await self.send_message(evt, await response.text(), in_thread=False)
|
||||||
return False
|
return False
|
||||||
except Exception as e:
|
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
|
return False
|
||||||
|
|
||||||
@base_command.subcommand("help", help="Affiche l'aide pour les commandes Hoarder.")
|
@base_command.subcommand("help", help="Affiche l'aide pour les commandes Hoarder.")
|
||||||
|
|||||||
Reference in New Issue
Block a user