1
1
from collections import defaultdict
2
2
import re
3
3
4
+ import discord
5
+
4
6
class Version :
5
- def __init__ (self , version , lines ):
7
+ def __init__ (self , bot , version , lines ):
8
+ self .bot = bot
6
9
self .version = version
7
10
self .lines = [x for x in lines .splitlines () if x ]
8
11
self .fields = defaultdict (str )
@@ -21,20 +24,45 @@ def parse(self):
21
24
self .description += line + '\n '
22
25
else :
23
26
self .fields [curr_action ] += line + '\n '
24
-
25
- class ChangeLogParser :
27
+
28
+ @property
29
+ def embed (self ):
30
+ em = discord .Embed (color = discord .Color .green (), description = self .description )
31
+ em .set_author (
32
+ name = f'{ self .version } - Changelog' ,
33
+ icon_url = self .bot .user .avatar_url ,
34
+ url = 'https://modmail.tk/changelog'
35
+ )
36
+ for name , value in self .fields .items ():
37
+ em .add_field (name = name , value = value )
38
+ em .set_footer (text = f'Current version: v{ self .bot .version } ' )
39
+ return em
40
+
41
+ class ChangeLog :
42
+
43
+ changelog_url = 'https://raw.githubusercontent.com/kyb3r/modmail/master/CHANGELOG.md'
26
44
regex = re .compile (r'# (v\d\.\d\.\d)([\S\s]*?(?=# v))' )
27
45
28
- def __init__ (self , text ):
46
+ def __init__ (self , bot , text ):
47
+ self .bot = bot
29
48
self .text = text
30
- self .versions = [Version (* m ) for m in self .regex .findall (text )]
49
+ self .versions = [Version (bot , * m ) for m in self .regex .findall (text )]
31
50
32
51
@property
33
52
def latest_version (self ):
34
53
return self .versions [0 ]
35
54
36
-
55
+ @property
56
+ def embeds (self ):
57
+ return [v .embed for v in self .versions ]
58
+
59
+ @classmethod
60
+ async def from_repo (cls , bot , url = None ):
61
+ url = url or cls .changelog_url
62
+ resp = await bot .session .get (url )
63
+ return cls (bot , await resp .text ())
64
+
37
65
if __name__ == '__main__' :
38
66
with open ('../CHANGELOG.md' ) as f :
39
- changelog = ChangeLogParser (f .read ())
67
+ changelog = ChangeLog (f .read ())
40
68
print (changelog .latest_version )
0 commit comments