From 809df07c14fabfa15cd99e3c34099f7737195cf5 Mon Sep 17 00:00:00 2001 From: gammafn Date: Thu, 6 May 2021 16:09:17 -0500 Subject: [PATCH] !bot logs: Codeblock, argument to match against module name --- modules/bot.py | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/modules/bot.py b/modules/bot.py index 807663b..75f038b 100644 --- a/modules/bot.py +++ b/modules/bot.py @@ -2,19 +2,24 @@ import collections import logging import json import requests +from html import escape from datetime import timedelta import time +from nio import RoomCreateError from modules.common.module import BotModule, ModuleCannotBeDisabled class LogDequeHandler(logging.Handler): def __init__(self, count): super().__init__(level = logging.NOTSET) - self.last_logs = collections.deque([], maxlen=10) + self.logs = dict() self.level = logging.INFO def emit(self, record): - self.last_logs.append(self.format(record)) + try: + self.logs[str(record.module)].append(record) + except: + self.logs[str(record.module)] = collections.deque([record], maxlen=15) class MatrixModule(BotModule): @@ -52,8 +57,6 @@ class MatrixModule(BotModule): await self.export_settings(bot, event) elif args[1] == 'ping': await self.get_ping(bot, room, event) - elif args[1] == 'logs': - await self.last_logs(bot, room, event) elif len(args) == 3: if args[1] == 'enable': @@ -64,6 +67,8 @@ class MatrixModule(BotModule): await self.export_settings(bot, event, module_name=args[2]) elif args[1] == 'import': await self.import_settings(bot, event) + elif args[1] == 'logs': + await self.last_logs(bot, room, event, args[2]) else: pass @@ -234,11 +239,23 @@ class MatrixModule(BotModule): bot.save_settings() await bot.send_msg(event.sender, f'Private message from {bot.matrix_user}', 'Updated bot settings') - async def last_logs(self, bot, room, event): + async def last_logs(self, bot, room, event, logmodule): bot.must_be_owner(event) - res = await bot.send_msg(event.sender, f'Private message from {bot.matrix_user}', '\n'.join(self.loghandler.last_logs)) - self.logger.info(f'{event.sender} asked for the last {len(self.loghandler.last_logs)} log messages.') - return res + self.logger.info(f'{event.sender} asked for the most recent log messages.') + msg_room = await bot.find_or_create_private_msg(event.sender, f'Private message from {bot.matrix_user}') + if not msg_room or (type(msg_room) is RoomCreateError): + # fallback to current room if we can't create one + msg_room = room + for key in self.loghandler.logs: + if logmodule in key: + logmodule = key + break + else: + return await bot.send_text(msg_room, 'Unknown module, or no logs yet') + + print (self.loghandler.logs.keys()) + msg = '\n'.join([self.loghandler.format(record) for record in self.loghandler.logs.get(logmodule)]) + return await bot.send_html(msg_room, f'
{escape(msg)}
', msg) def disable(self): raise ModuleCannotBeDisabled