diff options
Diffstat (limited to 'bot/exts/evergreen/source.py')
| -rw-r--r-- | bot/exts/evergreen/source.py | 85 | 
1 files changed, 0 insertions, 85 deletions
| diff --git a/bot/exts/evergreen/source.py b/bot/exts/evergreen/source.py deleted file mode 100644 index 7572ce51..00000000 --- a/bot/exts/evergreen/source.py +++ /dev/null @@ -1,85 +0,0 @@ -import inspect -from pathlib import Path -from typing import Optional - -from discord import Embed -from discord.ext import commands - -from bot.bot import Bot -from bot.constants import Source -from bot.utils.converters import SourceConverter, SourceType - - -class BotSource(commands.Cog): -    """Displays information about the bot's source code.""" - -    @commands.command(name="source", aliases=("src",)) -    async def source_command(self, ctx: commands.Context, *, source_item: SourceConverter = None) -> None: -        """Display information and a GitHub link to the source code of a command, tag, or cog.""" -        if not source_item: -            embed = Embed(title="Sir Lancebot's GitHub Repository") -            embed.add_field(name="Repository", value=f"[Go to GitHub]({Source.github})") -            embed.set_thumbnail(url=Source.github_avatar_url) -            await ctx.send(embed=embed) -            return - -        embed = await self.build_embed(source_item) -        await ctx.send(embed=embed) - -    def get_source_link(self, source_item: SourceType) -> tuple[str, str, Optional[int]]: -        """ -        Build GitHub link of source item, return this link, file location and first line number. - -        Raise BadArgument if `source_item` is a dynamically-created object (e.g. via internal eval). -        """ -        if isinstance(source_item, commands.Command): -            callback = inspect.unwrap(source_item.callback) -            src = callback.__code__ -            filename = src.co_filename -        else: -            src = type(source_item) -            try: -                filename = inspect.getsourcefile(src) -            except TypeError: -                raise commands.BadArgument("Cannot get source for a dynamically-created object.") - -        if not isinstance(source_item, str): -            try: -                lines, first_line_no = inspect.getsourcelines(src) -            except OSError: -                raise commands.BadArgument("Cannot get source for a dynamically-created object.") - -            lines_extension = f"#L{first_line_no}-L{first_line_no+len(lines)-1}" -        else: -            first_line_no = None -            lines_extension = "" - -        file_location = Path(filename).relative_to(Path.cwd()).as_posix() - -        url = f"{Source.github}/blob/main/{file_location}{lines_extension}" - -        return url, file_location, first_line_no or None - -    async def build_embed(self, source_object: SourceType) -> Optional[Embed]: -        """Build embed based on source object.""" -        url, location, first_line = self.get_source_link(source_object) - -        if isinstance(source_object, commands.Command): -            description = source_object.short_doc -            title = f"Command: {source_object.qualified_name}" -        else: -            title = f"Cog: {source_object.qualified_name}" -            description = source_object.description.splitlines()[0] - -        embed = Embed(title=title, description=description) -        embed.set_thumbnail(url=Source.github_avatar_url) -        embed.add_field(name="Source Code", value=f"[Go to GitHub]({url})") -        line_text = f":{first_line}" if first_line else "" -        embed.set_footer(text=f"{location}{line_text}") - -        return embed - - -def setup(bot: Bot) -> None: -    """Load the BotSource cog.""" -    bot.add_cog(BotSource()) | 
