diff options
| -rw-r--r-- | bot/exts/info/information.py | 37 | ||||
| -rw-r--r-- | bot/exts/info/site.py | 145 | ||||
| -rw-r--r-- | bot/resources/tags/faq.md | 6 | ||||
| -rw-r--r-- | bot/resources/tags/resources.md | 6 | ||||
| -rw-r--r-- | bot/resources/tags/site.md | 6 | ||||
| -rw-r--r-- | bot/resources/tags/tools.md | 6 | 
6 files changed, 60 insertions, 146 deletions
diff --git a/bot/exts/info/information.py b/bot/exts/info/information.py index 5b48495dc..fa22a4fe9 100644 --- a/bot/exts/info/information.py +++ b/bot/exts/info/information.py @@ -2,11 +2,12 @@ import colorsys  import pprint  import textwrap  from collections import defaultdict +from textwrap import shorten  from typing import Any, DefaultDict, Mapping, Optional, Tuple, Union  import rapidfuzz  from discord import AllowedMentions, Colour, Embed, Guild, Message, Role -from discord.ext.commands import BucketType, Cog, Context, Paginator, command, group, has_any_role +from discord.ext.commands import BucketType, Cog, Context, Greedy, Paginator, command, group, has_any_role  from discord.utils import escape_markdown  from bot import constants @@ -523,6 +524,40 @@ class Information(Cog):          """Shows information about the raw API response in a copy-pasteable Python format."""          await self.send_raw_content(ctx, message, json=True) +    @command(aliases=("rule",)) +    async def rules(self, ctx: Context, rules: Greedy[int]) -> None: +        """Provides a link to all rules or, if specified, displays specific rule(s).""" +        rules_embed = Embed(title="Rules", color=Colour.og_blurple(), url="https://www.pythondiscord.com/pages/rules") + +        if not rules: +            # Rules were not submitted. Return the default description. +            rules_embed.description = ( +                "The rules and guidelines that apply to this community can be found on" +                " our [rules page](https://www.pythondiscord.com/pages/rules). We expect" +                " all members of the community to have read and understood these." +            ) + +            await ctx.send(embed=rules_embed) +            return + +        full_rules = await self.bot.api_client.get("rules", params={"link_format": "md"}) + +        # Remove duplicates and sort the rule indices +        rules = sorted(set(rules)) + +        invalid = ", ".join(str(index) for index in rules if index < 1 or index > len(full_rules)) + +        if invalid: +            await ctx.send(shorten(":x: Invalid rule indices: " + invalid, 75, placeholder=" ...")) +            return + +        for rule in rules: +            self.bot.stats.incr(f"rule_uses.{rule}") + +        final_rules = tuple(f"**{pick}.** {full_rules[pick - 1]}" for pick in rules) + +        await LinePaginator.paginate(final_rules, ctx, rules_embed, max_lines=3) +  def setup(bot: Bot) -> None:      """Load the Information cog.""" diff --git a/bot/exts/info/site.py b/bot/exts/info/site.py deleted file mode 100644 index f6499ecce..000000000 --- a/bot/exts/info/site.py +++ /dev/null @@ -1,145 +0,0 @@ -from textwrap import shorten - -from discord import Colour, Embed -from discord.ext.commands import Cog, Context, Greedy, group - -from bot.bot import Bot -from bot.constants import URLs -from bot.log import get_logger -from bot.pagination import LinePaginator - -log = get_logger(__name__) - -BASE_URL = f"{URLs.site_schema}{URLs.site}" - - -class Site(Cog): -    """Commands for linking to different parts of the site.""" - -    def __init__(self, bot: Bot): -        self.bot = bot - -    @group(name="site", aliases=("s",), invoke_without_command=True) -    async def site_group(self, ctx: Context) -> None: -        """Commands for getting info about our website.""" -        await ctx.send_help(ctx.command) - -    @site_group.command(name="home", aliases=("about",), root_aliases=("home",)) -    async def site_main(self, ctx: Context) -> None: -        """Info about the website itself.""" -        url = f"{URLs.site_schema}{URLs.site}/" - -        embed = Embed(title="Python Discord website") -        embed.set_footer(text=url) -        embed.colour = Colour.og_blurple() -        embed.description = ( -            f"[Our official website]({url}) is an open-source community project " -            "created with Python and Django. It contains information about the server " -            "itself, lets you sign up for upcoming events, has its own wiki, contains " -            "a list of valuable learning resources, and much more." -        ) - -        await ctx.send(embed=embed) - -    @site_group.command(name="resources", root_aliases=("resources", "resource")) -    async def site_resources(self, ctx: Context) -> None: -        """Info about the site's Resources page.""" -        learning_url = f"{BASE_URL}/resources" - -        embed = Embed(title="Resources") -        embed.set_footer(text=f"{learning_url}") -        embed.colour = Colour.og_blurple() -        embed.description = ( -            f"The [Resources page]({learning_url}) on our website contains a " -            "list of hand-selected learning resources that we regularly recommend " -            f"to both beginners and experts." -        ) - -        await ctx.send(embed=embed) - -    @site_group.command(name="tools", root_aliases=("tools",)) -    async def site_tools(self, ctx: Context) -> None: -        """Info about the site's Tools page.""" -        tools_url = f"{BASE_URL}/resources/tools" - -        embed = Embed(title="Tools") -        embed.set_footer(text=f"{tools_url}") -        embed.colour = Colour.og_blurple() -        embed.description = ( -            f"The [Tools page]({tools_url}) on our website contains a " -            f"couple of the most popular tools for programming in Python." -        ) - -        await ctx.send(embed=embed) - -    @site_group.command(name="help") -    async def site_help(self, ctx: Context) -> None: -        """Info about the site's Getting Help page.""" -        url = f"{BASE_URL}/pages/guides/pydis-guides/asking-good-questions/" - -        embed = Embed(title="Asking Good Questions") -        embed.set_footer(text=url) -        embed.colour = Colour.og_blurple() -        embed.description = ( -            "Asking the right question about something that's new to you can sometimes be tricky. " -            f"To help with this, we've created a [guide to asking good questions]({url}) on our website. " -            "It contains everything you need to get the very best help from our community." -        ) - -        await ctx.send(embed=embed) - -    @site_group.command(name="faq", root_aliases=("faq",)) -    async def site_faq(self, ctx: Context) -> None: -        """Info about the site's FAQ page.""" -        url = f"{BASE_URL}/pages/frequently-asked-questions" - -        embed = Embed(title="FAQ") -        embed.set_footer(text=url) -        embed.colour = Colour.og_blurple() -        embed.description = ( -            "As the largest Python community on Discord, we get hundreds of questions every day. " -            "Many of these questions have been asked before. We've compiled a list of the most " -            "frequently asked questions along with their answers, which can be found on " -            f"our [FAQ page]({url})." -        ) - -        await ctx.send(embed=embed) - -    @site_group.command(name="rules", aliases=("r", "rule"), root_aliases=("rules", "rule")) -    async def site_rules(self, ctx: Context, rules: Greedy[int]) -> None: -        """Provides a link to all rules or, if specified, displays specific rule(s).""" -        rules_embed = Embed(title='Rules', color=Colour.og_blurple(), url=f'{BASE_URL}/pages/rules') - -        if not rules: -            # Rules were not submitted. Return the default description. -            rules_embed.description = ( -                "The rules and guidelines that apply to this community can be found on" -                f" our [rules page]({BASE_URL}/pages/rules). We expect" -                " all members of the community to have read and understood these." -            ) - -            await ctx.send(embed=rules_embed) -            return - -        full_rules = await self.bot.api_client.get('rules', params={'link_format': 'md'}) - -        # Remove duplicates and sort the rule indices -        rules = sorted(set(rules)) - -        invalid = ', '.join(str(index) for index in rules if index < 1 or index > len(full_rules)) - -        if invalid: -            await ctx.send(shorten(":x: Invalid rule indices: " + invalid, 75, placeholder=' ...')) -            return - -        for rule in rules: -            self.bot.stats.incr(f"rule_uses.{rule}") - -        final_rules = tuple(f"**{pick}.** {full_rules[pick - 1]}" for pick in rules) - -        await LinePaginator.paginate(final_rules, ctx, rules_embed, max_lines=3) - - -def setup(bot: Bot) -> None: -    """Load the Site cog.""" -    bot.add_cog(Site(bot)) diff --git a/bot/resources/tags/faq.md b/bot/resources/tags/faq.md new file mode 100644 index 000000000..e1c57b3a0 --- /dev/null +++ b/bot/resources/tags/faq.md @@ -0,0 +1,6 @@ +--- +embed: +    title: "Frequently asked questions" +--- + +As the largest Python community on Discord, we get hundreds of questions every day. Many of these questions have been asked before. We've compiled a list of the most frequently asked questions along with their answers, which can be found on our [FAQ page](https://www.pythondiscord.com/pages/frequently-asked-questions/). diff --git a/bot/resources/tags/resources.md b/bot/resources/tags/resources.md new file mode 100644 index 000000000..201e0eb1e --- /dev/null +++ b/bot/resources/tags/resources.md @@ -0,0 +1,6 @@ +--- +embed: +    title: "Resources" +--- + +The [Resources page](https://www.pythondiscord.com/resources/) on our website contains a list of hand-selected learning resources that we regularly recommend to both beginners and experts. diff --git a/bot/resources/tags/site.md b/bot/resources/tags/site.md new file mode 100644 index 000000000..376f84742 --- /dev/null +++ b/bot/resources/tags/site.md @@ -0,0 +1,6 @@ +--- +embed: +    title: "Python Discord Website" +--- + +[Our official website](https://www.pythondiscord.com/) is an open-source community project created with Python and Django. It contains information about the server itself, lets you sign up for upcoming events, has its own wiki, contains a list of valuable learning resources, and much more. diff --git a/bot/resources/tags/tools.md b/bot/resources/tags/tools.md new file mode 100644 index 000000000..3cae75552 --- /dev/null +++ b/bot/resources/tags/tools.md @@ -0,0 +1,6 @@ +--- +embed: +    title: "Tools" +--- + +The [Tools page](https://www.pythondiscord.com/resources/tools/) on our website contains a couple of the most popular tools for programming in Python.  |