From 8834f663c87ae45482994eb651c718b147709588 Mon Sep 17 00:00:00 2001 From: kyb3r Date: Wed, 16 Jan 2019 02:19:50 +1100 Subject: [PATCH] Add renderer and requirements --- README.md | 38 +++++++++++++++++++++++++ renderer.py | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 2 +- 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 README.md create mode 100644 renderer.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..c209ef7 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +
+ +
+ A simple webserver to view your modmail logs. +
+
+ + + + + + + + + Support + + + + + Bot instances + + + + + Python 3.7 + + + + + MIT License + + +
+
+ +## What is this? + +In order for you to view your selfhosted logs, you have to deploy this application. Take the url of this app after you deploy it and input it as a config var `LOG_URL` in the modmail bot app. diff --git a/renderer.py b/renderer.py new file mode 100644 index 0000000..91cf55c --- /dev/null +++ b/renderer.py @@ -0,0 +1,74 @@ +from datetime import datetime +import dateutil.parser + +class LogEntry: + def __init__(self, data): + self.key = data['key'] + self.open = data['open'] + self.created_at = dateutil.parser.parse(data['created_at']) + self.closed_at = dateutil.parser.parse(data['closed_at']) if not self.open else None + self.channel_id = int(data['channel_id']) + self.guild_id = int(data['guild_id']) + self.creator = User(data['creator']) + self.recipient = User(data['recipient']) + self.closer = User(data['closer']) if not self.open else None + self.messages = [Message(m) for m in data['messages']] + + def __str__(self): + out = f"Thread created at {self.created_at.strftime('%d %b %Y - %H:%M UTC')}\n" + + if self.creator == self.recipient: + out += f'[R] {self.creator} ({self.creator.id}) created a modmail thread. \n' + else: + out += f'[M] {self.creator} created a thread with [R] {self.recipient} ({self.recipient.id})\n' + + out += '────────────────' * 3 + '\n' + + if self.messages: + for index, message in enumerate(self.messages): + next_index = index + 1 if index + 1 < len(self.messages) else index + curr, next = message.author, self.messages[next_index].author + + author = curr + base = message.created_at.strftime('%d/%m %H:%M') + (' [M] ' if author.mod else ' [R] ') + base += f'{author}: {message.content}\n' + for attachment in message.attachments: + base += 'Attachment: ' + attachment + '\n' + + out += base + + if curr != next: + out += '────────────────' * 2 + '\n' + current_author = author + + if not self.open: + if self.messages: # only add if at least 1 message was sent + out += '────────────────' * 3 + '\n' + out += f'[M] {self.closer} ({self.closer.id}) closed the modmail thread. \n' + out += f"Thread closed at {self.closed_at.strftime('%d %b %Y - %H:%M UTC')} \n" + + return out + + +class User: + def __init__(self, data): + self.id = int(data.get('id')) + self.name = data['name'] + self.discriminator = data['discriminator'] + self.avatar_url = data['avatar_url'] + self.mod = data['mod'] + + def __str__(self): + return f'{self.name}#{self.discriminator}' + + def __eq__(self, other): + return self.id == other.id and self.mod is other.mod + + +class Message: + def __init__(self, data): + self.id = int(data['message_id']) + self.created_at = dateutil.parser.parse(data['timestamp']) + self.content = data['content'] + self.attachments = data['attachments'] + self.author = User(data['author']) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 2ac188c..bd7ffaf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -parsedatetime +python-dateutil motor sanic dnspython \ No newline at end of file