Exemple #1
0
    async def plugin_registry(self, ctx, *, plugin_name: typing.Union[int, str] = None):
        """
        Shows a list of all approved plugins.

        Usage:
        `{prefix}plugin registry` Details about all plugins.
        `{prefix}plugin registry plugin-name` Details about the indicated plugin.
        `{prefix}plugin registry page-number` Jump to a page in the registry.
        """

        await self.populate_registry()

        embeds = []

        registry = sorted(self.registry.items(), key=lambda elem: elem[0])

        if isinstance(plugin_name, int):
            index = plugin_name - 1
            if index < 0:
                index = 0
            if index >= len(registry):
                index = len(registry) - 1
        else:
            index = next(
                (i for i, (n, _) in enumerate(registry) if plugin_name == n), 0
            )

        if not index and plugin_name is not None:
            embed = discord.Embed(
                color=discord.Color.red(),
                description=f'Could not find a plugin with name "{plugin_name}" within the registry.',
            )

            matches = get_close_matches(plugin_name, self.registry.keys())

            if matches:
                embed.add_field(
                    name="Perhaps you meant:",
                    value="\n".join(f"`{m}`" for m in matches),
                )

            return await ctx.send(embed=embed)

        for name, details in registry:
            repo = f"https://github.com/{details['repository']}"
            url = f"{repo}/tree/master/{name}"

            embed = discord.Embed(
                color=self.bot.main_color,
                description=details["description"],
                url=repo,
                title=details["repository"],
            )

            embed.add_field(
                name="Installation", value=f"```{self.bot.prefix}plugins add {name}```"
            )

            embed.set_author(
                name=details["title"], icon_url=details.get("icon_url"), url=url
            )
            if details.get("thumbnail_url"):
                embed.set_thumbnail(url=details.get("thumbnail_url"))
            if details.get("image_url"):
                embed.set_image(url=details.get("image_url"))

            embeds.append(embed)

        paginator = EmbedPaginatorSession(ctx, *embeds)
        paginator.current = index
        await paginator.run()
Exemple #2
0
    async def plugins_registry(self,
                               ctx,
                               *,
                               plugin_name: typing.Union[int, str] = None):
        """
        Shows a list of all approved plugins.

        Usage:
        `{prefix}plugin registry` Details about all plugins.
        `{prefix}plugin registry plugin-name` Details about the indicated plugin.
        `{prefix}plugin registry page-number` Jump to a page in the registry.
        """

        await self.populate_registry()

        embeds = []

        registry = sorted(self.registry.items(), key=lambda elem: elem[0])

        if isinstance(plugin_name, int):
            index = plugin_name - 1
            if index < 0:
                index = 0
            if index >= len(registry):
                index = len(registry) - 1
        else:
            index = next(
                (i for i, (n, _) in enumerate(registry) if plugin_name == n),
                0)

        if not index and plugin_name is not None:
            embed = discord.Embed(
                color=self.bot.error_color,
                description=
                f'Could not find a plugin with name "{plugin_name}" within the registry.',
            )

            matches = get_close_matches(plugin_name, self.registry.keys())

            if matches:
                embed.add_field(name="Perhaps you meant:",
                                value="\n".join(f"`{m}`" for m in matches))

            return await ctx.send(embed=embed)

        for name, details in registry:
            details = self.registry[name]
            user, repo = details["repository"].split("/", maxsplit=1)
            branch = details.get("branch")

            plugin = Plugin(user, repo, name, branch)

            embed = discord.Embed(
                color=self.bot.main_color,
                description=details["description"],
                url=plugin.link,
                title=details["repository"],
            )

            embed.add_field(name="Installation",
                            value=f"```{self.bot.prefix}plugins add {name}```")

            embed.set_author(name=details["title"],
                             icon_url=details.get("icon_url"),
                             url=plugin.link)

            if details.get("thumbnail_url"):
                embed.set_thumbnail(url=details.get("thumbnail_url"))

            if details.get("image_url"):
                embed.set_image(url=details.get("image_url"))

            if plugin in self.loaded_plugins:
                embed.set_footer(text="This plugin is currently loaded.")
            else:
                required_version = details.get("bot_version", False)
                if required_version and self.bot.version < parse_version(
                        required_version):
                    embed.set_footer(
                        text="Your bot is unable to install this plugin, "
                        f"minimum required version is v{required_version}.")
                else:
                    embed.set_footer(
                        text="Your bot is able to install this plugin.")

            embeds.append(embed)

        paginator = EmbedPaginatorSession(ctx, *embeds)
        paginator.current = index
        await paginator.run()
Exemple #3
0
    async def vplugins_registry(self,
                                ctx,
                                *,
                                vplugin_name: typing.Union[int, str] = None):
        """
        Mostra una lista di plugin del database di Vincy.

        Utilizzo:
        `{prefix}plugin registry` Dettagli riguardo tutti i plugin.
        `{prefix}plugin registry nome-plugin` Dettagli riguardo il plugin che hai specificato.
        `{prefix}plugin registry numero-pagina` Vai ad una pagina del registro.
        """

        await self.populate_vregistry()

        embeds = []

        registry = sorted(self.registry.items(), key=lambda elem: elem[0])

        if isinstance(vplugin_name, int):
            index = vplugin_name - 1
            if index < 0:
                index = 0
            if index >= len(registry):
                index = len(registry) - 1
        else:
            index = next(
                (i for i, (n, _) in enumerate(registry) if vplugin_name == n),
                0)

        if not index and vplugin_name is not None:
            embed = discord.Embed(
                color=self.bot.error_color,
                description=
                f'Non è stato trovato alcun plugin col nome "{vplugin_name}" nel registro.',
            )

            matches = get_close_matches(vplugin_name, self.registry.keys())

            if matches:
                embed.add_field(name="Forse intendevi:",
                                value="\n".join(f"`{m}`" for m in matches))

            return await ctx.send(embed=embed)

        for name, details in registry:
            details = self.registry[name]
            user, repo = details["repository"].split("/", maxsplit=1)
            branch = details.get("branch")

            plugin = Plugina(user, repo, name, branch)

            embed = discord.Embed(
                color=self.bot.main_color,
                description=details["description"],
                url=plugin.link,
                title=details["repository"],
            )

            embed.add_field(
                name="Installazione",
                value=f"```{self.bot.prefix}vplugins add {name}```")

            embed.set_author(name=details["title"],
                             icon_url=details.get("icon_url"),
                             url=plugin.link)

            if details.get("thumbnail_url"):
                embed.set_thumbnail(url=details.get("thumbnail_url"))

            if details.get("image_url"):
                embed.set_image(url=details.get("image_url"))

            if plugin in self.loaded_plugins:
                embed.set_footer(text="Questo plugin è già caricato.")
            else:
                required_version = details.get("bot_version", False)
                if required_version and self.bot.version < parse_version(
                        required_version):
                    embed.set_footer(
                        text="Il bot non può installare questo plugin, "
                        f"la versione minima richiesta è v{required_version}.")
                else:
                    embed.set_footer(
                        text="Il tuo bot può installare questo plugin.")

            embeds.append(embed)

        paginator = EmbedPaginatorSession(ctx, *embeds)
        paginator.current = index
        await paginator.run()