From b16485e29ef65ddc0e77bb39701a4e9bb7c91fbf Mon Sep 17 00:00:00 2001 From: Eric Meehan Date: Mon, 27 Jan 2025 22:07:52 -0500 Subject: [PATCH] Initial attempt to add matrix-nio to a logging module --- README.md | 3 +++ kraken_bot/MatrixLogger.py | 55 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 kraken_bot/MatrixLogger.py diff --git a/README.md b/README.md index e69de29..925dbbb 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,3 @@ +# Kraken bot + +A Python bot for day-trading cryptocurrencies on the Kraken exchange. diff --git a/kraken_bot/MatrixLogger.py b/kraken_bot/MatrixLogger.py new file mode 100644 index 0000000..45830fc --- /dev/null +++ b/kraken_bot/MatrixLogger.py @@ -0,0 +1,55 @@ +import asyncio +import logging + +from nio import AsyncClient, MatrixRoom, RoomMessageText + +class MatrixHandler(logging.Handler): + def __init__(self, url, user_id, user_password, room_id): + super().__init__() + self.client = AsyncClient(url, user_id) + self.room_id = room_id + self.client.add_event_callback(self.message_callback, RoomMessageText) + await self.client.login(user_password) + + def message_callback(self, room: MatrixRoom, event: RoomMessageText) -> None: + return + + def emit(self, record): + self.client.room_send( + self.room_id, + message_type='m.room.message', + content={'msgtype': 'm.text', 'body': record} + ) + +class MatrixLogger: + def __init__(self, name): + self.logger = logging.getLogger(name) + self.logger.setLevel(logging.DEBUG) + + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.DEBUG) + console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) + + + matrix_handler = MatrixHandler(room_id) + matrix_handler.setLevel(logging.INFO) + matrix_handler.setFormatter(logging.Formatter('%(levelname)s - %(message)s')) + + self.logger.addHandler(console_handler) + self.logger.addHandler(matrix_handler) + + def debug(self, message): + self.logger.debug(message) + + def info(self, message): + self.logger.info(message) + + def warning(self, message): + self.logger.warning(message) + + def error(self, message): + self.logger.error(message) + + def critical(self, message): + self.logger.critical(message) +