1
+ from datetime import datetime
2
+ import dateutil .parser
3
+
4
+ class LogEntry :
5
+ def __init__ (self , data ):
6
+ self .key = data ['key' ]
7
+ self .open = data ['open' ]
8
+ self .created_at = dateutil .parser .parse (data ['created_at' ])
9
+ self .closed_at = dateutil .parser .parse (data ['closed_at' ]) if not self .open else None
10
+ self .channel_id = int (data ['channel_id' ])
11
+ self .guild_id = int (data ['guild_id' ])
12
+ self .creator = User (data ['creator' ])
13
+ self .recipient = User (data ['recipient' ])
14
+ self .closer = User (data ['closer' ]) if not self .open else None
15
+ self .messages = [Message (m ) for m in data ['messages' ]]
16
+
17
+ def __str__ (self ):
18
+ out = f"Thread created at { self .created_at .strftime ('%d %b %Y - %H:%M UTC' )} \n "
19
+
20
+ if self .creator == self .recipient :
21
+ out += f'[R] { self .creator } ({ self .creator .id } ) created a modmail thread. \n '
22
+ else :
23
+ out += f'[M] { self .creator } created a thread with [R] { self .recipient } ({ self .recipient .id } )\n '
24
+
25
+ out += '────────────────' * 3 + '\n '
26
+
27
+ if self .messages :
28
+ for index , message in enumerate (self .messages ):
29
+ next_index = index + 1 if index + 1 < len (self .messages ) else index
30
+ curr , next = message .author , self .messages [next_index ].author
31
+
32
+ author = curr
33
+ base = message .created_at .strftime ('%d/%m %H:%M' ) + (' [M] ' if author .mod else ' [R] ' )
34
+ base += f'{ author } : { message .content } \n '
35
+ for attachment in message .attachments :
36
+ base += 'Attachment: ' + attachment + '\n '
37
+
38
+ out += base
39
+
40
+ if curr != next :
41
+ out += '────────────────' * 2 + '\n '
42
+ current_author = author
43
+
44
+ if not self .open :
45
+ if self .messages : # only add if at least 1 message was sent
46
+ out += '────────────────' * 3 + '\n '
47
+ out += f'[M] { self .closer } ({ self .closer .id } ) closed the modmail thread. \n '
48
+ out += f"Thread closed at { self .closed_at .strftime ('%d %b %Y - %H:%M UTC' )} \n "
49
+
50
+ return out
51
+
52
+
53
+ class User :
54
+ def __init__ (self , data ):
55
+ self .id = int (data .get ('id' ))
56
+ self .name = data ['name' ]
57
+ self .discriminator = data ['discriminator' ]
58
+ self .avatar_url = data ['avatar_url' ]
59
+ self .mod = data ['mod' ]
60
+
61
+ def __str__ (self ):
62
+ return f'{ self .name } #{ self .discriminator } '
63
+
64
+ def __eq__ (self , other ):
65
+ return self .id == other .id and self .mod is other .mod
66
+
67
+
68
+ class Message :
69
+ def __init__ (self , data ):
70
+ self .id = int (data ['message_id' ])
71
+ self .created_at = dateutil .parser .parse (data ['timestamp' ])
72
+ self .content = data ['content' ]
73
+ self .attachments = data ['attachments' ]
74
+ self .author = User (data ['author' ])
0 commit comments