From 213b9ff400781adae83b619ed0613cd87b23ef2d Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Tue, 9 Jan 2018 13:28:12 -0600 Subject: [PATCH] add logger module, logs new/edit/delete msgs this logs these messages to a file directory. more stuff may get added eventually --- hitomi/settings.py | 2 ++ logger/__init__.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 logger/__init__.py diff --git a/hitomi/settings.py b/hitomi/settings.py index 32fc98b..5d4f652 100644 --- a/hitomi/settings.py +++ b/hitomi/settings.py @@ -39,6 +39,7 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'bot', 'dice', + 'logger', 'weather', ] @@ -126,6 +127,7 @@ STATIC_URL = '/static/' # default bot settings DISCORD_BOT_TOKEN = 'token' +LOGGER_BASE_DIR = './logs' WEATHER_WEATHER_UNDERGROUND_API_KEY = 'key' diff --git a/logger/__init__.py b/logger/__init__.py new file mode 100644 index 0000000..fc68247 --- /dev/null +++ b/logger/__init__.py @@ -0,0 +1,80 @@ +"""Log messages showing up on Discord.""" +import logging +from os import makedirs + +from django.conf import settings + +from bot import hitomi + +logger = logging.getLogger(__name__) + + +@hitomi.event +async def on_message(message): + """Log the seen message.""" + try: + log_file = log_file_for_message(message) + log_line = "{0:s}\t{1:s}\t{2:s}\t{3:s}".format(str(message.timestamp), str(message.author), str(message.id), + str(message.content)) + logger.info("{0:s} - {1:s}".format(log_file, log_line)) + with open(log_file, 'a') as log_fd: + print(log_line, file=log_fd) + except Exception as ex: + logger.error("error in creating log line") + logger.exception(ex) + + # let other stuff happen + await hitomi.process_commands(message) + + +@hitomi.event +async def on_message_delete(message): + """Log the message deletion.""" + try: + log_file = log_file_for_message(message) + log_line = "{0:s}\t{1:s}\tD:{2:s}\tDELETED: {3:s}".format(str(message.timestamp), str(message.author), + str(message.id), str(message.content)) + logger.info("{0:s} - {1:s}".format(log_file, log_line)) + with open(log_file, 'a') as log_fd: + print(log_line, file=log_fd) + except Exception as ex: + logger.error("error in creating log line") + logger.exception(ex) + + # let other stuff happen + await hitomi.process_commands(message) + + +@hitomi.event +async def on_message_edit(before, after): + """Log the message deletion.""" + try: + log_file = log_file_for_message(after) + log_line = "{0:s}\t{1:s}\tE:{2:s}\tEDIT: {3:s} (was \"{4:s}\")".format(str(after.timestamp), str(after.author), + str(after.id), str(after.content), + str(before.content)) + logger.info("{0:s} - {1:s}".format(log_file, log_line)) + with open(log_file, 'a') as log_fd: + print(log_line, file=log_fd) + except Exception as ex: + logger.error("error in creating log line") + logger.exception(ex) + + # let other stuff happen + await hitomi.process_commands(after) + + +def log_file_for_message(message): + """For the given message, figure out where we'd log the message.""" + if message.channel.is_private: + log_directory = 'DM/{0:s}/'.format(str(message.author)) + log_file = '{0:s}-{1:s}.log'.format(str(message.author), str(message.timestamp.strftime('%Y%m'))) + else: + log_directory = '{0:s}-{1:s}/{2:s}/'.format(str(message.server.id), str(message.server), + str(message.channel)) + log_file = '{0:s}-{1:s}.log'.format(str(message.channel), str(message.timestamp.strftime('%Y%m'))) + + destination_dir = '{0:s}/{1:s}'.format(settings.LOGGER_BASE_DIR, log_directory) + makedirs(destination_dir, exist_ok=True) + + return '{0:s}{1:s}'.format(destination_dir, log_file)