aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ChrisJL <[email protected]>2021-12-08 15:38:09 +0000
committerGravatar GitHub <[email protected]>2021-12-08 15:38:09 +0000
commiteb9e312435381663bc4af907ec86d2fd6fbd589d (patch)
tree30037197fbef7850f77efeb2c74dfdabf4a0ed65
parentMerge pull request #1663 from Numerlor/tag-groups (diff)
parentUse hardcoded rules url instead of constructing it from consts (diff)
Merge pull request #1539 from Numerlor/site-tags
Move static content site commands to tags
-rw-r--r--bot/exts/info/information.py37
-rw-r--r--bot/exts/info/site.py145
-rw-r--r--bot/resources/tags/faq.md6
-rw-r--r--bot/resources/tags/resources.md6
-rw-r--r--bot/resources/tags/site.md6
-rw-r--r--bot/resources/tags/tools.md6
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.