Skip to content

Commit b6284a0

Browse files
committed
Add a changelog command
1 parent 2fd93fc commit b6284a0

File tree

3 files changed

+46
-7
lines changed

3 files changed

+46
-7
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
# [unreleased]
8+
### Added
9+
710
# v2.0.6
811

912
### Fixed

cogs/utility.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from core.paginator import PaginatorSession
1212
from core.decorators import auth_required, owner_only, trigger_typing
13+
from core.changelog import ChangeLog
1314

1415

1516
class Utility:
@@ -151,6 +152,13 @@ async def help(self, ctx, *, command: str=None):
151152
p_session = PaginatorSession(ctx, *pages)
152153

153154
await p_session.run()
155+
156+
@commands.command()
157+
@trigger_typing
158+
async def changelog(self, ctx):
159+
changelog = await ChangeLog.from_repo(self.bot)
160+
p = PaginatorSession(ctx, *changelog.embeds)
161+
await p.run()
154162

155163
@commands.command()
156164
@trigger_typing

core/changelog.py

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
from collections import defaultdict
22
import re
33

4+
import discord
5+
46
class Version:
5-
def __init__(self, version, lines):
7+
def __init__(self, bot, version, lines):
8+
self.bot = bot
69
self.version = version
710
self.lines = [x for x in lines.splitlines() if x]
811
self.fields = defaultdict(str)
@@ -21,20 +24,45 @@ def parse(self):
2124
self.description += line + '\n'
2225
else:
2326
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'
2644
regex = re.compile(r'# (v\d\.\d\.\d)([\S\s]*?(?=# v))')
2745

28-
def __init__(self, text):
46+
def __init__(self, bot, text):
47+
self.bot = bot
2948
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)]
3150

3251
@property
3352
def latest_version(self):
3453
return self.versions[0]
3554

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+
3765
if __name__ == '__main__':
3866
with open('../CHANGELOG.md') as f:
39-
changelog = ChangeLogParser(f.read())
67+
changelog = ChangeLog(f.read())
4068
print(changelog.latest_version)

0 commit comments

Comments
 (0)