mirror of
				https://github.com/miaowware/qrm2.git
				synced 2025-10-30 19:00:22 -04:00 
			
		
		
		
	Merge branch 'changelog'
This commit is contained in:
		
						commit
						d66cc63b5f
					
				| @ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). | ||||
| - Rich lookup for QRZ, if a QRZ subscription is present | ||||
| - Timestamp and requester username and avatar are now shown on embeds | ||||
| - Current and 3-Day Forecast terrestrial weather conditions lookup commands | ||||
| - Changelog command | ||||
| ### Changed | ||||
| - Rewrote code to take advantage of discord.py's cogs | ||||
| - Moved most bot responses into embeds | ||||
|  | ||||
| @ -8,6 +8,8 @@ General Public License, version 2. | ||||
| """ | ||||
| 
 | ||||
| from datetime import datetime | ||||
| import re | ||||
| from collections import OrderedDict | ||||
| 
 | ||||
| import discord | ||||
| import discord.ext.commands as commands | ||||
| @ -17,6 +19,7 @@ class BaseCog(commands.Cog): | ||||
|     def __init__(self, bot: commands.Bot): | ||||
|         self.bot = bot | ||||
|         self.gs = bot.get_cog("GlobalSettings") | ||||
|         self.changelog = parse_changelog() | ||||
| 
 | ||||
|     @commands.command(name="info", aliases=["about"]) | ||||
|     async def _info(self, ctx): | ||||
| @ -43,6 +46,65 @@ class BaseCog(commands.Cog): | ||||
|                          icon_url=str(ctx.author.avatar_url)) | ||||
|         await ctx.send(embed=embed) | ||||
| 
 | ||||
|     @commands.command(name="changelog", aliases=["clog"]) | ||||
|     async def _changelog(self, ctx: commands.Context): | ||||
|         """Show what has changed in recent bot versions.""" | ||||
|         embed = discord.Embed(title="qrm Changelog", | ||||
|                               description=("For a full listing, visit [Github](https://" | ||||
|                                            "github.com/classabbyamp/discord-qrm-bot/blob/master/CHANGELOG.md)."), | ||||
|                               colour=self.gs.colours.neutral, | ||||
|                               timestamp=datetime.utcnow()) | ||||
|         embed.set_footer(text=ctx.author.name, | ||||
|                          icon_url=str(ctx.author.avatar_url)) | ||||
|         changelog = self.changelog | ||||
| 
 | ||||
|         vers = 0 | ||||
|         for ver, log in changelog.items(): | ||||
|             if ver.lower() != 'unreleased': | ||||
|                 if 'date' in log: | ||||
|                     header = f'**{ver}** ({log["date"]})' | ||||
|                 else: | ||||
|                     header = f'**{ver}**' | ||||
|                 embed.add_field(name=header, value=await format_changelog(log), inline=False) | ||||
|                 vers += 1 | ||||
|             if vers >= 2: | ||||
|                 break | ||||
| 
 | ||||
|         await ctx.send(embed=embed) | ||||
| 
 | ||||
| 
 | ||||
| def parse_changelog(): | ||||
|     changelog = OrderedDict() | ||||
|     ver = '' | ||||
|     heading = '' | ||||
| 
 | ||||
|     with open('CHANGELOG.md') as changelog_file: | ||||
|         for line in changelog_file.readlines(): | ||||
|             if line.strip() == '': | ||||
|                 continue | ||||
|             if re.match(r'##[^#]', line): | ||||
|                 ver_match = re.match(r'\[(.+)\](?: - )?(\d{4}-\d{2}-\d{2})?', line.lstrip('#').strip()) | ||||
|                 ver = ver_match.group(1) | ||||
|                 changelog[ver] = dict() | ||||
|                 if ver_match.group(2): | ||||
|                     changelog[ver]['date'] = ver_match.group(2) | ||||
|             elif re.match(r'###[^#]', line): | ||||
|                 heading = line.lstrip('#').strip() | ||||
|                 changelog[ver][heading] = [] | ||||
|             elif ver != '' and heading != '': | ||||
|                 changelog[ver][heading].append(line.lstrip('-').strip()) | ||||
|     return changelog | ||||
| 
 | ||||
| 
 | ||||
| async def format_changelog(log: dict): | ||||
|     formatted = '' | ||||
|     for header, lines in log.items(): | ||||
|         if header != 'date': | ||||
|             formatted += f'**{header}**\n' | ||||
|             for line in lines: | ||||
|                 formatted += f'- {line}\n' | ||||
|     return formatted | ||||
| 
 | ||||
| 
 | ||||
| def setup(bot: commands.Bot): | ||||
|     bot.add_cog(BaseCog(bot)) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user