blob: 27804170adfd7bb22bca3273ccaa9ac3e10a5a76 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import discord
from discord.ext.commands import BadArgument, Context
from discord.ext.commands.converter import Converter, MessageConverter
class WrappedMessageConverter(MessageConverter):
"""A converter that handles embed-suppressed links like <http://example.com>."""
async def convert(self, ctx: discord.ext.commands.Context, argument: str) -> discord.Message:
"""Wrap the commands.MessageConverter to handle <> delimited message links."""
# It's possible to wrap a message in [<>] as well, and it's supported because its easy
if argument.startswith("[") and argument.endswith("]"):
argument = argument[1:-1]
if argument.startswith("<") and argument.endswith(">"):
argument = argument[1:-1]
return await super().convert(ctx, argument)
class Subreddit(Converter):
"""Forces a string to begin with "r/" and checks if it's a valid subreddit."""
@staticmethod
async def convert(ctx: Context, sub: str) -> str:
"""
Force sub to begin with "r/" and check if it's a valid subreddit.
If sub is a valid subreddit, return it prepended with "r/"
"""
sub = sub.lower()
if not sub.startswith("r/"):
sub = f"r/{sub}"
resp = await ctx.bot.http_session.get(
"https://www.reddit.com/subreddits/search.json",
params={"q": sub}
)
json = await resp.json()
if not json["data"]["children"]:
raise BadArgument(
f"The subreddit `{sub}` either doesn't exist, or it has no posts."
)
return sub
|