From 1d96f80ee61934780209947022a64fa908fdcc1a Mon Sep 17 00:00:00 2001 From: Benedetta Date: Mon, 25 Mar 2024 14:17:24 +0100 Subject: [PATCH] echobot --- lanonna/commands.py | 1 + lanonna/echobot.py | 38 ++++++++++++++++++++++++++++++++++++++ lanonna/lanonna.py | 3 +++ 3 files changed, 42 insertions(+) create mode 100644 lanonna/echobot.py diff --git a/lanonna/commands.py b/lanonna/commands.py index 9b18eab..7e355bf 100644 --- a/lanonna/commands.py +++ b/lanonna/commands.py @@ -1,6 +1,7 @@ from string import ascii_lowercase as ascii_lowercase_ commands = { + 'echo', 'asino', } diff --git a/lanonna/echobot.py b/lanonna/echobot.py new file mode 100644 index 0000000..22f0cf8 --- /dev/null +++ b/lanonna/echobot.py @@ -0,0 +1,38 @@ +'''Example echobot, used to demonstrate la nonna capabilities but also debug +Example of payloads received from mq: +{"command": "echo", "content": "test", +"source_message_id": "$i3YsHdF9oWRBZQ4hJ8QC_JzJRHYX1fW3wVMP1A0wQzM", "sender_nick": "bparodi", +"room_id": "!PQHkyOTruVtZnMRCRe:goulash.lezzo.org"} +''' +import aio_pika +import logging +import json + +async def run(mq_url): + connection = await aio_pika.connect_robust(mq_url) + + async with connection: + channel = await connection.channel() + + queue = await channel.declare_queue('echo') + + try: + async with queue.iterator() as queue_iter: + async for message in queue_iter: + async with message.process(): + body = message.body.decode() + # br = protocol.json_to_bot_response(body) + print(body) + br = json.loads(body) + response = { + 'content': br['content'], + 'source_message_id': br['source_message_id'], + 'room_id': br['room_id'], + 'as_reply': True, + 'as_markdown': False, + } + btes = json.dumps(response).encode() + mqmsg = aio_pika.Message(body=btes) + await channel.default_exchange.publish(mqmsg, 'lanonna') + except Exception as e: + logging.exception(f'Exception in mq loop: {e}') diff --git a/lanonna/lanonna.py b/lanonna/lanonna.py index c9ba9b9..73b89c2 100644 --- a/lanonna/lanonna.py +++ b/lanonna/lanonna.py @@ -60,11 +60,14 @@ async def mqmain(rabbit_client: mq.MQClient, matrix_client: matrix.MatrixClient) async def main(conf: config.Configuration): + import echobot + mq_client = await mq.initialize(conf) matrix_client = await matrix.initialize(conf) async with await psycopg.AsyncConnection.connect(conf.db_url, autocommit=True) as db_connection: await asyncio.gather( + echobot.run(conf.mq_url), mqmain(mq_client, matrix_client), matrixmain(matrix_client, mq_client, db_connection) )