Post log messages to Matrix #6
@ -0,0 +1,3 @@
|
||||
# Kraken bot
|
||||
|
||||
A Python bot for day-trading cryptocurrencies on the Kraken exchange.
|
55
kraken_bot/MatrixLogger.py
Normal file
55
kraken_bot/MatrixLogger.py
Normal file
@ -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)
|
||||
eric marked this conversation as resolved
Outdated
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user
AsyncClient
will need to be executed like so:As such, it will need to be instantiated and started elsewhere with the necessary values passed in via parameters.
The
HttpClient
was used instead. Fortunately, the interface was compatible.This is still an issue. The Matrix logger likely needs to be redesigned.